From 6dbda1115e5a920d71bb0bb3632396ac94cf201a Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 29 Jan 2021 11:02:56 +0100 Subject: [PATCH 001/403] Experimental improvement * Does not work with the JS toolkit - page castoff --- include/vrv/measure.h | 4 ++++ include/vrv/scoredef.h | 2 ++ src/doc.cpp | 16 +++++++++++----- src/measure.cpp | 24 ++++++++++++++++++------ src/page.cpp | 2 +- src/scoredef.cpp | 6 +++++- src/toolkit.cpp | 5 +++++ 7 files changed, 46 insertions(+), 13 deletions(-) diff --git a/include/vrv/measure.h b/include/vrv/measure.h index 2c62b6e167f..153b183d2ba 100644 --- a/include/vrv/measure.h +++ b/include/vrv/measure.h @@ -431,6 +431,10 @@ class Measure : public Object, mutable MeasureAligner m_measureAligner; TimestampAligner m_timestampAligner; + + int m_cachedCastOffOverflow; + int m_cachedCastOffDrawingXRel; + int m_cachedCastOffWidth; protected: /** diff --git a/include/vrv/scoredef.h b/include/vrv/scoredef.h index 0e2d7dce180..ee8a38e35a8 100644 --- a/include/vrv/scoredef.h +++ b/include/vrv/scoredef.h @@ -218,6 +218,8 @@ class ScoreDef : public ScoreDefElement, // public: bool m_setAsDrawing; + + int m_cacheCastOffWidth; // private: /** Flags for indicating whether labels need to be drawn or not */ diff --git a/src/doc.cpp b/src/doc.cpp index 1f1c3324f99..78c1ccc5e0f 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -849,10 +849,16 @@ void Doc::CastOffDocBase(bool useSb, bool usePb, bool smart) } this->SetCurrentScoreDefDoc(); - + Page *contentPage = this->SetDrawingPage(0); assert(contentPage); - contentPage->LayOutHorizontally(); + + Measure *firstMeasure = vrv_cast(contentPage->FindDescendantByType(MEASURE)); + if (!firstMeasure || firstMeasure->m_cachedCastOffWidth == VRV_UNSET) { + LogMessage("Doing Horizontal Layout"); + contentPage->LayOutHorizontally(); + LogMessage("Horizontal Layout Done"); + } System *contentSystem = vrv_cast(contentPage->DetachChild(0)); assert(contentSystem); @@ -869,10 +875,10 @@ void Doc::CastOffDocBase(bool useSb, bool usePb, bool smart) else { CastOffSystemsParams castOffSystemsParams(contentSystem, contentPage, currentSystem, this, smart); castOffSystemsParams.m_systemWidth - = this->m_drawingPageContentWidth - currentSystem->m_systemLeftMar - currentSystem->m_systemRightMar; - castOffSystemsParams.m_shift = -contentSystem->GetDrawingLabelsWidth(); + = this->m_drawingPageContentWidth;// - currentSystem->m_systemLeftMar - currentSystem->m_systemRightMar; + castOffSystemsParams.m_shift = 0; //-contentSystem->GetDrawingLabelsWidth(); castOffSystemsParams.m_currentScoreDefWidth - = contentPage->m_drawingScoreDef.GetDrawingWidth() + contentSystem->GetDrawingAbbrLabelsWidth(); + = 0; //contentPage->m_drawingScoreDef.GetDrawingWidth() + contentSystem->GetDrawingAbbrLabelsWidth(); Functor castOffSystems(&Object::CastOffSystems); Functor castOffSystemsEnd(&Object::CastOffSystemsEnd); diff --git a/src/measure.cpp b/src/measure.cpp index 3e794e6daca..d2a480fb7b9 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -119,6 +119,10 @@ void Measure::Reset() m_xAbs = VRV_UNSET; m_xAbs2 = VRV_UNSET; m_drawingXRel = 0; + + m_cachedCastOffOverflow = VRV_UNSET; + m_cachedCastOffDrawingXRel = VRV_UNSET; + m_cachedCastOffWidth = VRV_UNSET; // by default, we have a single barLine on the right (none on the left) m_rightBarLine.SetForm(this->GetRight()); @@ -918,9 +922,17 @@ int Measure::CastOffSystems(FunctorParams *functorParams) { CastOffSystemsParams *params = vrv_params_cast(functorParams); assert(params); - - // Check if the measure has some overlfowing control elements - int overflow = this->GetDrawingOverflow(); + + if (m_cachedCastOffWidth == VRV_UNSET) { + // Check if the measure has some overlfowing control elements + m_cachedCastOffOverflow = this->GetDrawingOverflow(); + m_cachedCastOffWidth = this->GetWidth(); + m_cachedCastOffDrawingXRel = this->m_drawingXRel; + + } + int overflow = this->m_cachedCastOffOverflow; + int width = this->m_cachedCastOffWidth; + int drawingXRel = this->m_cachedCastOffDrawingXRel; if (params->m_currentSystem->GetChildCount() > 0) { // We have overflowing content (dir, dynam, tempo) larger than 5 units, keep it as pending @@ -933,16 +945,16 @@ int Measure::CastOffSystems(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } // Break it if necessary - else if (this->m_drawingXRel + this->GetWidth() + params->m_currentScoreDefWidth - params->m_shift + else if (drawingXRel + width + params->m_currentScoreDefWidth - params->m_shift > params->m_systemWidth) { params->m_currentSystem = new System(); params->m_page->AddChild(params->m_currentSystem); - params->m_shift = this->m_drawingXRel; + params->m_shift = drawingXRel; for (Object *oneOfPendingObjects : params->m_pendingObjects) { if (oneOfPendingObjects->Is(MEASURE)) { Measure *firstPendingMesure = vrv_cast(oneOfPendingObjects); assert(firstPendingMesure); - params->m_shift = firstPendingMesure->m_drawingXRel; + params->m_shift = firstPendingMesure->m_cachedCastOffDrawingXRel; // it has to be first measure break; } diff --git a/src/page.cpp b/src/page.cpp index 6280bf501a2..721176ab1d6 100644 --- a/src/page.cpp +++ b/src/page.cpp @@ -242,7 +242,7 @@ void Page::LayOutHorizontally() Functor alignVerticallyEnd(&Object::AlignVerticallyEnd); AlignVerticallyParams alignVerticallyParams(doc, &alignVertically, &alignVerticallyEnd); this->Process(&alignVertically, &alignVerticallyParams, &alignVerticallyEnd); - + // Unless duration-based spacing is disabled, set the X position of each Alignment. // Does non-linear spacing based on the duration space between two Alignment objects. if (!doc->GetOptions()->m_evenNoteSpacing.GetValue()) { diff --git a/src/scoredef.cpp b/src/scoredef.cpp index 0fb8fa4f151..e91007544a7 100644 --- a/src/scoredef.cpp +++ b/src/scoredef.cpp @@ -167,6 +167,7 @@ void ScoreDef::Reset() m_drawLabels = false; m_drawingWidth = 0; m_setAsDrawing = false; + m_cacheCastOffWidth = VRV_UNSET; } bool ScoreDef::IsSupportedChild(Object *child) @@ -417,7 +418,10 @@ int ScoreDef::CastOffSystems(FunctorParams *functorParams) // the initial one - for this to be corrected, we would need two parameters, one for the current initial // scoreDef and one for the current that will be the initial one at the next system // Also, the abbr label (width) changes would not be taken into account - params->m_currentScoreDefWidth = this->GetDrawingWidth() + params->m_contentSystem->GetDrawingAbbrLabelsWidth(); + if (m_cacheCastOffWidth == VRV_UNSET) { + m_cacheCastOffWidth = this->GetDrawingWidth() + params->m_contentSystem->GetDrawingAbbrLabelsWidth(); + } + params->m_currentScoreDefWidth = m_cacheCastOffWidth; return FUNCTOR_SIBLINGS; } diff --git a/src/toolkit.cpp b/src/toolkit.cpp index c7d3be535b5..8b4851671ba 100644 --- a/src/toolkit.cpp +++ b/src/toolkit.cpp @@ -694,6 +694,11 @@ bool Toolkit::LoadData(const std::string &data) } // LogElapsedTimeStart(); m_doc.CastOffDoc(); + + //m_options->m_pageWidth.SetValue(1000); + + //m_doc.UnCastOffDoc(); + //m_doc.CastOffDoc(); // LogElapsedTimeEnd("layout"); } } From 81c1f4c45e68cdce079ea80346256ac347297f2b Mon Sep 17 00:00:00 2001 From: Paul Overell Date: Thu, 30 Sep 2021 15:54:50 +0100 Subject: [PATCH 002/403] Verovio MIDI output for tablature --- include/vrv/course.h | 6 ++- include/vrv/tabgrp.h | 5 +++ include/vrv/tuning.h | 11 +++++ src/course.cpp | 10 ++++- src/iomei.cpp | 8 +++- src/layerelement.cpp | 9 ++++- src/note.cpp | 10 ++++- src/tabgrp.cpp | 19 +++++++++ src/tuning.cpp | 95 ++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 166 insertions(+), 7 deletions(-) diff --git a/include/vrv/course.h b/include/vrv/course.h index ff6623905de..f82c1aff8c6 100644 --- a/include/vrv/course.h +++ b/include/vrv/course.h @@ -20,7 +20,11 @@ namespace vrv { /** * This class models the MEI element. */ -class Course : public Object, public AttNNumberLike { +class Course : public Object, + public AttAccidental, + public AttNNumberLike, + public AttOctave, + public AttPitch { public: /** * @name Constructors, destructors, and other standard methods diff --git a/include/vrv/tabgrp.h b/include/vrv/tabgrp.h index 4607a1deff4..2a0f9f7f28e 100644 --- a/include/vrv/tabgrp.h +++ b/include/vrv/tabgrp.h @@ -45,6 +45,11 @@ class TabGrp : public LayerElement, public DurationInterface { * Add an element to a element. */ virtual bool IsSupportedChild(Object *object); + + /** + * See Object::CalcOnsetOffsetEnd + */ + virtual int CalcOnsetOffsetEnd(FunctorParams *functorParams) override; protected: // diff --git a/include/vrv/tuning.h b/include/vrv/tuning.h index e41d7af16ab..cb5284267f0 100644 --- a/include/vrv/tuning.h +++ b/include/vrv/tuning.h @@ -44,6 +44,17 @@ class Tuning : public Object, public AttCourseLog { * Return the line for a the tuning and a given course and a notation type */ int CalcPitchPos(int course, data_NOTATIONTYPE notationType, int lines); + + /** + * Calclate the MIDI pitch number for course/fret + * + * @param[in] course + * @param[in] fret + * @param[in] notationType, used to default tuning if not otherwise specified + * + * @return MIDI pitch + */ + int CalcPitchNumber(int course, int fret, data_NOTATIONTYPE notationType); protected: // diff --git a/src/course.cpp b/src/course.cpp index c478f76ebe7..a2fa53011f0 100644 --- a/src/course.cpp +++ b/src/course.cpp @@ -21,10 +21,13 @@ namespace vrv { static ClassRegistrar s_factory("course", COURSE); -Course::Course() : Object("course-"), AttNNumberLike() +Course::Course() : Object("course-") { + RegisterAttClass(ATT_ACCIDENTAL); RegisterAttClass(ATT_NNUMBERLIKE); - + RegisterAttClass(ATT_OCTAVE); + RegisterAttClass(ATT_PITCH); + Reset(); } @@ -33,7 +36,10 @@ Course::~Course() {} void Course::Reset() { Object::Reset(); + ResetAccidental(); ResetNNumberLike(); + ResetOctave(); + ResetPitch(); } bool Course::IsSupportedChild(Object *child) diff --git a/src/iomei.cpp b/src/iomei.cpp index 44187cf2cb3..25afd02a887 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -1178,7 +1178,10 @@ void MEIOutput::WriteCourse(pugi::xml_node currentNode, Course *course) assert(course); WriteXmlId(currentNode, course); + course->WriteAccidental(currentNode); course->WriteNNumberLike(currentNode); + course->WriteOctave(currentNode); + course->WritePitch(currentNode); } void MEIOutput::WriteMeasure(pugi::xml_node currentNode, Measure *measure) @@ -4035,8 +4038,11 @@ bool MEIInput::ReadCourse(Object *parent, pugi::xml_node course) SetMeiUuid(course, vrvCourse); parent->AddChild(vrvCourse); + vrvCourse->ReadAccidental(course); vrvCourse->ReadNNumberLike(course); - + vrvCourse->ReadOctave(course); + vrvCourse->ReadPitch(course); + ReadUnsupportedAttr(course, vrvCourse); return true; diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 84dcf255f9f..6d5823e690e 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -2102,6 +2102,7 @@ int LayerElement::CalcOnsetOffset(FunctorParams *functorParams) if (note->IsGraceNote()) return FUNCTOR_CONTINUE; Chord *chord = note->IsChordTone(); + TabGrp *tabGrp = note->IsTabGrpNote(); // If the note has a @dur or a @dur.ges, take it into account // This means that overwriting only @dots or @dots.ges will not be taken into account @@ -2109,6 +2110,10 @@ int LayerElement::CalcOnsetOffset(FunctorParams *functorParams) incrementScoreTime = chord->GetAlignmentDuration( params->m_currentMensur, params->m_currentMeterSig, true, params->m_notationType); } + else if (tabGrp && !note->HasDur() && !note->HasDurGes()) { + incrementScoreTime = tabGrp->GetAlignmentDuration( + params->m_currentMensur, params->m_currentMeterSig, true, params->m_notationType); + } else { incrementScoreTime = note->GetAlignmentDuration( params->m_currentMensur, params->m_currentMeterSig, true, params->m_notationType); @@ -2131,8 +2136,8 @@ int LayerElement::CalcOnsetOffset(FunctorParams *functorParams) storeNote->SetScoreTimeOffset(params->m_currentScoreTime + incrementScoreTime); storeNote->SetRealTimeOffsetSeconds(params->m_currentRealTimeSeconds + realTimeIncrementSeconds); - // increase the currentTime accordingly, but only if not in a chord - checkit with note->IsChordTone() - if (!(note->IsChordTone())) { + // increase the currentTime accordingly, but only if not in a chord or tabGrp - checkit with note->IsChordTone() or note->IsTabGrpNote() + if (!(note->IsChordTone()) && !(note->IsTabGrpNote())) { params->m_currentScoreTime += incrementScoreTime; params->m_currentRealTimeSeconds += realTimeIncrementSeconds; } diff --git a/src/note.cpp b/src/note.cpp index fab30c60e3f..5da3d81defd 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -32,6 +32,7 @@ #include "tabgrp.h" #include "tie.h" #include "transposition.h" +#include "tuning.h" #include "verse.h" #include "vrv.h" @@ -1256,7 +1257,7 @@ int Note::GenerateMIDI(FunctorParams *functorParams) if (note->HasPnum()) { pitch = note->GetPnum(); } - else { + else if (note->HasPname() || note->HasPnameGes()){ // calc pitch int midiBase = 0; data_PITCHNAME pname = note->GetPname(); @@ -1282,6 +1283,13 @@ int Note::GenerateMIDI(FunctorParams *functorParams) pitch = midiBase + (oct + 1) * 12; } + else if (note->HasTabCourse()) { + // tablature + Staff* staff = vrv_cast(note->GetFirstAncestor(STAFF)); + assert(staff); + if (staff->m_drawingTuning) + pitch = staff->m_drawingTuning->CalcPitchNumber(note->GetTabCourse(), note->GetTabFret(), staff->m_drawingNotationType); + } // We do store the MIDIPitch in the note even with a sameas this->SetMIDIPitch(pitch); diff --git a/src/tabgrp.cpp b/src/tabgrp.cpp index d12c8a05627..762b23f8f37 100644 --- a/src/tabgrp.cpp +++ b/src/tabgrp.cpp @@ -14,6 +14,7 @@ //---------------------------------------------------------------------------- #include "editorial.h" +#include "functorparams.h" #include "note.h" #include "tabdursym.h" @@ -57,4 +58,22 @@ bool TabGrp::IsSupportedChild(Object *child) return true; } +int TabGrp::CalcOnsetOffsetEnd(FunctorParams *functorParams) +{ + CalcOnsetOffsetParams *params = vrv_params_cast(functorParams); + assert(params); + + LayerElement *element = this->ThisOrSameasAsLink(); + + double incrementScoreTime = element->GetAlignmentDuration( + params->m_currentMensur, params->m_currentMeterSig, true, params->m_notationType); + incrementScoreTime = incrementScoreTime / (DUR_MAX / DURATION_4); + double realTimeIncrementSeconds = incrementScoreTime * 60.0 / params->m_currentTempo; + + params->m_currentScoreTime += incrementScoreTime; + params->m_currentRealTimeSeconds += realTimeIncrementSeconds; + + return FUNCTOR_CONTINUE; +} + } // namespace vrv diff --git a/src/tuning.cpp b/src/tuning.cpp index 3a201a8d107..3a78541aa6c 100644 --- a/src/tuning.cpp +++ b/src/tuning.cpp @@ -10,9 +10,11 @@ //---------------------------------------------------------------------------- #include +#include //---------------------------------------------------------------------------- +#include "comparison.h" #include "course.h" #include "editorial.h" @@ -65,4 +67,97 @@ int Tuning::CalcPitchPos(int course, data_NOTATIONTYPE notationType, int lines) } } +int Tuning::CalcPitchNumber(int course, int fret, data_NOTATIONTYPE notationType) +{ + // Use s, if available + // else use @tuning.standard, if available + // else use @notationType + + // Do we have the tuning for this course? + AttNNumberLikeComparison cnc(COURSE, std::to_string(course)); + Course* const courseTuning{vrv_cast(FindDescendantByComparison(&cnc))}; + + if (courseTuning && courseTuning->HasPname() && courseTuning->HasOct()) { + + // Distance in semitones from the octave's starting C to the given note + int midiBase{0}; + switch (courseTuning->GetPname()) { + case PITCHNAME_c: midiBase = 0; break; + case PITCHNAME_d: midiBase = 2; break; + case PITCHNAME_e: midiBase = 4; break; + case PITCHNAME_f: midiBase = 5; break; + case PITCHNAME_g: midiBase = 7; break; + case PITCHNAME_a: midiBase = 9; break; + case PITCHNAME_b: midiBase = 11; break; + case PITCHNAME_NONE: break; + } + + const int octave{courseTuning->GetOct()}; + + // As this does not represent historical notation of any kind the only + // accidentals we should ever see are "s" and "f" + const int alter{(courseTuning->HasAccid()) + ? (courseTuning->GetAccid() == ACCIDENTAL_WRITTEN_s) + ? 1 + : (courseTuning->GetAccid() == ACCIDENTAL_WRITTEN_f) + ? -1 + : 0 + : 0}; + + return (octave + 1) * 12 + midiBase + alter + fret; // MIDI note C4 = 60 + } + + // no specified, fall back to @tuning.standard + // TODO what other values for @tuning.standard will there be? + + // E4 B3 G3 D3 A2 E2 + static const int guitarPitch[] {64, 59, 55, 50, 45, 40}; // modern guitar + + // E4 B3 G3 D3 A2 D2 + static const int guitarDropDPitch[]{64, 59, 55, 50, 45, 38}; // modern guitar drop D + + // G4 D4 A3 F3 C3 G2 + static const int lutePitch[] {67, 62, 57, 53, 48, 43}; // 6 course renaissance lute + + const int* pitch{nullptr}; + int pitchSize{0}; + + switch (GetTuningStandard()) { + case COURSETUNING_guitar_drop_D: + pitch = guitarDropDPitch; + pitchSize = sizeof(guitarDropDPitch); + break; + + case COURSETUNING_lute_renaissance_6: + pitch = lutePitch; + pitchSize = sizeof(lutePitch); + break; + + case COURSETUNING_NONE: + [[fallthrough]]; + + default: + // @tuning.standard is not specified, use @notationType + + if ( notationType == NOTATIONTYPE_tab_lute_french || + notationType == NOTATIONTYPE_tab_lute_italian || + notationType == NOTATIONTYPE_tab_lute_german + ) { + // lute tablature, assume 6 course renaissance lute + pitch = lutePitch; + pitchSize = sizeof(lutePitch); + } + else { + // assume modern guitar + pitch = guitarPitch; + pitchSize = sizeof(guitarPitch); + } + break; + } + + return (course > 0 && course <= pitchSize) + ? pitch[course - 1] + fret + : 0; +} + } // namespace vrv From dc9fb88b091d217655beb2046b87122d50a3b218 Mon Sep 17 00:00:00 2001 From: Paul Overell Date: Sat, 2 Oct 2021 18:44:10 +0100 Subject: [PATCH 003/403] Feedback from code review. --- src/course.cpp | 4 +- src/note.cpp | 10 +++-- src/tuning.cpp | 113 +++++++++++++++++++++++-------------------------- 3 files changed, 62 insertions(+), 65 deletions(-) diff --git a/src/course.cpp b/src/course.cpp index a2fa53011f0..9859c84868e 100644 --- a/src/course.cpp +++ b/src/course.cpp @@ -21,13 +21,13 @@ namespace vrv { static ClassRegistrar s_factory("course", COURSE); -Course::Course() : Object("course-") +Course::Course() : Object("course-"), AttAccidental(), AttNNumberLike(), AttOctave(), AttPitch() { RegisterAttClass(ATT_ACCIDENTAL); RegisterAttClass(ATT_NNUMBERLIKE); RegisterAttClass(ATT_OCTAVE); RegisterAttClass(ATT_PITCH); - + Reset(); } diff --git a/src/note.cpp b/src/note.cpp index 5da3d81defd..1c16dd9dc7c 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -1257,7 +1257,7 @@ int Note::GenerateMIDI(FunctorParams *functorParams) if (note->HasPnum()) { pitch = note->GetPnum(); } - else if (note->HasPname() || note->HasPnameGes()){ + else if (note->HasPname() || note->HasPnameGes()) { // calc pitch int midiBase = 0; data_PITCHNAME pname = note->GetPname(); @@ -1285,10 +1285,12 @@ int Note::GenerateMIDI(FunctorParams *functorParams) } else if (note->HasTabCourse()) { // tablature - Staff* staff = vrv_cast(note->GetFirstAncestor(STAFF)); + Staff *staff = vrv_cast(note->GetFirstAncestor(STAFF)); assert(staff); - if (staff->m_drawingTuning) - pitch = staff->m_drawingTuning->CalcPitchNumber(note->GetTabCourse(), note->GetTabFret(), staff->m_drawingNotationType); + if (staff->m_drawingTuning) { + pitch = staff->m_drawingTuning->CalcPitchNumber( + note->GetTabCourse(), note->GetTabFret(), staff->m_drawingNotationType); + } } // We do store the MIDIPitch in the note even with a sameas diff --git a/src/tuning.cpp b/src/tuning.cpp index 3a78541aa6c..1d02740834b 100644 --- a/src/tuning.cpp +++ b/src/tuning.cpp @@ -72,15 +72,15 @@ int Tuning::CalcPitchNumber(int course, int fret, data_NOTATIONTYPE notationType // Use s, if available // else use @tuning.standard, if available // else use @notationType - + // Do we have the tuning for this course? AttNNumberLikeComparison cnc(COURSE, std::to_string(course)); - Course* const courseTuning{vrv_cast(FindDescendantByComparison(&cnc))}; - + Course *courseTuning = vrv_cast(FindDescendantByComparison(&cnc)); + if (courseTuning && courseTuning->HasPname() && courseTuning->HasOct()) { // Distance in semitones from the octave's starting C to the given note - int midiBase{0}; + int midiBase = 0; switch (courseTuning->GetPname()) { case PITCHNAME_c: midiBase = 0; break; case PITCHNAME_d: midiBase = 2; break; @@ -92,72 +92,67 @@ int Tuning::CalcPitchNumber(int course, int fret, data_NOTATIONTYPE notationType case PITCHNAME_NONE: break; } - const int octave{courseTuning->GetOct()}; - + const int octave = courseTuning->GetOct(); + // As this does not represent historical notation of any kind the only // accidentals we should ever see are "s" and "f" - const int alter{(courseTuning->HasAccid()) - ? (courseTuning->GetAccid() == ACCIDENTAL_WRITTEN_s) - ? 1 - : (courseTuning->GetAccid() == ACCIDENTAL_WRITTEN_f) - ? -1 - : 0 - : 0}; - + int alter = 0; + if (courseTuning->HasAccid()) { + if (courseTuning->GetAccid() == ACCIDENTAL_WRITTEN_s) + alter = 1; + else if (courseTuning->GetAccid() == ACCIDENTAL_WRITTEN_f) + alter = -1; + } + return (octave + 1) * 12 + midiBase + alter + fret; // MIDI note C4 = 60 } // no specified, fall back to @tuning.standard // TODO what other values for @tuning.standard will there be? - - // E4 B3 G3 D3 A2 E2 - static const int guitarPitch[] {64, 59, 55, 50, 45, 40}; // modern guitar - - // E4 B3 G3 D3 A2 D2 - static const int guitarDropDPitch[]{64, 59, 55, 50, 45, 38}; // modern guitar drop D - - // G4 D4 A3 F3 C3 G2 - static const int lutePitch[] {67, 62, 57, 53, 48, 43}; // 6 course renaissance lute - - const int* pitch{nullptr}; - int pitchSize{0}; - + + // E4 B3 G3 D3 A2 E2 + static const int guitarPitch[] = { 64, 59, 55, 50, 45, 40 }; // modern guitar + + // E4 B3 G3 D3 A2 D2 + static const int guitarDropDPitch[] = { 64, 59, 55, 50, 45, 38 }; // modern guitar drop D + + // G4 D4 A3 F3 C3 G2 + static const int lutePitch[] = { 67, 62, 57, 53, 48, 43 }; // 6 course renaissance lute + + const int *pitch = nullptr; + int pitchSize = 0; + switch (GetTuningStandard()) { - case COURSETUNING_guitar_drop_D: - pitch = guitarDropDPitch; - pitchSize = sizeof(guitarDropDPitch); - break; - - case COURSETUNING_lute_renaissance_6: - pitch = lutePitch; - pitchSize = sizeof(lutePitch); - break; - - case COURSETUNING_NONE: - [[fallthrough]]; - - default: - // @tuning.standard is not specified, use @notationType - - if ( notationType == NOTATIONTYPE_tab_lute_french || - notationType == NOTATIONTYPE_tab_lute_italian || - notationType == NOTATIONTYPE_tab_lute_german - ) { - // lute tablature, assume 6 course renaissance lute + case COURSETUNING_guitar_drop_D: + pitch = guitarDropDPitch; + pitchSize = sizeof(guitarDropDPitch); + break; + + case COURSETUNING_lute_renaissance_6: pitch = lutePitch; pitchSize = sizeof(lutePitch); - } - else { - // assume modern guitar - pitch = guitarPitch; - pitchSize = sizeof(guitarPitch); - } - break; + break; + + case COURSETUNING_NONE: [[fallthrough]]; + + default: + // @tuning.standard is not specified, use @notationType + + if (notationType == NOTATIONTYPE_tab_lute_french || notationType == NOTATIONTYPE_tab_lute_italian + || notationType == NOTATIONTYPE_tab_lute_german) { + // lute tablature, assume 6 course renaissance lute + pitch = lutePitch; + pitchSize = sizeof(lutePitch); + } + else { + // assume modern guitar + pitch = guitarPitch; + pitchSize = sizeof(guitarPitch); + } + break; } - - return (course > 0 && course <= pitchSize) - ? pitch[course - 1] + fret - : 0; + + return (course > 0 && course <= pitchSize) ? pitch[course - 1] + fret : 0; } } // namespace vrv From 99aa6bde0da454cb6cb768b4e918fdbc4cc0ad37 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sat, 2 Oct 2021 14:12:36 -0400 Subject: [PATCH 004/403] Fix clang-formatting --- include/vrv/course.h | 6 +----- include/vrv/tabgrp.h | 2 +- include/vrv/tuning.h | 6 +++--- src/iomei.cpp | 2 +- src/layerelement.cpp | 3 ++- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/include/vrv/course.h b/include/vrv/course.h index 2b844524ad6..98cc355a0cc 100644 --- a/include/vrv/course.h +++ b/include/vrv/course.h @@ -20,11 +20,7 @@ namespace vrv { /** * This class models the MEI element. */ -class Course : public Object, - public AttAccidental, - public AttNNumberLike, - public AttOctave, - public AttPitch { +class Course : public Object, public AttAccidental, public AttNNumberLike, public AttOctave, public AttPitch { public: /** * @name Constructors, destructors, and other standard methods diff --git a/include/vrv/tabgrp.h b/include/vrv/tabgrp.h index 93c8e3a7fb1..f41cb6f0973 100644 --- a/include/vrv/tabgrp.h +++ b/include/vrv/tabgrp.h @@ -44,7 +44,7 @@ class TabGrp : public LayerElement, public DurationInterface { * Add an element to a element. */ virtual bool IsSupportedChild(Object *object); - + /** * See Object::CalcOnsetOffsetEnd */ diff --git a/include/vrv/tuning.h b/include/vrv/tuning.h index c715dd13d4b..052f48147f0 100644 --- a/include/vrv/tuning.h +++ b/include/vrv/tuning.h @@ -43,14 +43,14 @@ class Tuning : public Object, public AttCourseLog { * Return the line for a the tuning and a given course and a notation type */ int CalcPitchPos(int course, data_NOTATIONTYPE notationType, int lines); - + /** * Calclate the MIDI pitch number for course/fret - * + * * @param[in] course * @param[in] fret * @param[in] notationType, used to default tuning if not otherwise specified - * + * * @return MIDI pitch */ int CalcPitchNumber(int course, int fret, data_NOTATIONTYPE notationType); diff --git a/src/iomei.cpp b/src/iomei.cpp index 5968c393dc0..1d810c2bdf1 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -4185,7 +4185,7 @@ bool MEIInput::ReadCourse(Object *parent, pugi::xml_node course) vrvCourse->ReadNNumberLike(course); vrvCourse->ReadOctave(course); vrvCourse->ReadPitch(course); - + ReadUnsupportedAttr(course, vrvCourse); return true; diff --git a/src/layerelement.cpp b/src/layerelement.cpp index b555156dfa7..b1e3c38eab4 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -2338,7 +2338,8 @@ int LayerElement::CalcOnsetOffset(FunctorParams *functorParams) storeNote->SetScoreTimeOffset(params->m_currentScoreTime + incrementScoreTime); storeNote->SetRealTimeOffsetSeconds(params->m_currentRealTimeSeconds + realTimeIncrementSeconds); - // increase the currentTime accordingly, but only if not in a chord or tabGrp - checkit with note->IsChordTone() or note->IsTabGrpNote() + // increase the currentTime accordingly, but only if not in a chord or tabGrp - checkit with note->IsChordTone() + // or note->IsTabGrpNote() if (!(note->IsChordTone()) && !(note->IsTabGrpNote())) { params->m_currentScoreTime += incrementScoreTime; params->m_currentRealTimeSeconds += realTimeIncrementSeconds; From 42854421cf258841e546fdc2934bc84305109843 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sat, 2 Oct 2021 15:32:57 -0400 Subject: [PATCH 005/403] Adding comments blocks [skip-ci] --- include/vrv/course.h | 4 ++++ include/vrv/tabgrp.h | 4 ++++ include/vrv/tuning.h | 4 ++++ src/course.cpp | 4 ++++ src/tabgrp.cpp | 4 ++++ src/tuning.cpp | 4 ++++ 6 files changed, 24 insertions(+) diff --git a/include/vrv/course.h b/include/vrv/course.h index 98cc355a0cc..dd947080994 100644 --- a/include/vrv/course.h +++ b/include/vrv/course.h @@ -39,6 +39,10 @@ class Course : public Object, public AttAccidental, public AttNNumberLike, publi */ virtual bool IsSupportedChild(Object *object); + //----------// + // Functors // + //----------// + protected: // private: diff --git a/include/vrv/tabgrp.h b/include/vrv/tabgrp.h index f41cb6f0973..85cb32716bf 100644 --- a/include/vrv/tabgrp.h +++ b/include/vrv/tabgrp.h @@ -45,6 +45,10 @@ class TabGrp : public LayerElement, public DurationInterface { */ virtual bool IsSupportedChild(Object *object); + //----------// + // Functors // + //----------// + /** * See Object::CalcOnsetOffsetEnd */ diff --git a/include/vrv/tuning.h b/include/vrv/tuning.h index 052f48147f0..dce88719dee 100644 --- a/include/vrv/tuning.h +++ b/include/vrv/tuning.h @@ -55,6 +55,10 @@ class Tuning : public Object, public AttCourseLog { */ int CalcPitchNumber(int course, int fret, data_NOTATIONTYPE notationType); + //----------// + // Functors // + //----------// + protected: // private: diff --git a/src/course.cpp b/src/course.cpp index 8e4a7d2bde2..037e8c8cd46 100644 --- a/src/course.cpp +++ b/src/course.cpp @@ -48,4 +48,8 @@ bool Course::IsSupportedChild(Object *child) return false; } +//---------------------------------------------------------------------------- +// Functor methods +//---------------------------------------------------------------------------- + } // namespace vrv diff --git a/src/tabgrp.cpp b/src/tabgrp.cpp index e57b339cf63..bf0d6fdf633 100644 --- a/src/tabgrp.cpp +++ b/src/tabgrp.cpp @@ -58,6 +58,10 @@ bool TabGrp::IsSupportedChild(Object *child) return true; } +//---------------------------------------------------------------------------- +// Functor methods +//---------------------------------------------------------------------------- + int TabGrp::CalcOnsetOffsetEnd(FunctorParams *functorParams) { CalcOnsetOffsetParams *params = vrv_params_cast(functorParams); diff --git a/src/tuning.cpp b/src/tuning.cpp index f6a529e9226..aa4ebf05c6d 100644 --- a/src/tuning.cpp +++ b/src/tuning.cpp @@ -155,4 +155,8 @@ int Tuning::CalcPitchNumber(int course, int fret, data_NOTATIONTYPE notationType return (course > 0 && course <= pitchSize) ? pitch[course - 1] + fret : 0; } +//---------------------------------------------------------------------------- +// Functor methods +//---------------------------------------------------------------------------- + } // namespace vrv From 9a66730e2f92a9077bde23e7a9e75600305bec61 Mon Sep 17 00:00:00 2001 From: Paul Overell Date: Mon, 4 Oct 2021 16:59:00 +0100 Subject: [PATCH 006/403] Fix conflicts course.cpp note.cpp --- src/course.cpp | 2 +- src/note.cpp | 54 ++++++++++++-------------------------------------- 2 files changed, 14 insertions(+), 42 deletions(-) diff --git a/src/course.cpp b/src/course.cpp index 037e8c8cd46..26a1d9d02da 100644 --- a/src/course.cpp +++ b/src/course.cpp @@ -21,7 +21,7 @@ namespace vrv { static const ClassRegistrar s_factory("course", COURSE); -Course::Course() : Object("course-"), AttAccidental(), AttNNumberLike(), AttOctave(), AttPitch() +Course::Course() : Object(COURSE, "course-"), AttAccidental(), AttNNumberLike(), AttOctave(), AttPitch() { RegisterAttClass(ATT_ACCIDENTAL); RegisterAttClass(ATT_NNUMBERLIKE); diff --git a/src/note.cpp b/src/note.cpp index a05cea6803a..eb9a98bd74a 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -578,7 +578,7 @@ void Note::CalcMIDIPitch(int shift) if (this->HasPnum()) { m_MIDIPitch = this->GetPnum(); } - else { + else if (this->HasPname() || this->HasPnameGes()) { int midiBase = 0; data_PITCHNAME pname = this->GetPname(); if (this->HasPnameGes()) pname = this->GetPnameGes(); @@ -604,6 +604,18 @@ void Note::CalcMIDIPitch(int shift) m_MIDIPitch = midiBase + (oct + 1) * 12; } + else if (this->HasTabCourse()) { + // tablature + Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); + assert(staff); + if (staff->m_drawingTuning) { + m_MIDIPitch = staff->m_drawingTuning->CalcPitchNumber( + this->GetTabCourse(), this->GetTabFret(), staff->m_drawingNotationType); + } + } + else { + m_MIDIPitch = 0; + } } double Note::GetScoreTimeOnset() const @@ -1307,46 +1319,6 @@ int Note::GenerateMIDI(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - int pitch = 0; - if (note->HasPnum()) { - pitch = note->GetPnum(); - } - else if (note->HasPname() || note->HasPnameGes()) { - // calc pitch - int midiBase = 0; - data_PITCHNAME pname = note->GetPname(); - if (note->HasPnameGes()) pname = note->GetPnameGes(); - switch (pname) { - case PITCHNAME_c: midiBase = 0; break; - case PITCHNAME_d: midiBase = 2; break; - case PITCHNAME_e: midiBase = 4; break; - case PITCHNAME_f: midiBase = 5; break; - case PITCHNAME_g: midiBase = 7; break; - case PITCHNAME_a: midiBase = 9; break; - case PITCHNAME_b: midiBase = 11; break; - case PITCHNAME_NONE: break; - } - int oct = note->GetOct(); - if (note->HasOctGes()) oct = note->GetOctGes(); - - // Check for accidentals - midiBase += note->GetChromaticAlteration(); - - // Adjustment for transposition intruments - midiBase += params->m_transSemi; - - pitch = midiBase + (oct + 1) * 12; - } - else if (note->HasTabCourse()) { - // tablature - Staff *staff = vrv_cast(note->GetFirstAncestor(STAFF)); - assert(staff); - if (staff->m_drawingTuning) { - pitch = staff->m_drawingTuning->CalcPitchNumber( - note->GetTabCourse(), note->GetTabFret(), staff->m_drawingNotationType); - } - } - int channel = params->m_midiChannel; int velocity = MIDI_VELOCITY; if (this->HasVel()) velocity = this->GetVel(); From cf8cf9b001e0ccc104d81eea340421f6664b3134 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 4 Oct 2021 15:11:58 -0400 Subject: [PATCH 007/403] Adding lute.baroque.d.minor --- libmei/attconverter.cpp | 2 ++ libmei/atttypes.h | 1 + 2 files changed, 3 insertions(+) diff --git a/libmei/attconverter.cpp b/libmei/attconverter.cpp index cf63c7b13bf..425f9011e11 100644 --- a/libmei/attconverter.cpp +++ b/libmei/attconverter.cpp @@ -1089,6 +1089,7 @@ std::string AttConverter::CoursetuningToStr(data_COURSETUNING data) const case COURSETUNING_guitar_open_A: value = "guitar.open.A"; break; case COURSETUNING_lute_renaissance_6: value = "lute.renaissance.6"; break; case COURSETUNING_lute_baroque_d_major: value = "lute.baroque.d.major"; break; + case COURSETUNING_lute_baroque_d_minor: value = "lute.baroque.d.minor"; break; default: LogWarning("Unknown value '%d' for data.COURSETUNING", data); value = ""; @@ -1106,6 +1107,7 @@ data_COURSETUNING AttConverter::StrToCoursetuning(const std::string &value, bool if (value == "guitar.open.A") return COURSETUNING_guitar_open_A; if (value == "lute.renaissance.6") return COURSETUNING_lute_renaissance_6; if (value == "lute.baroque.d.major") return COURSETUNING_lute_baroque_d_major; + if (value == "lute.baroque.d.minor") return COURSETUNING_lute_baroque_d_minor; if (logWarning && !value.empty()) LogWarning("Unsupported value '%s' for data.COURSETUNING", value.c_str()); return COURSETUNING_NONE; diff --git a/libmei/atttypes.h b/libmei/atttypes.h index a7e02e90b11..cb4c8abd463 100644 --- a/libmei/atttypes.h +++ b/libmei/atttypes.h @@ -526,6 +526,7 @@ enum data_COURSETUNING { COURSETUNING_guitar_open_A, COURSETUNING_lute_renaissance_6, COURSETUNING_lute_baroque_d_major, + COURSETUNING_lute_baroque_d_minor, COURSETUNING_MAX }; From d417bb7156ba678092830684a57c7dc0d1c8fda4 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 21 Dec 2021 08:12:16 +0100 Subject: [PATCH 008/403] Store attribute --- include/vrv/scoredefinterface.h | 1 + src/durationinterface.cpp | 1 + src/iomei.cpp | 2 ++ src/scoredefinterface.cpp | 3 +++ 4 files changed, 7 insertions(+) diff --git a/include/vrv/scoredefinterface.h b/include/vrv/scoredefinterface.h index 7803dd98908..bad027bb0f1 100644 --- a/include/vrv/scoredefinterface.h +++ b/include/vrv/scoredefinterface.h @@ -28,6 +28,7 @@ namespace vrv { * It is not an abstract class but should not be instanciated directly. */ class ScoreDefInterface : public Interface, + public AttDurationDefault, public AttLyricStyle, public AttMeasureNumbers, public AttMidiTempo, diff --git a/src/durationinterface.cpp b/src/durationinterface.cpp index c9b1041600f..8fcf757b294 100644 --- a/src/durationinterface.cpp +++ b/src/durationinterface.cpp @@ -176,6 +176,7 @@ bool DurationInterface::IsLastInBeam(LayerElement *noteOrRest) int DurationInterface::GetActualDur() const { + if (!this->HasDur()) return DURATION_NONE; // maxima (-1) is a mensural only value if (this->GetDur() == DURATION_maxima) return DUR_MX; return (this->GetDur() & DUR_MENSURAL_MASK); diff --git a/src/iomei.cpp b/src/iomei.cpp index 6eda889aaa2..390997a19f7 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -2684,6 +2684,7 @@ void MEIOutput::WriteScoreDefInterface(pugi::xml_node element, ScoreDefInterface { assert(interface); + interface->WriteDurationDefault(element); interface->WriteLyricStyle(element); interface->WriteMidiTempo(element); interface->WriteMultinumMeasures(element); @@ -6472,6 +6473,7 @@ bool MEIInput::ReadPositionInterface(pugi::xml_node element, PositionInterface * bool MEIInput::ReadScoreDefInterface(pugi::xml_node element, ScoreDefInterface *interface) { + interface->ReadDurationDefault(element); interface->ReadLyricStyle(element); interface->ReadMidiTempo(element); interface->ReadMultinumMeasures(element); diff --git a/src/scoredefinterface.cpp b/src/scoredefinterface.cpp index cbcaeff255c..6dc79e4ed18 100644 --- a/src/scoredefinterface.cpp +++ b/src/scoredefinterface.cpp @@ -25,6 +25,7 @@ namespace vrv { ScoreDefInterface::ScoreDefInterface() : Interface() + , AttDurationDefault() , AttLyricStyle() , AttMeasureNumbers() , AttMidiTempo() @@ -33,6 +34,7 @@ ScoreDefInterface::ScoreDefInterface() , AttSpacing() , AttSystems() { + RegisterInterfaceAttClass(ATT_DURATIONDEFAULT); RegisterInterfaceAttClass(ATT_LYRICSTYLE); RegisterInterfaceAttClass(ATT_MEASURENUMBERS); RegisterInterfaceAttClass(ATT_METERSIGDEFAULTLOG); @@ -50,6 +52,7 @@ ScoreDefInterface::~ScoreDefInterface() {} void ScoreDefInterface::Reset() { + ResetDurationDefault(); ResetLyricStyle(); ResetMeasureNumbers(); ResetMidiTempo(); From 2f4dccbfee45e4b0d61b7864e2defd2fc7520c63 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 22 Dec 2021 12:00:46 +0100 Subject: [PATCH 009/403] Start 3.9.0 --- CHANGELOG.md | 2 ++ Verovio.podspec | 2 +- bindings/java/pom.xml | 2 +- bindings/python/.pypi-version | 2 +- codemeta.json | 4 ++-- emscripten/npm/package.json | 2 +- include/vrv/vrvdef.h | 2 +- 7 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d44ee6626f7..6568331de8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog ## [unreleased] + +## [3.8.0] - 2021-12-22 * Support for figured-bass extenders on `f` without `@tstamp` or `@startid` * Improved page-based MEI output with validation with a customized MEI Schema * Improved layout with beams and control events (ornaments, fingering, etc.) (@eNote-GmBH) diff --git a/Verovio.podspec b/Verovio.podspec index b48756c9589..d01fc92b6e8 100644 --- a/Verovio.podspec +++ b/Verovio.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'Verovio' - s.version = '3.8.0-dev' + s.version = '3.9.0-dev' s.license = { :type => 'LGPL' } s.homepage = 'https://www.verovio.org/index.xhtml' s.authors = { 'Contributors List' => 'https://github.com/rism-digital/verovio/graphs/contributors' } diff --git a/bindings/java/pom.xml b/bindings/java/pom.xml index 6beede06abb..50722b56275 100644 --- a/bindings/java/pom.xml +++ b/bindings/java/pom.xml @@ -4,7 +4,7 @@ org.rism.verovio VerovioToolkit - 3.8.0-dev + 3.9.0-dev jar VerovioToolkit diff --git a/bindings/python/.pypi-version b/bindings/python/.pypi-version index 39f5337d849..c92119a1aeb 100644 --- a/bindings/python/.pypi-version +++ b/bindings/python/.pypi-version @@ -1,3 +1,3 @@ # dummy file used by setup.py for counting revisions when publishing to test.pypi # counting can be reset by making a change to this file -3.8.0 +3.9.0 diff --git a/codemeta.json b/codemeta.json index a42291a209c..932b21f48e1 100644 --- a/codemeta.json +++ b/codemeta.json @@ -4,8 +4,8 @@ "identifier": "Verovio", "name": "Verovio", "description": "Verovio is a fast, portable and lightweight open-source library for engraving Music Encoding Initiative (MEI) music scores into SVG.", - "softwareVersion": "3.8.0-dev", - "datePublished": "2021-11-22", + "softwareVersion": "3.9.0-dev", + "datePublished": "2021-12-22", "license": "https://www.gnu.org/licenses/lgpl-3.0", "programmingLanguage": [{ "@type": "ComputerLanguage", diff --git a/emscripten/npm/package.json b/emscripten/npm/package.json index 8332c206fa6..c95f25acb33 100644 --- a/emscripten/npm/package.json +++ b/emscripten/npm/package.json @@ -1,6 +1,6 @@ { "name": "verovio", - "version": "3.6.0", + "version": "3.9.0", "description": "This is the stable version of the verovio package", "main": "index.js", "keywords": [ diff --git a/include/vrv/vrvdef.h b/include/vrv/vrvdef.h index 5980fa35555..3aa640f3942 100644 --- a/include/vrv/vrvdef.h +++ b/include/vrv/vrvdef.h @@ -36,7 +36,7 @@ namespace vrv { //---------------------------------------------------------------------------- #define VERSION_MAJOR 3 -#define VERSION_MINOR 8 +#define VERSION_MINOR 9 #define VERSION_REVISION 0 // Adds "-dev" in the version number - should be set to false for releases #define VERSION_DEV true From 14e6db0571ea94f2bf04937442b717c7eb8bd7ac Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 22 Dec 2021 12:08:14 +0100 Subject: [PATCH 010/403] remove changelog duplicate [skip-ci] --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6568331de8f..9ded37a5e26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,6 @@ * Improved layout with beams and control events (ornaments, fingering, etc.) (@eNote-GmBH) * Improve enharmonic tie overlap with accidentals (@eNote-GmBH) * Improved Plaine and Easie validation output with error codes and values -* Improved adjacent note tie and enharmonic tie overlap (eNote-GmBH) * Additional parameters to the getMEI method for exporting selected content (@eNote-GmBH) * Option --multi-rest-thickness to control the thickness of measure rests (@eNote-GmBH) From b06edc559c6476889e0dec38a793f97d39073823 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Wed, 10 Nov 2021 10:55:40 +0100 Subject: [PATCH 011/403] use short int --- include/vrv/iomusxml.h | 26 ++++++------ src/iomusxml.cpp | 90 +++++++++++++++++++++--------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/include/vrv/iomusxml.h b/include/vrv/iomusxml.h index e4c91917145..9504b6f79e7 100644 --- a/include/vrv/iomusxml.h +++ b/include/vrv/iomusxml.h @@ -64,26 +64,26 @@ namespace musicxml { class OpenSlur { public: - OpenSlur(const std::string &measureNum, const int &number) + OpenSlur(const std::string &measureNum, const short int &number) { m_measureNum = measureNum; m_number = number; } std::string m_measureNum; - int m_number; + short int m_number; }; class CloseSlur { public: - CloseSlur(const std::string &measureNum, const int &number) + CloseSlur(const std::string &measureNum, const short int &number) { m_measureNum = measureNum; m_number = number; } std::string m_measureNum; - int m_number; + short int m_number; }; class OpenSpanner { @@ -191,16 +191,16 @@ class MusicXmlInput : public Input { * @name Top level methods for reading MusicXML part and measure elements. */ ///@{ - bool ReadMusicXmlPart(pugi::xml_node node, Section *section, int nbStaves, int staffOffset); + bool ReadMusicXmlPart(pugi::xml_node node, Section *section, short int nbStaves, const short int staffOffset); bool ReadMusicXmlMeasure( - pugi::xml_node node, Section *section, Measure *measure, int nbStaves, int staffOffset, int index); + pugi::xml_node node, Section *section, Measure *measure, short int nbStaves, const short int staffOffset, int index); ///@} /* * Methods for reading the first MusicXML attributes element as MEI staffDef. * Returns the number of staves in the part. */ - int ReadMusicXmlPartAttributesAsStaffDef(pugi::xml_node node, StaffGrp *staffGrp, int staffOffset); + int ReadMusicXmlPartAttributesAsStaffDef(pugi::xml_node node, StaffGrp *staffGrp, const short int staffOffset); /* * @name Methods for reading the content of a MusicXML measure. @@ -209,12 +209,12 @@ class MusicXmlInput : public Input { void ReadMusicXmlAttributes(pugi::xml_node, Section *section, Measure *measure, const std::string &measureNum); void ReadMusicXmlBackup(pugi::xml_node, Measure *measure, const std::string &measureNum); void ReadMusicXmlBarLine(pugi::xml_node, Measure *measure, const std::string &measureNum); - void ReadMusicXmlDirection(pugi::xml_node, Measure *measure, const std::string &measureNum, const int staffOffset); + void ReadMusicXmlDirection(pugi::xml_node, Measure *measure, const std::string &measureNum, const short int staffOffset); void ReadMusicXmlFigures(pugi::xml_node, Measure *measure, const std::string &measureNum); void ReadMusicXmlForward(pugi::xml_node, Measure *measure, const std::string &measureNum); void ReadMusicXmlHarmony(pugi::xml_node, Measure *measure, const std::string &measureNum); void ReadMusicXmlNote( - pugi::xml_node, Measure *measure, const std::string &measureNum, const int staffOffset, Section *section); + pugi::xml_node, Measure *measure, const std::string &measureNum, const short int staffOffset, Section *section); void ReadMusicXmlPrint(pugi::xml_node, Section *section); void ReadMusicXmlBeamsAndTuplets(const pugi::xml_node &node, Layer *layer, bool isChord); void ReadMusicXmlTupletStart(const pugi::xml_node &node, const pugi::xml_node &tupletStart, Layer *layer); @@ -267,13 +267,13 @@ class MusicXmlInput : public Input { /* * Returns the appropriate first layer of a staff. */ - Layer *SelectLayer(int staffNb, Measure *measure); + Layer *SelectLayer(short int staffNb, Measure *measure); /* * Returns the layer with @n=layerNb on the staff. * Creates the layer if not found. */ - Layer *SelectLayer(int layerNb, Staff *staff); + Layer *SelectLayer(short int layerNb, Staff *staff); /* * @name Methods for converting the content of MusicXML attributes. @@ -323,8 +323,8 @@ class MusicXmlInput : public Input { ///@{ void OpenTie(Note *note, Tie *tie); void CloseTie(Note *note); - void OpenSlur(Measure *measure, int number, Slur *slur); - void CloseSlur(Measure *measure, int number, LayerElement *element); + void OpenSlur(Measure *measure, short int number, Slur *slur); + void CloseSlur(Measure *measure, short int number, LayerElement *element); ///@} /* diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index 5c412915235..bdc5e437274 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -401,7 +401,7 @@ Layer *MusicXmlInput::SelectLayer(pugi::xml_node node, Measure *measure) if (m_isLayerInitialized) return m_currentLayer; // Find voice number of node - int layerNum = (node.child("voice")) ? node.child("voice").text().as_int() : 1; + short int layerNum = (node.child("voice")) ? node.child("voice").text().as_int() : 1; if (layerNum < 1) { LogWarning("MusicXML import: Layer %d cannot be found", layerNum); layerNum = 1; @@ -417,7 +417,7 @@ Layer *MusicXmlInput::SelectLayer(pugi::xml_node node, Measure *measure) } // if not, take staff info of node element - int staffNum = (node.child("staff")) ? node.child("staff").text().as_int() : 1; + short int staffNum = (node.child("staff")) ? node.child("staff").text().as_int() : 1; if ((staffNum < 1) || (staffNum > measure->GetChildCount(STAFF))) { LogWarning("MusicXML import: Staff %d cannot be found", staffNum); staffNum = 1; @@ -430,7 +430,7 @@ Layer *MusicXmlInput::SelectLayer(pugi::xml_node node, Measure *measure) return m_currentLayer; } -Layer *MusicXmlInput::SelectLayer(int staffNum, Measure *measure) +Layer *MusicXmlInput::SelectLayer(short int staffNum, Measure *measure) { staffNum--; Staff *staff = vrv_cast(measure->GetChild(staffNum, STAFF)); @@ -439,7 +439,7 @@ Layer *MusicXmlInput::SelectLayer(int staffNum, Measure *measure) return SelectLayer(-1, staff); } -Layer *MusicXmlInput::SelectLayer(int layerNum, Staff *staff) +Layer *MusicXmlInput::SelectLayer(short int layerNum, Staff *staff) { Layer *layer = NULL; // no layer specified, return the first one (if any) @@ -526,7 +526,7 @@ void MusicXmlInput::CloseTie(Note *note) } } -void MusicXmlInput::OpenSlur(Measure *measure, int number, Slur *slur) +void MusicXmlInput::OpenSlur(Measure *measure, short int number, Slur *slur) { // try to match open slur with slur stops within that measure for (auto iter = m_slurStopStack.begin(); iter != m_slurStopStack.end(); ++iter) { @@ -541,7 +541,7 @@ void MusicXmlInput::OpenSlur(Measure *measure, int number, Slur *slur) m_slurStack.push_back({ slur, openSlur }); } -void MusicXmlInput::CloseSlur(Measure *measure, int number, LayerElement *element) +void MusicXmlInput::CloseSlur(Measure *measure, short int number, LayerElement *element) { // try to match slur stop to open slurs by slur number std::vector>::reverse_iterator riter; @@ -691,9 +691,9 @@ void MusicXmlInput::PrintMetronome(pugi::xml_node metronome, Tempo *tempo) // find separator or use end() if there is no separator const auto separator = std::find_if(iter, metronomeElements.end(), [](const auto pair) { return pair.first == MetronomeElements::SEPARATOR; }); - const int dotCount = (int)std::count_if( + const short int dotCount = (int)std::count_if( iter, separator, [](const auto pair) { return pair.first == MetronomeElements::BEAT_UNIT_DOT; }); - for (int i = 0; i < dotCount; i++) { + for (short int i = 0; i < dotCount; i++) { verovioText += L"\xE1E7"; // SMUFL augmentation dot } // set @mmUnit and @mmDots attributes only based on the first beat-unit in the sequence @@ -833,7 +833,7 @@ bool MusicXmlInput::ReadMusicXml(pugi::xml_node root) m_doc->GetCurrentScoreDef()->AddChild(staffGrp); m_staffGrpStack.push_back(staffGrp); - int staffOffset = 0; + short int staffOffset = 0; m_octDis.push_back(0); pugi::xpath_node scoreMidiBpm = root.select_node("/score-partwise/part[1]/measure[1]/sound[@tempo][1]"); @@ -988,7 +988,7 @@ bool MusicXmlInput::ReadMusicXml(pugi::xml_node root) // create the staffDef(s) StaffGrp *partStaffGrp = new StaffGrp(); partStaffGrp->SetUuid(partId.c_str()); - const int nbStaves + const short int nbStaves = ReadMusicXmlPartAttributesAsStaffDef(partFirstMeasure.node(), partStaffGrp, staffOffset); // if we have more than one staff in the part we create a new staffGrp if (nbStaves > 1) { @@ -1201,13 +1201,13 @@ void MusicXmlInput::ReadMusicXmlTitle(pugi::xml_node root) app.append_attribute("version").set_value(GetVersion().c_str()); } -int MusicXmlInput::ReadMusicXmlPartAttributesAsStaffDef(pugi::xml_node node, StaffGrp *staffGrp, int staffOffset) +int MusicXmlInput::ReadMusicXmlPartAttributesAsStaffDef(pugi::xml_node node, StaffGrp *staffGrp, short int staffOffset) { assert(node); assert(staffGrp); // First get the number of staves in the part - int nbStaves = 1; + short int nbStaves = 1; pugi::xpath_node staves = node.select_node("attributes[1]/staves"); if (staves) { nbStaves = staves.node().text().as_int(); @@ -1291,7 +1291,7 @@ int MusicXmlInput::ReadMusicXmlPartAttributesAsStaffDef(pugi::xml_node node, Sta if (!staffDetails) { staffDetails = it->select_node("staff-details"); } - int staffLines = staffDetails.node().select_node("staff-lines").node().text().as_int(); + short int staffLines = staffDetails.node().select_node("staff-lines").node().text().as_int(); if (staffLines) { staffDef->SetLines(staffLines); } @@ -1404,7 +1404,7 @@ void MusicXmlInput::ReadMusicXMLMeterSig(const pugi::xml_node &time, Object *par } } -bool MusicXmlInput::ReadMusicXmlPart(pugi::xml_node node, Section *section, int nbStaves, int staffOffset) +bool MusicXmlInput::ReadMusicXmlPart(pugi::xml_node node, Section *section, short int nbStaves, short int staffOffset) { assert(node); assert(section); @@ -1471,7 +1471,7 @@ bool MusicXmlInput::ReadMusicXmlPart(pugi::xml_node node, Section *section, int } bool MusicXmlInput::ReadMusicXmlMeasure( - pugi::xml_node node, Section *section, Measure *measure, int nbStaves, int staffOffset, int index) + pugi::xml_node node, Section *section, Measure *measure, short int nbStaves, short int staffOffset, int index) { assert(node); assert(measure); @@ -1636,7 +1636,7 @@ void MusicXmlInput::ReadMusicXmlAttributes( pugi::xml_node clef = node.child("clef"); if (clef) { // check if we have a staff number - int staffNum = clef.attribute("number").as_int(); + short int staffNum = clef.attribute("number").as_int(); staffNum = (staffNum < 1) ? 1 : staffNum; Staff *staff = dynamic_cast(measure->GetChild(staffNum - 1, STAFF)); assert(staff); @@ -1772,7 +1772,7 @@ void MusicXmlInput::ReadMusicXmlBarLine(pugi::xml_node node, Measure *measure, c } // fermatas - int fermataCounter = 0; + short int fermataCounter = 0; for (pugi::xml_node xmlFermata : node.children("fermata")) { ++fermataCounter; Fermata *fermata = new Fermata(); @@ -1802,7 +1802,7 @@ void MusicXmlInput::ReadMusicXmlBarLine(pugi::xml_node node, Measure *measure, c } void MusicXmlInput::ReadMusicXmlDirection( - pugi::xml_node node, Measure *measure, const std::string &measureNum, const int staffOffset) + pugi::xml_node node, Measure *measure, const std::string &measureNum, const short int staffOffset) { assert(node); assert(measure); @@ -1812,7 +1812,7 @@ void MusicXmlInput::ReadMusicXmlDirection( const pugi::xml_node typeNode = node.child("direction-type"); const pugi::xpath_node voice = node.select_node("voice"); - const int offset = node.child("offset").text().as_int(); + const short int offset = node.child("offset").text().as_int(); const pugi::xml_node staffNode = node.child("staff"); const pugi::xml_node soundNode = node.child("sound"); @@ -1823,7 +1823,7 @@ void MusicXmlInput::ReadMusicXmlDirection( // Bracket pugi::xml_node bracket = typeNode.child("bracket"); if (bracket) { - int voiceNumber = bracket.attribute("number").as_int(); + short int voiceNumber = bracket.attribute("number").as_int(); voiceNumber = (voiceNumber < 1) ? 1 : voiceNumber; if (HasAttributeWithValue(bracket, "type", "stop")) { if (m_bracketStack.empty()) { @@ -1879,9 +1879,9 @@ void MusicXmlInput::ReadMusicXmlDirection( // Dashes (to be connected with previous or as @extender and @tstamp2 attribute pugi::xpath_node dashes = typeNode.select_node("bracket|dashes"); if (dashes) { - int dashesNumber = dashes.node().attribute("number").as_int(); + short int dashesNumber = dashes.node().attribute("number").as_int(); dashesNumber = (dashesNumber < 1) ? 1 : dashesNumber; - int staffNum = 1; + short int staffNum = 1; if (staffNode) staffNum = staffNode.text().as_int() + staffOffset; if (HasAttributeWithValue(dashes.node(), "type", "stop")) { std::vector>::iterator iter = m_openDashesStack.begin(); @@ -1986,9 +1986,9 @@ void MusicXmlInput::ReadMusicXmlDirection( pugi::xpath_node extender = (words.end() - 1)->parent().next_sibling("direction-type").first_child(); if (!strcmp(extender.node().name(), "bracket") || !strcmp(extender.node().name(), "dashes")) { - int extNumber = extender.node().attribute("number").as_int(); + short int extNumber = extender.node().attribute("number").as_int(); extNumber = (extNumber < 1) ? 1 : extNumber; - int staffNum = staffNode.text().as_int() + staffOffset; + short int staffNum = staffNode.text().as_int() + staffOffset; staffNum = (staffNum < 1) ? 1 : staffNum; dir->SetExtender(BOOLEAN_true); if (std::strncmp(extender.node().name(), "bracket", 7) == 0) { @@ -2044,9 +2044,9 @@ void MusicXmlInput::ReadMusicXmlDirection( if (!dynamics.empty()) { pugi::xpath_node extender = (dynamics.end() - 1)->parent().next_sibling("direction-type").first_child(); if (!strcmp(extender.node().name(), "bracket") || !strcmp(extender.node().name(), "dashes")) { - int extNumber = extender.node().attribute("number").as_int(); + short int extNumber = extender.node().attribute("number").as_int(); extNumber = (extNumber < 1) ? 1 : extNumber; - int staffNum = staffNode.text().as_int() + staffOffset; + short int staffNum = staffNode.text().as_int() + staffOffset; staffNum = (staffNum < 1) ? 1 : staffNum; dynam->SetExtender(BOOLEAN_true); if (std::strncmp(extender.node().name(), "bracket", 7) == 0) { @@ -2065,7 +2065,7 @@ void MusicXmlInput::ReadMusicXmlDirection( // Hairpins pugi::xpath_node_set wedges = node.select_nodes("direction-type/wedge"); for (pugi::xpath_node_set::const_iterator wedge = wedges.begin(); wedge != wedges.end(); ++wedge) { - int hairpinNumber = wedge->node().attribute("number").as_int(); + short int hairpinNumber = wedge->node().attribute("number").as_int(); hairpinNumber = (hairpinNumber < 1) ? 1 : hairpinNumber; if (HasAttributeWithValue(wedge->node(), "type", "stop")) { // match wedge type=stop to open hairpin @@ -2144,7 +2144,7 @@ void MusicXmlInput::ReadMusicXmlDirection( // Ottava pugi::xml_node xmlShift = typeNode.child("octave-shift"); if (xmlShift) { - const int staffNum = (!staffNode) ? 1 : staffNode.text().as_int() + staffOffset; + const short int staffNum = (!staffNode) ? 1 : staffNode.text().as_int() + staffOffset; if (HasAttributeWithValue(xmlShift, "type", "stop")) { m_octDis[staffNum] = 0; for (auto iter = m_controlElements.begin(); iter != m_controlElements.end(); ++iter) { @@ -2169,7 +2169,7 @@ void MusicXmlInput::ReadMusicXmlDirection( octave->SetColor(xmlShift.attribute("color").as_string()); octave->SetDisPlace(octave->AttOctaveDisplacement::StrToStaffrelBasic(placeStr.c_str())); octave->SetN(xmlShift.attribute("number").as_string()); - const int octDisNum = xmlShift.attribute("size") ? xmlShift.attribute("size").as_int() : 8; + const short int octDisNum = xmlShift.attribute("size") ? xmlShift.attribute("size").as_int() : 8; octave->SetDis(octave->AttOctaveDisplacement::StrToOctaveDis(std::to_string(octDisNum))); m_octDis[staffNum] = (octDisNum + 2) / 8; if (HasAttributeWithValue(xmlShift, "type", "up")) { @@ -2231,7 +2231,7 @@ void MusicXmlInput::ReadMusicXmlDirection( // Principal voice pugi::xml_node lead = typeNode.child("principal-voice"); if (lead) { - int voiceNumber = lead.attribute("number").as_int(); + short int voiceNumber = lead.attribute("number").as_int(); voiceNumber = (voiceNumber < 1) ? 1 : voiceNumber; if (HasAttributeWithValue(lead, "type", "stop")) { const int measureDifference @@ -2265,7 +2265,7 @@ void MusicXmlInput::ReadMusicXmlDirection( const std::string lang = rehearsal.attribute("xml:lang") ? rehearsal.attribute("xml:lang").as_string() : "it"; const std::string textStr = GetContent(rehearsal); reh->SetColor(rehearsal.attribute("color").as_string()); - int staffNum = staffNode.text().as_int() + staffOffset; + short int staffNum = staffNode.text().as_int() + staffOffset; staffNum = (staffNum < 1) ? 1 : staffNum; reh->SetStaff(reh->AttStaffIdent::StrToXsdPositiveIntegerList(std::to_string(staffNum))); reh->SetLang(lang); @@ -2427,7 +2427,7 @@ void MusicXmlInput::ReadMusicXmlHarmony(pugi::xml_node node, Measure *measure, c } void MusicXmlInput::ReadMusicXmlNote( - pugi::xml_node node, Measure *measure, const std::string &measureNum, const int staffOffset, Section *section) + pugi::xml_node node, Measure *measure, const std::string &measureNum, const short int staffOffset, Section *section) { assert(node); assert(measure); @@ -2474,15 +2474,15 @@ void MusicXmlInput::ReadMusicXmlNote( bool beamStart = node.select_node("beam[@number='1'][text()='begin']"); // tremolos pugi::xpath_node tremolo = notations.node().select_node("ornaments/tremolo"); - int tremSlashNum = -1; + short int tremSlashNum = -1; if (tremolo) { if (HasAttributeWithValue(tremolo.node(), "type", "start")) { if (!isChord) { FTrem *fTrem = new FTrem(); AddLayerElement(layer, fTrem); m_elementStackMap.at(layer).push_back(fTrem); - int beamFloatNum = tremolo.node().text().as_int(); // number of floating beams - int beamAttachedNum = 0; // number of attached beams + short int beamFloatNum = tremolo.node().text().as_int(); // number of floating beams + short int beamAttachedNum = 0; // number of attached beams while (beamStart && beamAttachedNum < 8) { // count number of (attached) beams, max 8 std::ostringstream o; o << "beam[@number='" << ++beamAttachedNum + 1 << "'][text()='begin']"; @@ -2770,7 +2770,7 @@ void MusicXmlInput::ReadMusicXmlNote( // verse / syl for (pugi::xml_node lyric : node.children("lyric")) { - int lyricNumber = lyric.attribute("number").as_int(); + short int lyricNumber = lyric.attribute("number").as_int(); lyricNumber = (lyricNumber < 1) ? 1 : lyricNumber; Verse *verse = new Verse(); verse->SetColor(lyric.attribute("color").as_string()); @@ -2782,7 +2782,7 @@ void MusicXmlInput::ReadMusicXmlNote( // const std::string textColor = textNode.attribute("color").as_string(); const std::string textStyle = textNode.attribute("font-style").as_string(); const std::string textWeight = textNode.attribute("font-weight").as_string(); - int lineThrough = textNode.attribute("line-through").as_int(); + short int lineThrough = textNode.attribute("line-through").as_int(); const std::string lang = textNode.attribute("xml:lang").as_string(); std::string textStr = textNode.text().as_string(); @@ -2877,7 +2877,7 @@ void MusicXmlInput::ReadMusicXmlNote( pugi::xpath_node_set slurs = node.select_nodes("notations/slur"); for (pugi::xpath_node_set::const_iterator it = slurs.begin(); it != slurs.end(); ++it) { pugi::xml_node slur = it->node(); - int slurNumber = slur.attribute("number").as_int(); + short int slurNumber = slur.attribute("number").as_int(); slurNumber = (slurNumber < 1) ? 1 : slurNumber; if (HasAttributeWithValue(slur, "type", "stop")) { CloseSlur(measure, slurNumber, note); @@ -3071,7 +3071,7 @@ void MusicXmlInput::ReadMusicXmlNote( m_glissStack.push_back(gliss); } else if (!m_glissStack.empty()) { - int extNumber = xmlGlissando.attribute("number").as_int(); + short int extNumber = xmlGlissando.attribute("number").as_int(); std::vector::iterator iter = m_glissStack.begin(); while (iter != m_glissStack.end()) { if ((atoi(((*iter)->GetN()).c_str()) == extNumber) && ((*iter)->GetType() == xmlGlissando.name())) { @@ -3184,7 +3184,7 @@ void MusicXmlInput::ReadMusicXmlNote( } } if (!m_trillStack.empty() && notations.node().select_node("ornaments/wavy-line[@type='stop']")) { - int extNumber + short int extNumber = notations.node().select_node("ornaments/wavy-line[@type='stop']").node().attribute("number").as_int(); std::vector>::iterator iter = m_trillStack.begin(); while (iter != m_trillStack.end()) { @@ -3244,7 +3244,7 @@ void MusicXmlInput::ReadMusicXmlNote( // arpeggio pugi::xpath_node xmlArpeggiate = notations.node().select_node("*[contains(name(), 'arpeggiate')]"); if (xmlArpeggiate) { - int arpegN = xmlArpeggiate.node().attribute("number").as_int(); + short int arpegN = xmlArpeggiate.node().attribute("number").as_int(); arpegN = (arpegN < 1) ? 1 : arpegN; const std::string direction = xmlArpeggiate.node().attribute("direction").as_string(); bool added = false; @@ -3460,8 +3460,8 @@ void MusicXmlInput::ReadMusicXmlTupletStart(const pugi::xml_node &node, const pu Tuplet *tuplet = new Tuplet(); AddLayerElement(layer, tuplet); m_elementStackMap.at(layer).push_back(tuplet); - int num = node.select_node("time-modification/actual-notes").node().text().as_int(); - int numbase = node.select_node("time-modification/normal-notes").node().text().as_int(); + short int num = node.select_node("time-modification/actual-notes").node().text().as_int(); + short int numbase = node.select_node("time-modification/normal-notes").node().text().as_int(); if (tupletStart.first_child()) { num = tupletStart.select_node("tuplet-actual/tuplet-number").node().text().as_int(); numbase = tupletStart.select_node("tuplet-normal/tuplet-number").node().text().as_int(); @@ -3573,7 +3573,7 @@ Clef *MusicXmlInput::ConvertClef(const pugi::xml_node &clef) // clef octave change pugi::xml_node clefOctaveChange = clef.child("clef-octave-change"); if (clefOctaveChange) { - int change = clefOctaveChange.text().as_int(); + short int change = clefOctaveChange.text().as_int(); switch (abs(change)) { case 1: meiClef->SetDis(OCTAVE_DIS_8); break; case 2: meiClef->SetDis(OCTAVE_DIS_15); break; @@ -3601,7 +3601,7 @@ KeySig *MusicXmlInput::ConvertKey(const pugi::xml_node &key) keySig->SetUuid(key.attribute("id").as_string()); } if (key.child("fifths")) { - int fifths = key.child("fifths").text().as_int(); + short int fifths = key.child("fifths").text().as_int(); std::string keySigStr; if (fifths < 0) keySigStr = StringFormat("%df", abs(fifths)); From a02aa6cdb638b4f1f3259d93e05a11dc8939d163 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Mon, 22 Nov 2021 22:25:52 +0100 Subject: [PATCH 012/403] fix formatting --- include/vrv/iomusxml.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/include/vrv/iomusxml.h b/include/vrv/iomusxml.h index 9504b6f79e7..987d48a515f 100644 --- a/include/vrv/iomusxml.h +++ b/include/vrv/iomusxml.h @@ -192,8 +192,8 @@ class MusicXmlInput : public Input { */ ///@{ bool ReadMusicXmlPart(pugi::xml_node node, Section *section, short int nbStaves, const short int staffOffset); - bool ReadMusicXmlMeasure( - pugi::xml_node node, Section *section, Measure *measure, short int nbStaves, const short int staffOffset, int index); + bool ReadMusicXmlMeasure(pugi::xml_node node, Section *section, Measure *measure, short int nbStaves, + const short int staffOffset, int index); ///@} /* @@ -209,7 +209,8 @@ class MusicXmlInput : public Input { void ReadMusicXmlAttributes(pugi::xml_node, Section *section, Measure *measure, const std::string &measureNum); void ReadMusicXmlBackup(pugi::xml_node, Measure *measure, const std::string &measureNum); void ReadMusicXmlBarLine(pugi::xml_node, Measure *measure, const std::string &measureNum); - void ReadMusicXmlDirection(pugi::xml_node, Measure *measure, const std::string &measureNum, const short int staffOffset); + void ReadMusicXmlDirection( + pugi::xml_node, Measure *measure, const std::string &measureNum, const short int staffOffset); void ReadMusicXmlFigures(pugi::xml_node, Measure *measure, const std::string &measureNum); void ReadMusicXmlForward(pugi::xml_node, Measure *measure, const std::string &measureNum); void ReadMusicXmlHarmony(pugi::xml_node, Measure *measure, const std::string &measureNum); From dae9a3525b26083c682d668f08981aa7d5f8a4e6 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Mon, 20 Dec 2021 11:20:06 +0100 Subject: [PATCH 013/403] add support for print-object on metronome --- src/iomusxml.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index bdc5e437274..cbc46645a9a 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -2303,7 +2303,6 @@ void MusicXmlInput::ReadMusicXmlDirection( } // Tempo - pugi::xpath_node metronome = node.select_node("direction-type/metronome"); if (containsTempo) { Tempo *tempo = new Tempo(); if (!words.empty()) { @@ -2314,6 +2313,7 @@ void MusicXmlInput::ReadMusicXmlDirection( } tempo->SetPlace(tempo->AttPlacementRelStaff::StrToStaffrel(placeStr.c_str())); if (words.size() != 0) TextRendition(words, tempo); + pugi::xpath_node metronome = node.select_node("direction-type/metronome[not(@print-object='no')]"); if (metronome) PrintMetronome(metronome.node(), tempo); if (soundNode.attribute("tempo")) { tempo->SetMidiBpm(soundNode.attribute("tempo").as_double()); @@ -2328,8 +2328,7 @@ void MusicXmlInput::ReadMusicXmlDirection( } // other cases - if (!containsWords && !containsDynamics && !xmlCoda && !bracket && !lead && !metronome && !xmlSegno && !xmlShift - && !xmlPedal && wedges.empty() && !dashes && !rehearsal) { + if (!containsDynamics && !containsTempo && !containsWords && !xmlCoda && !bracket && !lead && !xmlSegno && !xmlShift && !xmlPedal && wedges.empty() && !dashes && !rehearsal) { LogWarning("MusicXML import: Unsupported direction-type '%s'", typeNode.first_child().name()); } } From 421ddfdd206b8a4c603247dca5a1461711715a60 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Mon, 20 Dec 2021 11:25:24 +0100 Subject: [PATCH 014/403] formatting --- src/iomusxml.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index cbc46645a9a..36719ff4210 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -2328,7 +2328,8 @@ void MusicXmlInput::ReadMusicXmlDirection( } // other cases - if (!containsDynamics && !containsTempo && !containsWords && !xmlCoda && !bracket && !lead && !xmlSegno && !xmlShift && !xmlPedal && wedges.empty() && !dashes && !rehearsal) { + if (!containsDynamics && !containsTempo && !containsWords && !xmlCoda && !bracket && !lead && !xmlSegno && !xmlShift + && !xmlPedal && wedges.empty() && !dashes && !rehearsal) { LogWarning("MusicXML import: Unsupported direction-type '%s'", typeNode.first_child().name()); } } From 7ed8124f229bd64b9cadcca3a7c694264ebb5990 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 3 Jan 2022 10:57:26 +0100 Subject: [PATCH 015/403] Fix bug with key signature in PAE importer --- src/iopae.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iopae.cpp b/src/iopae.cpp index 02b8437eb5c..950e26dd3df 100644 --- a/src/iopae.cpp +++ b/src/iopae.cpp @@ -4295,7 +4295,7 @@ bool PAEInput::ParseKeySig(KeySig *keySig, const std::string &paeStr, pae::Token } // Just in case - altNumber = std::min(6, altNumber); + altNumber = std::min(7, altNumber); if (alterationType != ACCIDENTAL_WRITTEN_NONE) { if (hasEnclosed == true) { From 52733041d850e9ae683e388545b6f58c5f2b463b Mon Sep 17 00:00:00 2001 From: David Bauer Date: Mon, 3 Jan 2022 14:00:53 +0100 Subject: [PATCH 016/403] Store durDefault in interface --- include/vrv/durationinterface.h | 20 ++++++++++++++++++-- src/durationinterface.cpp | 19 +++++++++++++------ 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/include/vrv/durationinterface.h b/include/vrv/durationinterface.h index d389760989f..c99bf1eb68d 100644 --- a/include/vrv/durationinterface.h +++ b/include/vrv/durationinterface.h @@ -45,7 +45,15 @@ class DurationInterface : public Interface, virtual ~DurationInterface(); void Reset() override; InterfaceId IsInterface() const override { return INTERFACE_DURATION; } - ///@}SetDurationGes + ///@} + + /** + * @name Set and get the default duration + */ + ///@{ + void SetDurDefault(data_DURATION dur) { m_durDefault = dur; } + data_DURATION GetDurDefault() const { return m_durDefault; } + ///@} /** * Returns the duration (in double) for the element. @@ -101,10 +109,18 @@ class DurationInterface : public Interface, bool HasIdenticalDurationInterface(DurationInterface *otherDurationInterface); private: - // + /** + * Calculate the actual duration => translate mensural values + */ + int CalcActualDur(data_DURATION dur) const; + public: // private: + /** + * The default duration: extracted from scoreDef/staffDef and used when no duration attribute is given + */ + data_DURATION m_durDefault; }; } // namespace vrv diff --git a/src/durationinterface.cpp b/src/durationinterface.cpp index 8fcf757b294..4636e47b850 100644 --- a/src/durationinterface.cpp +++ b/src/durationinterface.cpp @@ -62,6 +62,8 @@ void DurationInterface::Reset() ResetDurationRatio(); ResetFermataPresent(); ResetStaffIdent(); + + m_durDefault = DURATION_NONE; } double DurationInterface::GetInterfaceAlignmentDuration(int num, int numBase) @@ -176,17 +178,22 @@ bool DurationInterface::IsLastInBeam(LayerElement *noteOrRest) int DurationInterface::GetActualDur() const { - if (!this->HasDur()) return DURATION_NONE; - // maxima (-1) is a mensural only value - if (this->GetDur() == DURATION_maxima) return DUR_MX; - return (this->GetDur() & DUR_MENSURAL_MASK); + const data_DURATION dur = this->HasDur() ? this->GetDur() : this->GetDurDefault(); + return this->CalcActualDur(dur); } int DurationInterface::GetActualDurGes() const { + const data_DURATION dur = this->HasDurGes() ? this->GetDurGes() : DURATION_NONE; + return this->CalcActualDur(dur); +} + +int DurationInterface::CalcActualDur(data_DURATION dur) const +{ + if (dur == DURATION_NONE) return dur; // maxima (-1) is a mensural only value - if (this->GetDurGes() == DURATION_maxima) return DUR_MX; - return (this->GetDurGes() & DUR_MENSURAL_MASK); + if (dur == DURATION_maxima) return DUR_MX; + return (dur & DUR_MENSURAL_MASK); } int DurationInterface::GetNoteOrChordDur(LayerElement *element) From 1270e8a21f58fa23aedfb2901921ea5af554c105 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Mon, 3 Jan 2022 15:12:15 +0100 Subject: [PATCH 017/403] Sort classes alphabetically --- include/vrv/functorparams.h | 218 ++++++++++++++++++------------------ 1 file changed, 109 insertions(+), 109 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 1ed431d09b9..0c52011d8d6 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -294,48 +294,6 @@ class AdjustDotsParams : public FunctorParams { // Use FunctorDocParams -//---------------------------------------------------------------------------- -// AdjustGraceXPosParams -//---------------------------------------------------------------------------- - -/** - * member 0: the maximum position - * member 1: the upcoming maximum position (i.e., the min pos for the next element) - * member 2: the cumulated shift on the previous aligners - * member 3: the list of staffN in the top-level scoreDef - * member 4: the flag indicating whereas the alignment is in a Measure or in a Grace - * member 5: the pointer to the right ALIGNMENT_DEFAULT (if any) - * member 6: the Doc - * member 7: the Functor to be redirected to MeasureAligner and GraceAligner - * member 8: the end Functor for redirection - **/ - -class AdjustGraceXPosParams : public FunctorParams { -public: - AdjustGraceXPosParams(Doc *doc, Functor *functor, Functor *functorEnd, std::vector staffNs) - { - m_graceMaxPos = 0; - m_graceUpcomingMaxPos = -VRV_UNSET; - m_graceCumulatedXShift = 0; - m_staffNs = staffNs; - m_isGraceAlignment = false; - m_rightDefaultAlignment = NULL; - m_doc = doc; - m_functor = functor; - m_functorEnd = functorEnd; - m_staffNs = staffNs; - } - int m_graceMaxPos; - int m_graceUpcomingMaxPos; - int m_graceCumulatedXShift; - std::vector m_staffNs; - bool m_isGraceAlignment; - Alignment *m_rightDefaultAlignment; - Doc *m_doc; - Functor *m_functor; - Functor *m_functorEnd; -}; - //---------------------------------------------------------------------------- // AdjustFloatingPositionersParams //---------------------------------------------------------------------------- @@ -407,6 +365,48 @@ class AdjustFloatingPositionerGrpsParams : public FunctorParams { Doc *m_doc; }; +//---------------------------------------------------------------------------- +// AdjustGraceXPosParams +//---------------------------------------------------------------------------- + +/** + * member 0: the maximum position + * member 1: the upcoming maximum position (i.e., the min pos for the next element) + * member 2: the cumulated shift on the previous aligners + * member 3: the list of staffN in the top-level scoreDef + * member 4: the flag indicating whereas the alignment is in a Measure or in a Grace + * member 5: the pointer to the right ALIGNMENT_DEFAULT (if any) + * member 6: the Doc + * member 7: the Functor to be redirected to MeasureAligner and GraceAligner + * member 8: the end Functor for redirection + **/ + +class AdjustGraceXPosParams : public FunctorParams { +public: + AdjustGraceXPosParams(Doc *doc, Functor *functor, Functor *functorEnd, std::vector staffNs) + { + m_graceMaxPos = 0; + m_graceUpcomingMaxPos = -VRV_UNSET; + m_graceCumulatedXShift = 0; + m_staffNs = staffNs; + m_isGraceAlignment = false; + m_rightDefaultAlignment = NULL; + m_doc = doc; + m_functor = functor; + m_functorEnd = functorEnd; + m_staffNs = staffNs; + } + int m_graceMaxPos; + int m_graceUpcomingMaxPos; + int m_graceCumulatedXShift; + std::vector m_staffNs; + bool m_isGraceAlignment; + Alignment *m_rightDefaultAlignment; + Doc *m_doc; + Functor *m_functor; + Functor *m_functorEnd; +}; + //---------------------------------------------------------------------------- // AdjustHarmGrpsSpacingParams //---------------------------------------------------------------------------- @@ -1520,6 +1520,26 @@ class FindSpannedLayerElementsParams : public FunctorParams { std::vector m_classIds; }; +//---------------------------------------------------------------------------- +// GenerateFeaturesParams +//---------------------------------------------------------------------------- + +/** + * member 0: a pointer to the Doc + * member 1: a pointer to the FeatureExtractor to which extraction is delegated + **/ + +class GenerateFeaturesParams : public FunctorParams { +public: + GenerateFeaturesParams(Doc *doc, FeatureExtractor *extractor) + { + m_doc = doc; + m_extractor = extractor; + } + Doc *m_doc; + FeatureExtractor *m_extractor; +}; + //---------------------------------------------------------------------------- // GenerateMIDIParams //---------------------------------------------------------------------------- @@ -1598,26 +1618,6 @@ class GenerateTimemapParams : public FunctorParams { Functor *m_functor; }; -//---------------------------------------------------------------------------- -// GenerateFeaturesParams -//---------------------------------------------------------------------------- - -/** - * member 0: a pointer to the Doc - * member 1: a pointer to the FeatureExtractor to which extraction is delegated - **/ - -class GenerateFeaturesParams : public FunctorParams { -public: - GenerateFeaturesParams(Doc *doc, FeatureExtractor *extractor) - { - m_doc = doc; - m_extractor = extractor; - } - Doc *m_doc; - FeatureExtractor *m_extractor; -}; - //---------------------------------------------------------------------------- // GetAlignmentLeftRightParams //---------------------------------------------------------------------------- @@ -1801,6 +1801,27 @@ class LayerElementsInTimeSpanParams : public FunctorParams { Layer *m_layer; }; +//---------------------------------------------------------------------------- +// PrepareCrossStaffParams +//---------------------------------------------------------------------------- + +/** + * member 0: a pointer to the current measure + **/ + +class PrepareCrossStaffParams : public FunctorParams { +public: + PrepareCrossStaffParams() + { + m_currentMeasure = NULL; + m_currentCrossStaff = NULL; + m_currentCrossLayer = NULL; + } + Measure *m_currentMeasure; + Staff *m_currentCrossStaff; + Layer *m_currentCrossLayer; +}; + //---------------------------------------------------------------------------- // PrepareDelayedTurnsParams //---------------------------------------------------------------------------- @@ -1869,27 +1890,6 @@ class PrepareFloatingGrpsParams : public FunctorParams { Doc *m_doc; }; -//---------------------------------------------------------------------------- -// PrepareCrossStaffParams -//---------------------------------------------------------------------------- - -/** - * member 0: a pointer to the current measure - **/ - -class PrepareCrossStaffParams : public FunctorParams { -public: - PrepareCrossStaffParams() - { - m_currentMeasure = NULL; - m_currentCrossStaff = NULL; - m_currentCrossLayer = NULL; - } - Measure *m_currentMeasure; - Staff *m_currentCrossStaff; - Layer *m_currentCrossLayer; -}; - //---------------------------------------------------------------------------- // PrepareLyricsParams //---------------------------------------------------------------------------- @@ -2025,6 +2025,20 @@ class PrepareRptParams : public FunctorParams { Doc *m_doc; }; +//---------------------------------------------------------------------------- +// PrepareSlursParams +//---------------------------------------------------------------------------- + +/** + * member 0: the doc + **/ + +class PrepareSlursParams : public FunctorParams { +public: + PrepareSlursParams(Doc *doc) { m_doc = doc; } + Doc *m_doc; +}; + //---------------------------------------------------------------------------- // PrepareTimePointingParams //---------------------------------------------------------------------------- @@ -2071,6 +2085,18 @@ class PrepareTimestampsParams : public FunctorParams { ListOfObjectBeatPairs m_tstamps; }; +//---------------------------------------------------------------------------- +// ReorderByXPosParams +//---------------------------------------------------------------------------- + +/** + * member 0: a pointer to the current object whose children we (may) reorder + **/ +class ReorderByXPosParams : public FunctorParams { +public: + int modifications = 0; +}; + //---------------------------------------------------------------------------- // ReplaceDrawingValuesInStaffDefParams //---------------------------------------------------------------------------- @@ -2384,32 +2410,6 @@ class UnCastOffParams : public FunctorParams { System *m_currentSystem; }; -//---------------------------------------------------------------------------- -// ReorderByXPosParams -//---------------------------------------------------------------------------- - -/** - * member 0: a pointer to the current object whose children we (may) reorder - **/ -class ReorderByXPosParams : public FunctorParams { -public: - int modifications = 0; -}; - -//---------------------------------------------------------------------------- -// PrepareSlursParams -//---------------------------------------------------------------------------- - -/** - * member 0: the doc - **/ - -class PrepareSlursParams : public FunctorParams { -public: - PrepareSlursParams(Doc *doc) { m_doc = doc; } - Doc *m_doc; -}; - } // namespace vrv #endif From f6dea2d27f7e0af94cf363b3aa23a44662976f39 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 4 Jan 2022 10:14:53 +0100 Subject: [PATCH 018/403] PrepareDuration functor Transfer default duration from scoredef/staffdef into interface --- include/vrv/functorparams.h | 22 ++++++++++++++++++++++ include/vrv/layerelement.h | 5 +++++ include/vrv/object.h | 5 +++++ include/vrv/score.h | 5 +++++ include/vrv/scoredef.h | 6 +++++- include/vrv/staffdef.h | 5 +++++ src/doc.cpp | 6 ++++++ src/layerelement.cpp | 24 ++++++++++++++++++++++++ src/score.cpp | 13 +++++++++++++ src/scoredef.cpp | 11 +++++++++++ src/staffdef.cpp | 12 ++++++++++++ 11 files changed, 113 insertions(+), 1 deletion(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 0c52011d8d6..83f6a27e188 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1847,6 +1847,28 @@ class PrepareDelayedTurnsParams : public FunctorParams { std::map m_delayedTurns; }; +//---------------------------------------------------------------------------- +// PrepareDurationParams +//---------------------------------------------------------------------------- + +/** + * member 0: the current scoredef default duration + * member 1: the current staffdef default durations + * member 2: the functor for redirection + **/ + +class PrepareDurationParams : public FunctorParams { +public: + PrepareDurationParams(Functor *functor) + { + m_durDefault = DURATION_NONE; + m_functor = functor; + } + data_DURATION m_durDefault; + std::map m_durDefaultForStaffN; + Functor *m_functor; +}; + //---------------------------------------------------------------------------- // PrepareFacsimileParams //---------------------------------------------------------------------------- diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index 5ed03fd4090..1f92dd8211a 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -398,6 +398,11 @@ class LayerElement : public Object, */ int PrepareSlurs(FunctorParams *functorParams) override; + /** + * See Object::PrepareDuration + */ + int PrepareDuration(FunctorParams *functorParams) override; + protected: /** * Helper to figure whether two chords are in fully in unison based on the locations of the notes. diff --git a/include/vrv/object.h b/include/vrv/object.h index 506eddff1af..754e99eb879 100644 --- a/include/vrv/object.h +++ b/include/vrv/object.h @@ -1071,6 +1071,11 @@ class Object : public BoundingBox { virtual int PreparePlist(FunctorParams *functorParams); ///@} + /** + * Extract default duration from scoredef/staffdef + */ + virtual int PrepareDuration(FunctorParams *) { return FUNCTOR_CONTINUE; } + /** * Match start for TimePointingInterface elements (such as fermata or harm). */ diff --git a/include/vrv/score.h b/include/vrv/score.h index 158f1caef29..2684a9f3046 100644 --- a/include/vrv/score.h +++ b/include/vrv/score.h @@ -116,6 +116,11 @@ class Score : public PageElement, public PageMilestoneInterface, public AttLabel */ int ScoreDefOptimize(FunctorParams *functorParams) override; + /** + * See Object::PrepareDuration + */ + int PrepareDuration(FunctorParams *functorParams) override; + private: /** * The score/scoreDef (first child of the score) diff --git a/include/vrv/scoredef.h b/include/vrv/scoredef.h index 3c4f449f8d6..5c360746cdb 100644 --- a/include/vrv/scoredef.h +++ b/include/vrv/scoredef.h @@ -234,7 +234,6 @@ class ScoreDef : public ScoreDefElement, int CastOffSystems(FunctorParams *functorParams) override; /** - * See Object::CastOffEncoding */ int CastOffEncoding(FunctorParams *functorParams) override; @@ -249,6 +248,11 @@ class ScoreDef : public ScoreDefElement, */ int JustifyX(FunctorParams *functorParams) override; + /** + * See Object::PrepareDuration + */ + int PrepareDuration(FunctorParams *functorParams) override; + protected: /** * Filter the flat list and keep only StaffDef elements. diff --git a/include/vrv/staffdef.h b/include/vrv/staffdef.h index a0663c1b1ae..313f06f3b88 100644 --- a/include/vrv/staffdef.h +++ b/include/vrv/staffdef.h @@ -74,6 +74,11 @@ class StaffDef : public ScoreDefElement, */ int SetStaffDefRedrawFlags(FunctorParams *functorParams) override; + /** + * See Object::PrepareDuration + */ + int PrepareDuration(FunctorParams *functorParams) override; + private: // public: diff --git a/src/doc.cpp b/src/doc.cpp index 20f6dd4da51..0b107960946 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -512,6 +512,12 @@ void Doc::PrepareDrawing() this->Process(&resetDrawing, NULL); } + /************ Store default durations ************/ + + Functor prepareDuration(&Object::PrepareDuration); + PrepareDurationParams prepareDurationParams(&prepareDuration); + this->Process(&prepareDuration, &prepareDurationParams); + /************ Resolve @startid / @endid ************/ // Try to match all spanning elements (slur, tie, etc) by processing backwards diff --git a/src/layerelement.cpp b/src/layerelement.cpp index b1f288a4e5f..18402a4ac4a 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -2546,4 +2546,28 @@ int LayerElement::PrepareSlurs(FunctorParams *) return FUNCTOR_SIBLINGS; } +int LayerElement::PrepareDuration(FunctorParams *functorParams) +{ + PrepareDurationParams *params = vrv_params_cast(functorParams); + assert(params); + + DurationInterface *durInterface = this->GetDurationInterface(); + if (durInterface) { + durInterface->SetDurDefault(params->m_durDefault); + // Check if there is a duration default for the staff + if (!params->m_durDefaultForStaffN.empty()) { + Layer *layer = NULL; + Staff *staff = this->GetCrossStaff(layer); + if (!staff) staff = vrv_cast(this->GetFirstAncestor(STAFF)); + assert(staff); + + if (params->m_durDefaultForStaffN.count(staff->GetN()) > 0) { + durInterface->SetDurDefault(params->m_durDefaultForStaffN.at(staff->GetN())); + } + } + } + + return FUNCTOR_CONTINUE; +} + } // namespace vrv diff --git a/src/score.cpp b/src/score.cpp index e0c7fc62522..e648ceddc3a 100644 --- a/src/score.cpp +++ b/src/score.cpp @@ -263,4 +263,17 @@ int Score::ScoreDefOptimize(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int Score::PrepareDuration(FunctorParams *functorParams) +{ + PrepareDurationParams *params = vrv_params_cast(functorParams); + assert(params); + + ScoreDef *scoreDef = this->GetScoreDef(); + if (scoreDef) { + scoreDef->Process(params->m_functor, params); + } + + return FUNCTOR_CONTINUE; +} + } // namespace vrv diff --git a/src/scoredef.cpp b/src/scoredef.cpp index 29dcc138c05..d2dd8bee259 100644 --- a/src/scoredef.cpp +++ b/src/scoredef.cpp @@ -610,4 +610,15 @@ int ScoreDef::JustifyX(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } +int ScoreDef::PrepareDuration(FunctorParams *functorParams) +{ + PrepareDurationParams *params = vrv_params_cast(functorParams); + assert(params); + + params->m_durDefaultForStaffN.clear(); + params->m_durDefault = this->GetDurDefault(); + + return FUNCTOR_CONTINUE; +} + } // namespace vrv diff --git a/src/staffdef.cpp b/src/staffdef.cpp index 93c23c5ffe5..d0609cf871f 100644 --- a/src/staffdef.cpp +++ b/src/staffdef.cpp @@ -168,4 +168,16 @@ int StaffDef::SetStaffDefRedrawFlags(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int StaffDef::PrepareDuration(FunctorParams *functorParams) +{ + PrepareDurationParams *params = vrv_params_cast(functorParams); + assert(params); + + if (this->HasDurDefault() && this->HasN()) { + params->m_durDefaultForStaffN[this->GetN()] = this->GetDurDefault(); + } + + return FUNCTOR_CONTINUE; +} + } // namespace vrv From 676b7be9c95091380ba72077611d4e258534706d Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Tue, 4 Jan 2022 20:52:10 +0100 Subject: [PATCH 019/403] minor refinements --- include/vrv/iomusxml.h | 7 ++++--- src/iomusxml.cpp | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/include/vrv/iomusxml.h b/include/vrv/iomusxml.h index 987d48a515f..818514e9306 100644 --- a/include/vrv/iomusxml.h +++ b/include/vrv/iomusxml.h @@ -64,7 +64,7 @@ namespace musicxml { class OpenSlur { public: - OpenSlur(const std::string &measureNum, const short int &number) + OpenSlur(const std::string &measureNum, short int number) { m_measureNum = measureNum; m_number = number; @@ -76,7 +76,7 @@ namespace musicxml { class CloseSlur { public: - CloseSlur(const std::string &measureNum, const short int &number) + CloseSlur(const std::string &measureNum, short int number) { m_measureNum = measureNum; m_number = number; @@ -200,7 +200,8 @@ class MusicXmlInput : public Input { * Methods for reading the first MusicXML attributes element as MEI staffDef. * Returns the number of staves in the part. */ - int ReadMusicXmlPartAttributesAsStaffDef(pugi::xml_node node, StaffGrp *staffGrp, const short int staffOffset); + short int ReadMusicXmlPartAttributesAsStaffDef( + pugi::xml_node node, StaffGrp *staffGrp, const short int staffOffset); /* * @name Methods for reading the content of a MusicXML measure. diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index 36719ff4210..3c972106ea7 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -691,7 +691,7 @@ void MusicXmlInput::PrintMetronome(pugi::xml_node metronome, Tempo *tempo) // find separator or use end() if there is no separator const auto separator = std::find_if(iter, metronomeElements.end(), [](const auto pair) { return pair.first == MetronomeElements::SEPARATOR; }); - const short int dotCount = (int)std::count_if( + const short int dotCount = (short int)std::count_if( iter, separator, [](const auto pair) { return pair.first == MetronomeElements::BEAT_UNIT_DOT; }); for (short int i = 0; i < dotCount; i++) { verovioText += L"\xE1E7"; // SMUFL augmentation dot @@ -1201,7 +1201,8 @@ void MusicXmlInput::ReadMusicXmlTitle(pugi::xml_node root) app.append_attribute("version").set_value(GetVersion().c_str()); } -int MusicXmlInput::ReadMusicXmlPartAttributesAsStaffDef(pugi::xml_node node, StaffGrp *staffGrp, short int staffOffset) +short int MusicXmlInput::ReadMusicXmlPartAttributesAsStaffDef( + pugi::xml_node node, StaffGrp *staffGrp, const short int staffOffset) { assert(node); assert(staffGrp); @@ -1471,7 +1472,7 @@ bool MusicXmlInput::ReadMusicXmlPart(pugi::xml_node node, Section *section, shor } bool MusicXmlInput::ReadMusicXmlMeasure( - pugi::xml_node node, Section *section, Measure *measure, short int nbStaves, short int staffOffset, int index) + pugi::xml_node node, Section *section, Measure *measure, short int nbStaves, const short int staffOffset, int index) { assert(node); assert(measure); From 5816abeb169dbaa20333f53c1b2971f949fe21bb Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Tue, 4 Jan 2022 21:51:59 +0100 Subject: [PATCH 020/403] update clang-format-check action --- .github/workflows/clang-format-check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/clang-format-check.yml b/.github/workflows/clang-format-check.yml index a2c62b746e3..d14f41c3ca2 100644 --- a/.github/workflows/clang-format-check.yml +++ b/.github/workflows/clang-format-check.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Run clang-format style check for C/C++ programs. - uses: jidicula/clang-format-action@v3.4.0 + uses: jidicula/clang-format-action@v4.4.1 with: clang-format-version: "11" check-path: ${{ matrix.path['check'] }} From 7188b518d50dc0d6ec91b2d3ff5585fb94d7bdd2 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Wed, 5 Jan 2022 10:28:13 +0100 Subject: [PATCH 021/403] Handling of none duration --- include/vrv/attdef.h | 3 ++- src/durationinterface.cpp | 4 +++- src/view_element.cpp | 12 ++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/include/vrv/attdef.h b/include/vrv/attdef.h index 47fd78d8f5a..f520195c9cb 100644 --- a/include/vrv/attdef.h +++ b/include/vrv/attdef.h @@ -38,6 +38,7 @@ typedef double data_VU; * These duration values are used for internal calculation and differ from the * MEI data.DURATION types (see below) */ +#define DUR_NONE -32 #define DUR_MX -1 // maxima #define DUR_LG 0 // longa #define DUR_BR 1 // brevis @@ -96,7 +97,7 @@ enum data_BEATRPT_REND { * MEI data.DURATION */ enum data_DURATION { - DURATION_NONE = VRV_UNSET, + DURATION_NONE = DUR_NONE, DURATION_long = DUR_LG, DURATION_breve, DURATION_1, diff --git a/src/durationinterface.cpp b/src/durationinterface.cpp index 4636e47b850..72ebb5a6839 100644 --- a/src/durationinterface.cpp +++ b/src/durationinterface.cpp @@ -69,6 +69,7 @@ void DurationInterface::Reset() double DurationInterface::GetInterfaceAlignmentDuration(int num, int numBase) { int noteDur = this->GetDurGes() != DURATION_NONE ? this->GetActualDurGes() : this->GetActualDur(); + if (noteDur == DUR_NONE) noteDur = DUR_4; if (this->HasNum()) num *= this->GetNum(); if (this->HasNumbase()) numBase *= this->GetNumbase(); @@ -86,6 +87,7 @@ double DurationInterface::GetInterfaceAlignmentDuration(int num, int numBase) double DurationInterface::GetInterfaceAlignmentMensuralDuration(int num, int numBase, Mensur *currentMensur) { int noteDur = this->GetDurGes() != DURATION_NONE ? this->GetActualDurGes() : this->GetActualDur(); + if (noteDur == DUR_NONE) noteDur = DUR_4; if (!currentMensur) { LogWarning("No current mensur for calculating duration"); @@ -190,7 +192,7 @@ int DurationInterface::GetActualDurGes() const int DurationInterface::CalcActualDur(data_DURATION dur) const { - if (dur == DURATION_NONE) return dur; + if (dur == DURATION_NONE) return DUR_NONE; // maxima (-1) is a mensural only value if (dur == DURATION_maxima) return DUR_MX; return (dur & DUR_MENSURAL_MASK); diff --git a/src/view_element.cpp b/src/view_element.cpp index 404f9fd08cb..b6ce73f2316 100644 --- a/src/view_element.cpp +++ b/src/view_element.cpp @@ -1354,6 +1354,12 @@ void View::DrawNote(DeviceContext *dc, LayerElement *element, Layer *layer, Staf if (!(note->GetHeadVisible() == BOOLEAN_false)) { /************** Noteheads: **************/ int drawingDur = note->GetDrawingDur(); + if (drawingDur == DUR_NONE) { + if (note->IsInBeam() && !dc->Is(BBOX_DEVICE_CONTEXT)) { + LogWarning("Missing duration for note '%s'", note->GetUuid().c_str()); + } + drawingDur = DUR_4; + } drawingDur = ((note->GetColored() == BOOLEAN_true) && drawingDur > DUR_1) ? (drawingDur + 1) : drawingDur; if (drawingDur < DUR_BR) { @@ -1427,6 +1433,12 @@ void View::DrawRest(DeviceContext *dc, LayerElement *element, Layer *layer, Staf const bool drawingCueSize = rest->GetDrawingCueSize(); const int drawingDur = rest->GetActualDur(); + if (drawingDur == DUR_NONE) { + if (!dc->Is(BBOX_DEVICE_CONTEXT)) { + LogWarning("Missing duration for rest '%s'", rest->GetUuid().c_str()); + } + return; + } const wchar_t drawingGlyph = rest->GetRestGlyph(); int x = element->GetDrawingX(); From a51e69974ae13d36c3ad534f8a933871e548498e Mon Sep 17 00:00:00 2001 From: David Bauer Date: Wed, 5 Jan 2022 11:51:06 +0100 Subject: [PATCH 022/403] Fix abc import --- include/vrv/doc.h | 1 + include/vrv/ioabc.h | 2 +- src/ioabc.cpp | 6 ++---- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/include/vrv/doc.h b/include/vrv/doc.h index b65ed5394b4..84fdc82194e 100644 --- a/include/vrv/doc.h +++ b/include/vrv/doc.h @@ -408,6 +408,7 @@ class Doc : public Object { Score *GetCurrentScore(); ScoreDef *GetCurrentScoreDef(); void SetCurrentScore(Score *score); + bool HasCurrentScore() const { return m_currentScore != NULL; } ///@} //----------// diff --git a/include/vrv/ioabc.h b/include/vrv/ioabc.h index d54279e83ef..19e738e5283 100644 --- a/include/vrv/ioabc.h +++ b/include/vrv/ioabc.h @@ -102,7 +102,7 @@ class ABCInput : public Input { MeterSig *m_meter = NULL; Layer *m_layer = NULL; - data_DURATION m_durDefault; // todo: switch to MEI + data_DURATION m_durDefault; std::string m_ID; int m_unitDur; std::pair m_barLines diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 6fc08d008c2..a9072bbd992 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -146,7 +146,7 @@ void ABCInput::parseABC(std::istream &infile) // create score assert(m_mdiv != NULL); Score *score = new Score(); - if (!m_doc->GetCurrentScoreDef()->GetFirst(STAFFGRP)) { + if (!m_doc->HasCurrentScore() || !m_doc->GetCurrentScoreDef()->GetFirst(STAFFGRP)) { m_mdiv->AddChild(score); // create page head @@ -185,6 +185,7 @@ void ABCInput::parseABC(std::istream &infile) if (m_durDefault == DURATION_NONE) { CalcUnitNoteLength(); } + m_doc->GetCurrentScoreDef()->SetDurDefault(m_durDefault); // read music code m_layer = new Layer(); @@ -295,12 +296,10 @@ void ABCInput::CalcUnitNoteLength() if (!meterSig || !meterSig->HasUnit() || double(meterSig->GetTotalCount()) / double(meterSig->GetUnit()) >= 0.75) { m_unitDur = 8; m_durDefault = DURATION_8; - // m_doc->m_scoreDef.SetDurDefault(DURATION_8); } else { m_unitDur = 16; m_durDefault = DURATION_16; - // m_doc->m_scoreDef.SetDurDefault(DURATION_16); } } @@ -744,7 +743,6 @@ void ABCInput::parseUnitNoteLength(const std::string &unitNoteLength) case 256: m_durDefault = DURATION_256; break; default: break; } - // m_doc->m_scoreDef.SetDurDefault(m_durDefault); } void ABCInput::parseMeter(const std::string &meterString) From 7a8b9f2ca00c19ba2390b7fc0b5fe6f3bf42df0d Mon Sep 17 00:00:00 2001 From: David Bauer Date: Fri, 7 Jan 2022 10:25:28 +0100 Subject: [PATCH 023/403] Move entire content of last system for widow measures --- src/system.cpp | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/system.cpp b/src/system.cpp index e1af18c094a..24889e0339a 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -1007,23 +1007,24 @@ int System::CastOffPages(FunctorParams *functorParams) const int childCount = params->m_currentPage->GetChildCount(); if ((systemMaxPerPage && systemMaxPerPage == childCount) || (childCount > 0 && (this->m_drawingYRel - this->GetHeight() - currentShift < 0))) { - // If this is last system in the list, it doesn't fit the page and it's leftover system (has just one last - // measure) - get measure out of that system and try adding it to the previous system + // If this is the last system in the list, it doesn't fit the page and it's leftover system (has just one + // measure) => add the system content to the previous system Object *nextSystem = params->m_contentPage->GetNext(this, SYSTEM); - if ((NULL == nextSystem) && (this == params->m_leftoverSystem)) { - Measure *measure = dynamic_cast(Relinquish(GetFirst(MEASURE)->GetIdx())); - System *lastSystem = dynamic_cast(params->m_currentPage->GetLast()); - if (measure && lastSystem) lastSystem->AddChild(measure); + Object *lastSystem = params->m_currentPage->GetLast(SYSTEM); + if (!nextSystem && lastSystem && (this == params->m_leftoverSystem)) { + ArrayOfObjects *children = this->GetChildrenForModification(); + for (Object *child : *children) { + child->MoveItselfTo(lastSystem); + } return FUNCTOR_SIBLINGS; } - else { - params->m_currentPage = new Page(); - // Use VRV_UNSET value as a flag - params->m_pgHeadHeight = VRV_UNSET; - assert(params->m_doc->GetPages()); - params->m_doc->GetPages()->AddChild(params->m_currentPage); - params->m_shift = this->m_drawingYRel - params->m_pageHeight; - } + + params->m_currentPage = new Page(); + // Use VRV_UNSET value as a flag + params->m_pgHeadHeight = VRV_UNSET; + assert(params->m_doc->GetPages()); + params->m_doc->GetPages()->AddChild(params->m_currentPage); + params->m_shift = this->m_drawingYRel - params->m_pageHeight; } // First add all pending objects From 5c99b2ec602e42e24d281ecb3c9c903fe7142f69 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Fri, 7 Jan 2022 12:55:35 +0100 Subject: [PATCH 024/403] Update clang-format-check action --- .github/workflows/clang-format-check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/clang-format-check.yml b/.github/workflows/clang-format-check.yml index a2c62b746e3..d14f41c3ca2 100644 --- a/.github/workflows/clang-format-check.yml +++ b/.github/workflows/clang-format-check.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Run clang-format style check for C/C++ programs. - uses: jidicula/clang-format-action@v3.4.0 + uses: jidicula/clang-format-action@v4.4.1 with: clang-format-version: "11" check-path: ${{ matrix.path['check'] }} From c22e334f2f5ee2493d638954c1c332c7a8efcd5d Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Mon, 10 Jan 2022 10:04:21 +0100 Subject: [PATCH 025/403] use c++11 stoi --- src/iomusxml.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index 3c972106ea7..0859ec2c20b 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -2557,7 +2557,7 @@ void MusicXmlInput::ReadMusicXmlNote( element = mRest; if (cue) mRest->SetCue(BOOLEAN_true); if (!stepStr.empty()) mRest->SetPloc(ConvertStepToPitchName(stepStr)); - if (!octaveStr.empty()) mRest->SetOloc(atoi(octaveStr.c_str())); + if (!octaveStr.empty()) mRest->SetOloc(std::stoi(octaveStr)); if (!noteID.empty()) { mRest->SetUuid(noteID); } @@ -2573,7 +2573,7 @@ void MusicXmlInput::ReadMusicXmlNote( if (dots > 0) rest->SetDots(dots); if (cue) rest->SetCue(BOOLEAN_true); if (!stepStr.empty()) rest->SetPloc(ConvertStepToPitchName(stepStr)); - if (!octaveStr.empty()) rest->SetOloc(atoi(octaveStr.c_str())); + if (!octaveStr.empty()) rest->SetOloc(std::stoi(octaveStr)); if (!noteID.empty()) { rest->SetUuid(noteID); } @@ -3075,7 +3075,7 @@ void MusicXmlInput::ReadMusicXmlNote( short int extNumber = xmlGlissando.attribute("number").as_int(); std::vector::iterator iter = m_glissStack.begin(); while (iter != m_glissStack.end()) { - if ((atoi(((*iter)->GetN()).c_str()) == extNumber) && ((*iter)->GetType() == xmlGlissando.name())) { + if ((std::stoi((*iter)->GetN()) == extNumber) && ((*iter)->GetType() == xmlGlissando.name())) { (*iter)->SetEndid(noteID); iter = m_glissStack.erase(iter); } @@ -3190,7 +3190,7 @@ void MusicXmlInput::ReadMusicXmlNote( std::vector>::iterator iter = m_trillStack.begin(); while (iter != m_trillStack.end()) { const int measureDifference = m_measureCounts.at(measure) - iter->second.m_lastMeasureCount; - if (atoi(((iter->first)->GetN()).c_str()) == extNumber) { + if (std::stoi((iter->first)->GetN()) == extNumber) { (iter->first) ->SetTstamp2(std::pair( measureDifference, (double)(m_durTotal) * (double)m_meterUnit / (double)(4 * m_ppq) + 1)); From 519fda114638ed24b36971191938f76dd455cd23 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 10 Jan 2022 12:59:18 +0100 Subject: [PATCH 026/403] Add emscripten cache ID to ci_build --- .github/workflows/ci_build.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci_build.yml b/.github/workflows/ci_build.yml index 805817b34fb..61fa5dc99af 100644 --- a/.github/workflows/ci_build.yml +++ b/.github/workflows/ci_build.yml @@ -45,6 +45,7 @@ env: # emscripten EM_VERSION: latest EM_CACHE_FOLDER: "emsdk-cache" + EM_CACHE_ID: 1 # gh-pages GH_PAGES_REPO: ${{ github.repository_owner }}/verovio.org # works from rism-digital and from forks @@ -226,7 +227,7 @@ jobs: # path for cache path: ${{ env.EM_CACHE_FOLDER }} # key for cache - key: ${{ runner.os }}-emsdk-${{ env.EM_VERSION }} + key: ${{ runner.os }}-emsdk-${{ env.EM_VERSION }}-${{ env.EM_CACHE_ID }} - name: Set up emsdk uses: mymindstorm/setup-emsdk@v11 @@ -282,7 +283,7 @@ jobs: # path for cache path: ${{ env.EM_CACHE_FOLDER }} # key for cache - key: ${{ runner.os }}-emsdk-${{ env.EM_VERSION }} + key: ${{ runner.os }}-emsdk-${{ env.EM_VERSION }}-${{ env.EM_CACHE_ID }} # Install and/or activate emsdk - name: Set up emsdk From f940eb0957dd0f530f0f86c05cbf6084e8755b72 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 10 Jan 2022 13:07:41 +0100 Subject: [PATCH 027/403] Fix mymindstorm/setup-emsdk version mis-match --- .github/workflows/ci_build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci_build.yml b/.github/workflows/ci_build.yml index 61fa5dc99af..efddf29c9c5 100644 --- a/.github/workflows/ci_build.yml +++ b/.github/workflows/ci_build.yml @@ -287,7 +287,7 @@ jobs: # Install and/or activate emsdk - name: Set up emsdk - uses: mymindstorm/setup-emsdk@v7 + uses: mymindstorm/setup-emsdk@v11 with: version: ${{ env.EM_VERSION }} actions-cache-folder: ${{ env.EM_CACHE_FOLDER }} From cec3920827e35c1dbc93660abf52073cd4f90759 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 10 Jan 2022 13:36:45 +0100 Subject: [PATCH 028/403] Fix error message with corrupted duration in PAE --- src/iopae.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iopae.cpp b/src/iopae.cpp index 950e26dd3df..5a5f14ac267 100644 --- a/src/iopae.cpp +++ b/src/iopae.cpp @@ -4552,7 +4552,7 @@ bool PAEInput::ParseDuration( durations.clear(); if (paeStr.size() < 1 || paeStr.at(0) == '.') { - LogPAE(ERR_051_BARLINE, token); + LogPAE(ERR_052_DURATION, token); // Default to quarter note if (m_pedanticMode) return false; durations.push_back({ DURATION_4, 0 }); From 0a5f99aa23185c21589f2ff7b00c410db3f72748 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 11 Jan 2022 08:12:56 +0100 Subject: [PATCH 029/403] Update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ded37a5e26..9e0a1cd24fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## [unreleased] +## [3.8.1] - 2022-01-10 +* Fix bug in PAE importer for durations and for key signatures + ## [3.8.0] - 2021-12-22 * Support for figured-bass extenders on `f` without `@tstamp` or `@startid` * Improved page-based MEI output with validation with a customized MEI Schema From f0d7d6a9da8175e43fbab55170577d79ebd4de4b Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 11 Jan 2022 08:14:48 +0100 Subject: [PATCH 030/403] Support for `beatRpt@beatdef`. Closes #2564 * Alignment still needs to be improved --- CHANGELOG.md | 1 + include/vrv/beatrpt.h | 2 +- src/beatrpt.cpp | 8 ++++++-- src/iomei.cpp | 2 ++ 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e0a1cd24fe..18b00e68502 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog ## [unreleased] +* Support for `beatRpt@beatdef` ## [3.8.1] - 2022-01-10 * Fix bug in PAE importer for durations and for key signatures diff --git a/include/vrv/beatrpt.h b/include/vrv/beatrpt.h index 4cd68856ac9..2f3ea25f940 100644 --- a/include/vrv/beatrpt.h +++ b/include/vrv/beatrpt.h @@ -22,7 +22,7 @@ namespace vrv { /** * This class models the MEI element. */ -class BeatRpt : public LayerElement, public AttColor, public AttBeatRptVis { +class BeatRpt : public LayerElement, public AttColor, public AttBeatRptLog, public AttBeatRptVis { public: /** * @name Constructors, destructors, reset and class name methods diff --git a/src/beatrpt.cpp b/src/beatrpt.cpp index 2ffc853c474..30a1119ccda 100644 --- a/src/beatrpt.cpp +++ b/src/beatrpt.cpp @@ -34,8 +34,9 @@ namespace vrv { static const ClassRegistrar s_factory("beatRpt", BEATRPT); -BeatRpt::BeatRpt() : LayerElement(BEATRPT, "beatrpt-"), AttColor(), AttBeatRptVis() +BeatRpt::BeatRpt() : LayerElement(BEATRPT, "beatrpt-"), AttColor(), AttBeatRptLog(), AttBeatRptVis() { + RegisterAttClass(ATT_BEATRPTLOG); RegisterAttClass(ATT_BEATRPTVIS); RegisterAttClass(ATT_COLOR); Reset(); @@ -46,6 +47,7 @@ BeatRpt::~BeatRpt() {} void BeatRpt::Reset() { LayerElement::Reset(); + ResetBeatRptLog(); ResetBeatRptVis(); ResetColor(); @@ -54,7 +56,9 @@ void BeatRpt::Reset() double BeatRpt::GetBeatRptAlignmentDuration(int meterUnit) const { - return DUR_MAX / meterUnit; + double dur = DUR_MAX / meterUnit; + if (this->HasBeatdef()) dur *= this->GetBeatdef(); + return dur; } void BeatRpt::SetScoreTimeOnset(double scoreTime) diff --git a/src/iomei.cpp b/src/iomei.cpp index 6eda889aaa2..85190e64d4c 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -2087,6 +2087,7 @@ void MEIOutput::WriteBeatRpt(pugi::xml_node currentNode, BeatRpt *beatRpt) WriteLayerElement(currentNode, beatRpt); beatRpt->WriteColor(currentNode); + beatRpt->WriteBeatRptLog(currentNode); beatRpt->WriteBeatRptVis(currentNode); } @@ -5660,6 +5661,7 @@ bool MEIInput::ReadBeatRpt(Object *parent, pugi::xml_node beatRpt) ReadLayerElement(beatRpt, vrvBeatRpt); vrvBeatRpt->ReadColor(beatRpt); + vrvBeatRpt->ReadBeatRptLog(beatRpt); vrvBeatRpt->ReadBeatRptVis(beatRpt); if (m_version < MEI_4_0_0) { From ccbdfb415dd344370dbe605265ec72726becc473 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Tue, 11 Jan 2022 13:09:57 +0100 Subject: [PATCH 031/403] still use cstr as n may be empty --- src/iomusxml.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index 0859ec2c20b..19b8d64ad9f 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -3075,7 +3075,7 @@ void MusicXmlInput::ReadMusicXmlNote( short int extNumber = xmlGlissando.attribute("number").as_int(); std::vector::iterator iter = m_glissStack.begin(); while (iter != m_glissStack.end()) { - if ((std::stoi((*iter)->GetN()) == extNumber) && ((*iter)->GetType() == xmlGlissando.name())) { + if ((atoi(((*iter)->GetN()).c_str()) == extNumber) && ((*iter)->GetType() == xmlGlissando.name())) { (*iter)->SetEndid(noteID); iter = m_glissStack.erase(iter); } @@ -3190,7 +3190,7 @@ void MusicXmlInput::ReadMusicXmlNote( std::vector>::iterator iter = m_trillStack.begin(); while (iter != m_trillStack.end()) { const int measureDifference = m_measureCounts.at(measure) - iter->second.m_lastMeasureCount; - if (std::stoi((iter->first)->GetN()) == extNumber) { + if (atoi(((iter->first)->GetN()).c_str()) == extNumber) { (iter->first) ->SetTstamp2(std::pair( measureDifference, (double)(m_durTotal) * (double)m_meterUnit / (double)(4 * m_ppq) + 1)); From 701cd2161d11ad670577ea3d52205633f0213d8c Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 11 Jan 2022 15:28:40 +0100 Subject: [PATCH 032/403] Add input of tabGrp within Beam --- src/beam.cpp | 3 +++ src/iomei.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/beam.cpp b/src/beam.cpp index 3e9725835ec..bdcab53d061 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1175,6 +1175,9 @@ bool Beam::IsSupportedChild(Object *child) else if (child->Is(SPACE)) { assert(dynamic_cast(child)); } + else if (child->Is(TABGRP)) { + assert(dynamic_cast(child)); + } else if (child->Is(TUPLET)) { assert(dynamic_cast(child)); } diff --git a/src/iomei.cpp b/src/iomei.cpp index 96f72eb4e99..20fa5335133 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -3138,6 +3138,9 @@ bool MEIInput::IsAllowed(std::string element, Object *filterParent) else if (element == "space") { return true; } + else if (element == "tabGrp") { + return true; + } else if (element == "tuplet") { return true; } From 527dc3f7ad185defbc5f9b7e2ab691cc8fbf88f2 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 11 Jan 2022 15:29:13 +0100 Subject: [PATCH 033/403] Basic rendering of beam in tablature --- include/vrv/beam.h | 11 +- include/vrv/view.h | 6 + src/beam.cpp | 38 ++++++- src/drawinginterface.cpp | 8 +- src/layerelement.cpp | 2 +- src/view_beam.cpp | 11 +- src/view_tab.cpp | 239 +++++++++++++++++++++++++++++++++++---- 7 files changed, 283 insertions(+), 32 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 834253aeeb1..a3cfad402d0 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -44,7 +44,7 @@ class BeamSegment { void Reset(); void CalcBeam(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, - data_BEAMPLACE place = BEAMPLACE_NONE, bool init = true); + data_BEAMPLACE place = BEAMPLACE_NONE, bool init = true, bool isTabBeam = false); /** * @@ -79,7 +79,8 @@ class BeamSegment { // Helper to adjust beam positioning with regards to ledger lines (top and bottom of the staff) void AdjustBeamToLedgerLines(Doc *doc, Staff *staff, BeamDrawingInterface *beamInterface); - void CalcBeamInit(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place); + void CalcBeamInit(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place, + bool isTabBeam); bool CalcBeamSlope( Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, bool &shorten, int &step); @@ -167,6 +168,12 @@ class Beam : public LayerElement, */ const ArrayOfBeamElementCoords *GetElementCoords(); + /** + * Return true if the beam has a tabGrp child. + * In that case, the ObjectList will only have tabGrp elements. See Beam::FilterList + */ + bool IsTabBeam(); + //----------// // Functors // //----------// diff --git a/include/vrv/view.h b/include/vrv/view.h index 7213268b7a2..6c8aecb1748 100644 --- a/include/vrv/view.h +++ b/include/vrv/view.h @@ -602,6 +602,12 @@ class View { void DrawBeamSegment(DeviceContext *dc, BeamSegment *segment, BeamDrawingInterface *beamInterface, Layer *layer, Staff *staff, Measure *measure); + /** + * Internal method for drawing a BeamSegment in a tablature + */ + void DrawTabBeamSegment(DeviceContext *dc, BeamSegment *segment, BeamDrawingInterface *beamInterface, Layer *layer, + Staff *staff, Measure *measure); + public: /** Document */ Doc *m_doc; diff --git a/src/beam.cpp b/src/beam.cpp index bdcab53d061..325245ea9af 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -28,6 +28,7 @@ #include "smufl.h" #include "space.h" #include "staff.h" +#include "tabgrp.h" #include "tuplet.h" #include "verticalaligner.h" #include "vrv.h" @@ -80,8 +81,8 @@ void BeamSegment::InitCoordRefs(const ArrayOfBeamElementCoords *beamElementCoord m_beamElementCoordRefs = *beamElementCoords; } -void BeamSegment::CalcBeam( - Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place, bool init) +void BeamSegment::CalcBeam(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, + data_BEAMPLACE place, bool init, bool isTabBeam) { assert(layer); assert(staff); @@ -92,9 +93,11 @@ void BeamSegment::CalcBeam( // For recursive calls, avoid to re-init values if (init) { - this->CalcBeamInit(layer, staff, doc, beamInterface, place); + this->CalcBeamInit(layer, staff, doc, beamInterface, place, isTabBeam); } + if (isTabBeam) return; + bool horizontal = beamInterface->IsHorizontal(); // Beam@place has precedence - however, in some cases, CalcBeam is called recursively because we need to change the @@ -112,7 +115,7 @@ void BeamSegment::CalcBeam( CalcBeamPosition(doc, staff, layer, beamInterface, horizontal); if (BEAMPLACE_mixed == beamInterface->m_drawingPlace) { if (!beamInterface->m_crossStaffContent && NeedToResetPosition(staff, doc, beamInterface)) { - CalcBeamInit(layer, staff, doc, beamInterface, place); + CalcBeamInit(layer, staff, doc, beamInterface, place, false); CalcBeamStemLength(staff, beamInterface->m_drawingPlace, horizontal); CalcBeamPosition(doc, staff, layer, beamInterface, horizontal); } @@ -320,7 +323,7 @@ void BeamSegment::AdjustBeamToLedgerLines(Doc *doc, Staff *staff, BeamDrawingInt } void BeamSegment::CalcBeamInit( - Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place) + Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place, bool isTabBeam) { assert(layer); assert(staff); @@ -374,6 +377,8 @@ void BeamSegment::CalcBeamInit( m_firstNoteOrChord = NULL; m_lastNoteOrChord = NULL; + if (isTabBeam) return; + int yMax = m_verticalCenter; int yMin = m_verticalCenter; auto SetExtrema = [&yMax, &yMin](int currentY) { @@ -1197,6 +1202,8 @@ void Beam::FilterList(ArrayOfObjects *childList) // Eventually, we also need to filter out grace notes properly (e.g., with sub-beams) ArrayOfObjects::iterator iter = childList->begin(); + const bool isTabBeam = this->IsTabBeam(); + while (iter != childList->end()) { if (!(*iter)->IsLayerElement()) { // remove anything that is not an LayerElement (e.g. Verse, Syl, etc) @@ -1208,6 +1215,15 @@ void Beam::FilterList(ArrayOfObjects *childList) iter = childList->erase(iter); continue; } + else if (isTabBeam) { + if (!(*iter)->Is(TABGRP)) { + iter = childList->erase(iter); + } + else { + ++iter; + } + continue; + } else { LayerElement *element = vrv_cast(*iter); assert(element); @@ -1278,6 +1294,11 @@ const ArrayOfBeamElementCoords *Beam::GetElementCoords() return &m_beamElementCoords; } +bool Beam::IsTabBeam() +{ + return (this->FindDescendantByType(TABGRP)); +} + //---------------------------------------------------------------------------- // BeamElementCoord //---------------------------------------------------------------------------- @@ -1516,7 +1537,8 @@ int Beam::AdjustBeams(FunctorParams *functorParams) AdjustBeamParams *params = vrv_params_cast(functorParams); assert(params); - if (this->HasSameas() || !this->GetChildCount() || m_beamSegment.m_beamElementCoordRefs.empty()) { + if (this->IsTabBeam() || this->HasSameas() || !this->GetChildCount() + || m_beamSegment.m_beamElementCoordRefs.empty()) { return FUNCTOR_CONTINUE; } @@ -1553,6 +1575,8 @@ int Beam::AdjustBeamsEnd(FunctorParams *functorParams) AdjustBeamParams *params = vrv_params_cast(functorParams); assert(params); + if (this->IsTabBeam()) return FUNCTOR_CONTINUE; + if (params->m_beam != this) return FUNCTOR_CONTINUE; if (m_drawingPlace == BEAMPLACE_mixed) return FUNCTOR_CONTINUE; @@ -1588,6 +1612,8 @@ int Beam::CalcStem(FunctorParams *functorParams) CalcStemParams *params = vrv_params_cast(functorParams); assert(params); + if (this->IsTabBeam()) return FUNCTOR_CONTINUE; + const ArrayOfObjects *beamChildren = this->GetList(this); // Should we assert this at the beginning? diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index 259787ca106..8a6f29a0abc 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -183,8 +183,8 @@ void BeamDrawingInterface::InitCoords(ArrayOfObjects *childList, Staff *staff, d } } - // Skip rests - if (current->Is({ NOTE, CHORD })) { + // Skip rests and tabGrp + if (current->Is({ CHORD, NOTE })) { // Look at the stemDir to see if we have multiple stem Dir if (!m_hasMultipleStemDir) { // At this stage, BeamCoord::m_stem is not necessary set, so we need to look at the Note / Chord @@ -201,9 +201,13 @@ void BeamDrawingInterface::InitCoords(ArrayOfObjects *childList, Staff *staff, d } } } + } + // Skip rests + if (current->Is({ CHORD, NOTE, TABGRP })) { // keep the shortest dur in the beam m_shortestDur = std::max(currentDur, m_shortestDur); } + // check if we have more than duration in the beam if (!m_changingDur && currentDur != lastDur) m_changingDur = true; lastDur = currentDur; diff --git a/src/layerelement.cpp b/src/layerelement.cpp index fbbaa4c78d2..1a0f327ab87 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -210,7 +210,7 @@ FTrem *LayerElement::IsInFTrem() Beam *LayerElement::IsInBeam() { - if (!this->Is({ CHORD, NOTE, STEM })) return NULL; + if (!this->Is({ CHORD, NOTE, TABGRP, STEM })) return NULL; Beam *beamParent = vrv_cast(this->GetFirstAncestor(BEAM)); if (beamParent != NULL) { if (!this->IsGraceNote()) return beamParent; diff --git a/src/view_beam.cpp b/src/view_beam.cpp index a8de045c7f7..483889621c3 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -41,6 +41,8 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf Beam *beam = dynamic_cast(element); assert(beam); + const bool isTabBeam = beam->IsTabBeam(); + /******************************************************************/ // initialization @@ -56,7 +58,7 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf /******************************************************************/ // Calculate the beam slope and position - beam->m_beamSegment.CalcBeam(layer, beam->m_beamStaff, m_doc, beam, beam->GetPlace()); + beam->m_beamSegment.CalcBeam(layer, beam->m_beamStaff, m_doc, beam, beam->GetPlace(), true, isTabBeam); /******************************************************************/ // Start the Beam graphic and draw the children @@ -71,7 +73,12 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf /******************************************************************/ // Draw the beamSegment - DrawBeamSegment(dc, &beam->m_beamSegment, beam, layer, staff, measure); + if (isTabBeam) { + DrawTabBeamSegment(dc, &beam->m_beamSegment, beam, layer, staff, measure); + } + else { + DrawBeamSegment(dc, &beam->m_beamSegment, beam, layer, staff, measure); + } dc->EndGraphic(element, this); } diff --git a/src/view_tab.cpp b/src/view_tab.cpp index 2ab42a5f16d..9072e74402d 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -142,28 +142,38 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, y += m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * 1.5; int drawingDur = (tabGrp->GetDurGes() != DURATION_NONE) ? tabGrp->GetActualDurGes() : tabGrp->GetActualDur(); int glyphSize = staff->m_drawingStaffSize / TABLATURE_STAFF_RATIO; - int radius = m_doc->GetGlyphWidth(SMUFL_E0A4_noteheadBlack, glyphSize, false) / 2; - x += radius; - - int symc = 0; - switch (drawingDur) { - case DUR_2: symc = SMUFL_EBA7_luteDurationWhole; break; - case DUR_4: symc = SMUFL_EBA8_luteDurationHalf; break; - case DUR_8: symc = SMUFL_EBA9_luteDurationQuarter; break; - case DUR_16: symc = SMUFL_EBAA_luteDuration8th; break; - case DUR_32: symc = SMUFL_EBAB_luteDuration16th; break; - default: symc = SMUFL_EBA9_luteDurationQuarter; + + // We only need to draw the stems + // Do we also need to draw the dots? + if (tabGrp->IsInBeam()) { + const int height = m_doc->GetGlyphHeight(SMUFL_EBA8_luteDurationHalf, glyphSize, true); + DrawFilledRectangle(dc, x - m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) / 2, y, + x + m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) / 2, y + height); } + else { + int radius = m_doc->GetGlyphWidth(SMUFL_E0A4_noteheadBlack, glyphSize, false) / 2; + x += radius; + + int symc = 0; + switch (drawingDur) { + case DUR_2: symc = SMUFL_EBA7_luteDurationWhole; break; + case DUR_4: symc = SMUFL_EBA8_luteDurationHalf; break; + case DUR_8: symc = SMUFL_EBA9_luteDurationQuarter; break; + case DUR_16: symc = SMUFL_EBAA_luteDuration8th; break; + case DUR_32: symc = SMUFL_EBAB_luteDuration16th; break; + default: symc = SMUFL_EBA9_luteDurationQuarter; + } - DrawSmuflCode(dc, x, y, symc, glyphSize, true); + DrawSmuflCode(dc, x, y, symc, glyphSize, true); - if (tabGrp->HasDots()) { - y += m_doc->GetDrawingUnit(glyphSize) * 0.5; - x += m_doc->GetDrawingUnit(glyphSize); - for (int i = 0; i < tabGrp->GetDots(); ++i) { - DrawDot(dc, x, y, glyphSize / 2); - // HARDCODED - x += m_doc->GetDrawingUnit(glyphSize) * 0.75; + if (tabGrp->HasDots()) { + y += m_doc->GetDrawingUnit(glyphSize) * 0.5; + x += m_doc->GetDrawingUnit(glyphSize); + for (int i = 0; i < tabGrp->GetDots(); ++i) { + DrawDot(dc, x, y, glyphSize / 2); + // HARDCODED + x += m_doc->GetDrawingUnit(glyphSize) * 0.75; + } } } @@ -173,4 +183,195 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, dc->EndGraphic(tabDurSym, this); } +void View::DrawTabBeamSegment(DeviceContext *dc, BeamSegment *beamSegment, BeamDrawingInterface *beamInterface, + Layer *layer, Staff *staff, Measure *measure) +{ + assert(dc); + assert(beamSegment); + assert(beamInterface); + assert(layer); + assert(staff); + assert(measure); + + // temporary coordinates + int x1, x2, y1, y2; + + // temporary variables + int shiftY; + + // loops + int i; + + const ArrayOfBeamElementCoords *beamElementCoords = beamSegment->GetElementCoordRefs(); + + int elementCount = (int)beamElementCoords->size(); + int last = elementCount - 1; + + /******************************************************************/ + // Draw the beam full bar + + // Adjust the x position of the first and last element for taking into account the stem width + beamElementCoords->at(0)->m_x -= (m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; + beamElementCoords->at(last)->m_x += (m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; + + // Shift direction + shiftY = (beamInterface->m_drawingPlace == BEAMPLACE_below) ? 1.0 : -1.0; + + int glyphSize = staff->m_drawingStaffSize / TABLATURE_STAFF_RATIO; + int height = m_doc->GetGlyphHeight(SMUFL_EBA8_luteDurationHalf, glyphSize, true); + int y = staff->GetDrawingY() + height; + y += m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * 1.5; + + x1 = beamElementCoords->at(0)->m_x; + x2 = beamElementCoords->at(last)->m_x; + + // For acc and rit beam (see AttBeamingVis set + // s_y = 0 and s_y2 = 0 respectively + + const int polygonHeight = beamInterface->m_beamWidthBlack * shiftY / 2; + DrawObliquePolygon(dc, x1, y, x2, y, polygonHeight); + + /******************************************************************/ + // Draw the beam for partial bars (if any) + + // Map the indexes of the tabGrp since we need to ignore rests when drawing partials + // However, exception for the first and last element of a beam + std::vector noteIndexes; + for (i = 0; i < elementCount; ++i) { + if (beamElementCoords->at(i)->m_element->Is(REST)) + if (i > 0 && i < elementCount - 1) continue; + noteIndexes.push_back(i); + } + int noteCount = (int)noteIndexes.size(); + + if (noteCount > 0) { + int testDur = DUR_16; + int barY = beamInterface->m_beamWidth / 2; + + if (beamInterface->m_drawingPlace == BEAMPLACE_above) { + barY = -barY; + } + + int fractBeamWidth = m_doc->GetGlyphWidth(SMUFL_E0A4_noteheadBlack, glyphSize, beamInterface->m_cueSize); + + // loop + while (testDur <= beamInterface->m_shortestDur) { + // true at the beginning of a beam or after a breakSec + bool start = true; + + int idx = 0; + + // all but the last one + for (i = 0; i < noteCount - 1; ++i) { + idx = noteIndexes.at(i); + int nextIdx = noteIndexes.at(i + 1); + + bool breakSec = ((beamElementCoords->at(idx)->m_breaksec) + && (testDur - DUR_8 >= beamElementCoords->at(idx)->m_breaksec)); + beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_NONE; + // partial is needed + if (beamElementCoords->at(idx)->m_dur >= (char)testDur) { + // and for the next one too, but no break - through + if ((beamElementCoords->at(nextIdx)->m_dur >= (char)testDur) && !breakSec) { + beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_THROUGH; + } + // not needed for the next one or break + else { + // we are starting a beam or after a beam break - put it right + if (start) { + if ((idx != 0) && (beamElementCoords->at(idx - 1)->m_element->Is(REST))) { + beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_LEFT; + } + else { + beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_RIGHT; + } + } + // or the previous one had no partial + else if (beamElementCoords->at(noteIndexes.at(i - 1))->m_dur < (char)testDur) { + // if we are at the full bar level, put it left + if (testDur == DUR_16) { + beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_LEFT; + } + // if the previous level underneath was a partial through, put it left + else if (beamElementCoords->at(noteIndexes.at(i - 1))->m_partialFlags[testDur - 1 - DUR_8] + == PARTIAL_THROUGH) { + beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_LEFT; + } + // if the level underneath was not left (right or through), put it right + else if (beamElementCoords->at(idx)->m_partialFlags[testDur - 1 - DUR_8] != PARTIAL_LEFT) { + beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_RIGHT; + } + // it was put left before, put it left + else { + beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_LEFT; + } + } + } + } + // we are not in a group + start = breakSec; + } + // last one + idx = (int)noteIndexes.back(); + beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_NONE; + // partial is needed + if ((beamElementCoords->at(idx)->m_dur >= (char)testDur)) { + // and the previous one had no partial - put it left + if ((noteCount == 1) || (beamElementCoords->at(noteIndexes.at(i - 1))->m_dur < (char)testDur) + || start) { + beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_LEFT; + } + } + + barY = beamInterface->m_beamWidth * (testDur - DUR_8) / 2; + + // draw them + for (i = 0; i < noteCount; ++i) { + int barYPos = 0; + idx = noteIndexes.at(i); + if (BEAMPLACE_mixed == beamInterface->m_drawingPlace) { + int elemIndex = idx; + if (BEAMPLACE_NONE == beamElementCoords->at(idx)->m_partialFlagPlace) { + if ((0 == i) || ((noteCount - 1) == i) + || (beamElementCoords->at(noteIndexes.at(i - 1))->m_partialFlagPlace + != beamElementCoords->at(noteIndexes.at(i + 1))->m_partialFlagPlace)) { + continue; + } + elemIndex = i - 1; + } + barYPos + = barY * ((BEAMPLACE_above == beamElementCoords->at(elemIndex)->m_partialFlagPlace) ? 1 : -1); + } + else { + barYPos = shiftY * barY; + } + if (beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] == PARTIAL_THROUGH) { + // through should never be set on the last one + assert(i < noteCount - 1); + if (i >= noteCount - 1) continue; // assert for debug and skip otherwise + y1 = y + barYPos; + y2 = y + barYPos; + DrawObliquePolygon(dc, beamElementCoords->at(idx)->m_x, y1, + beamElementCoords->at(noteIndexes.at(i + 1))->m_x, y2, polygonHeight); + } + else if (beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] == PARTIAL_RIGHT) { + y1 = y + barYPos; + int x2 = beamElementCoords->at(idx)->m_x + fractBeamWidth; + y2 = y + barYPos + beamSegment->m_beamSlope * (x2 - beamElementCoords->at(0)->m_x); + DrawObliquePolygon(dc, beamElementCoords->at(idx)->m_x, y1, x2, y2, polygonHeight); + } + else if (beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] == PARTIAL_LEFT) { + y2 = y + barYPos; + int x1 = beamElementCoords->at(idx)->m_x - fractBeamWidth; + y1 = y + barYPos + beamSegment->m_beamSlope * (x1 - beamElementCoords->at(0)->m_x); + DrawObliquePolygon(dc, x1, y1, beamElementCoords->at(idx)->m_x, y2, polygonHeight); + } + } + + testDur += 1; + + } // end of while + } // end of drawing partial bars +} + } // namespace vrv From 62153688bb1db725668607d0d37bba7d9213185a Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 11 Jan 2022 18:14:12 +0100 Subject: [PATCH 034/403] Refactor beam drawing in tablature * Have specific CalcTabBeam and a common View::DrawBeamSegment --- include/vrv/beam.h | 7 +- include/vrv/drawinginterface.h | 1 + include/vrv/view.h | 6 -- src/beam.cpp | 52 +++++++-- src/drawinginterface.cpp | 1 + src/view_beam.cpp | 16 +-- src/view_tab.cpp | 191 --------------------------------- 7 files changed, 57 insertions(+), 217 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index a3cfad402d0..857fc454dc6 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -44,7 +44,9 @@ class BeamSegment { void Reset(); void CalcBeam(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, - data_BEAMPLACE place = BEAMPLACE_NONE, bool init = true, bool isTabBeam = false); + data_BEAMPLACE place = BEAMPLACE_NONE, bool init = true); + + void CalcTabBeam(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place); /** * @@ -79,8 +81,7 @@ class BeamSegment { // Helper to adjust beam positioning with regards to ledger lines (top and bottom of the staff) void AdjustBeamToLedgerLines(Doc *doc, Staff *staff, BeamDrawingInterface *beamInterface); - void CalcBeamInit(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place, - bool isTabBeam); + void CalcBeamInit(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place); bool CalcBeamSlope( Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, bool &shorten, int &step); diff --git a/include/vrv/drawinginterface.h b/include/vrv/drawinginterface.h index f99e32c126d..dd8eca9c700 100644 --- a/include/vrv/drawinginterface.h +++ b/include/vrv/drawinginterface.h @@ -156,6 +156,7 @@ class BeamDrawingInterface : public ObjectListInterface { int m_beamWidth; int m_beamWidthBlack; int m_beamWidthWhite; + int m_fractionSize; // position x for the stem (normal and cue-sized) int m_stemXAbove[2]; diff --git a/include/vrv/view.h b/include/vrv/view.h index 6c8aecb1748..7213268b7a2 100644 --- a/include/vrv/view.h +++ b/include/vrv/view.h @@ -602,12 +602,6 @@ class View { void DrawBeamSegment(DeviceContext *dc, BeamSegment *segment, BeamDrawingInterface *beamInterface, Layer *layer, Staff *staff, Measure *measure); - /** - * Internal method for drawing a BeamSegment in a tablature - */ - void DrawTabBeamSegment(DeviceContext *dc, BeamSegment *segment, BeamDrawingInterface *beamInterface, Layer *layer, - Staff *staff, Measure *measure); - public: /** Document */ Doc *m_doc; diff --git a/src/beam.cpp b/src/beam.cpp index 325245ea9af..866078356fb 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -81,8 +81,44 @@ void BeamSegment::InitCoordRefs(const ArrayOfBeamElementCoords *beamElementCoord m_beamElementCoordRefs = *beamElementCoords; } -void BeamSegment::CalcBeam(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, - data_BEAMPLACE place, bool init, bool isTabBeam) +void BeamSegment::CalcTabBeam( + Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place) +{ + assert(layer); + assert(staff); + assert(doc); + + // Calculate the y position of the beam - this currently need to be inline with the code in View::DrawTabGrp that + // draws the stems. + int glyphSize = staff->m_drawingStaffSize / TABLATURE_STAFF_RATIO; + beamInterface->m_fractionSize = glyphSize * 2 / 3; + int height = doc->GetGlyphHeight(SMUFL_EBA8_luteDurationHalf, glyphSize, true); + int y = staff->GetDrawingY() + height; + y += doc->GetDrawingUnit(staff->m_drawingStaffSize) * 1.5; + + assert(m_beamElementCoordRefs.size() > 0); + + // For recursive calls, avoid to re-init values + this->CalcBeamInit(layer, staff, doc, beamInterface, place); + + // Adjust the height and spacing of the beams + beamInterface->m_beamWidthBlack /= 2; + beamInterface->m_beamWidthWhite /= 2; + beamInterface->m_beamWidth = beamInterface->m_beamWidthBlack + beamInterface->m_beamWidthWhite; + + beamInterface->m_drawingPlace = (place == BEAMPLACE_below) ? BEAMPLACE_below : BEAMPLACE_above; + + for (auto coord : m_beamElementCoordRefs) { + // All notes and chords get their stem value stored + LayerElement *el = coord->m_element; + if (el->Is(TABGRP)) { + coord->m_yBeam = y; + } + } +} + +void BeamSegment::CalcBeam( + Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place, bool init) { assert(layer); assert(staff); @@ -93,10 +129,10 @@ void BeamSegment::CalcBeam(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInte // For recursive calls, avoid to re-init values if (init) { - this->CalcBeamInit(layer, staff, doc, beamInterface, place, isTabBeam); + this->CalcBeamInit(layer, staff, doc, beamInterface, place); } - if (isTabBeam) return; + beamInterface->m_fractionSize = staff->m_drawingStaffSize; bool horizontal = beamInterface->IsHorizontal(); @@ -115,7 +151,7 @@ void BeamSegment::CalcBeam(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInte CalcBeamPosition(doc, staff, layer, beamInterface, horizontal); if (BEAMPLACE_mixed == beamInterface->m_drawingPlace) { if (!beamInterface->m_crossStaffContent && NeedToResetPosition(staff, doc, beamInterface)) { - CalcBeamInit(layer, staff, doc, beamInterface, place, false); + CalcBeamInit(layer, staff, doc, beamInterface, place); CalcBeamStemLength(staff, beamInterface->m_drawingPlace, horizontal); CalcBeamPosition(doc, staff, layer, beamInterface, horizontal); } @@ -323,7 +359,7 @@ void BeamSegment::AdjustBeamToLedgerLines(Doc *doc, Staff *staff, BeamDrawingInt } void BeamSegment::CalcBeamInit( - Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place, bool isTabBeam) + Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place) { assert(layer); assert(staff); @@ -377,8 +413,6 @@ void BeamSegment::CalcBeamInit( m_firstNoteOrChord = NULL; m_lastNoteOrChord = NULL; - if (isTabBeam) return; - int yMax = m_verticalCenter; int yMin = m_verticalCenter; auto SetExtrema = [&yMax, &yMin](int currentY) { @@ -391,7 +425,7 @@ void BeamSegment::CalcBeamInit( BeamElementCoord *coord = m_beamElementCoordRefs.at(i); coord->m_yBeam = 0; - if (coord->m_element->Is({ CHORD, NOTE })) { + if (coord->m_element->Is({ CHORD, NOTE, TABGRP })) { if (!m_firstNoteOrChord) m_firstNoteOrChord = coord; m_lastNoteOrChord = coord; m_nbNotesOrChords++; diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index 8a6f29a0abc..141ce8a2bd7 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -81,6 +81,7 @@ void BeamDrawingInterface::Reset() m_beamHasChord = false; m_hasMultipleStemDir = false; m_cueSize = false; + m_fractionSize = 100; m_crossStaffContent = NULL; m_crossStaffRel = STAFFREL_basic_NONE; m_shortestDur = 0; diff --git a/src/view_beam.cpp b/src/view_beam.cpp index 483889621c3..2c1d0a21e84 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -58,7 +58,12 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf /******************************************************************/ // Calculate the beam slope and position - beam->m_beamSegment.CalcBeam(layer, beam->m_beamStaff, m_doc, beam, beam->GetPlace(), true, isTabBeam); + if (isTabBeam) { + beam->m_beamSegment.CalcTabBeam(layer, beam->m_beamStaff, m_doc, beam, beam->GetPlace()); + } + else { + beam->m_beamSegment.CalcBeam(layer, beam->m_beamStaff, m_doc, beam, beam->GetPlace()); + } /******************************************************************/ // Start the Beam graphic and draw the children @@ -73,12 +78,7 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf /******************************************************************/ // Draw the beamSegment - if (isTabBeam) { - DrawTabBeamSegment(dc, &beam->m_beamSegment, beam, layer, staff, measure); - } - else { - DrawBeamSegment(dc, &beam->m_beamSegment, beam, layer, staff, measure); - } + DrawBeamSegment(dc, &beam->m_beamSegment, beam, layer, staff, measure); dc->EndGraphic(element, this); } @@ -291,7 +291,7 @@ void View::DrawBeamSegment(DeviceContext *dc, BeamSegment *beamSegment, BeamDraw } int fractBeamWidth - = m_doc->GetGlyphWidth(SMUFL_E0A4_noteheadBlack, staff->m_drawingStaffSize, beamInterface->m_cueSize); + = m_doc->GetGlyphWidth(SMUFL_E0A4_noteheadBlack, beamInterface->m_fractionSize, beamInterface->m_cueSize); // loop while (testDur <= beamInterface->m_shortestDur) { diff --git a/src/view_tab.cpp b/src/view_tab.cpp index 9072e74402d..47dfe04c8d1 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -183,195 +183,4 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, dc->EndGraphic(tabDurSym, this); } -void View::DrawTabBeamSegment(DeviceContext *dc, BeamSegment *beamSegment, BeamDrawingInterface *beamInterface, - Layer *layer, Staff *staff, Measure *measure) -{ - assert(dc); - assert(beamSegment); - assert(beamInterface); - assert(layer); - assert(staff); - assert(measure); - - // temporary coordinates - int x1, x2, y1, y2; - - // temporary variables - int shiftY; - - // loops - int i; - - const ArrayOfBeamElementCoords *beamElementCoords = beamSegment->GetElementCoordRefs(); - - int elementCount = (int)beamElementCoords->size(); - int last = elementCount - 1; - - /******************************************************************/ - // Draw the beam full bar - - // Adjust the x position of the first and last element for taking into account the stem width - beamElementCoords->at(0)->m_x -= (m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; - beamElementCoords->at(last)->m_x += (m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; - - // Shift direction - shiftY = (beamInterface->m_drawingPlace == BEAMPLACE_below) ? 1.0 : -1.0; - - int glyphSize = staff->m_drawingStaffSize / TABLATURE_STAFF_RATIO; - int height = m_doc->GetGlyphHeight(SMUFL_EBA8_luteDurationHalf, glyphSize, true); - int y = staff->GetDrawingY() + height; - y += m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * 1.5; - - x1 = beamElementCoords->at(0)->m_x; - x2 = beamElementCoords->at(last)->m_x; - - // For acc and rit beam (see AttBeamingVis set - // s_y = 0 and s_y2 = 0 respectively - - const int polygonHeight = beamInterface->m_beamWidthBlack * shiftY / 2; - DrawObliquePolygon(dc, x1, y, x2, y, polygonHeight); - - /******************************************************************/ - // Draw the beam for partial bars (if any) - - // Map the indexes of the tabGrp since we need to ignore rests when drawing partials - // However, exception for the first and last element of a beam - std::vector noteIndexes; - for (i = 0; i < elementCount; ++i) { - if (beamElementCoords->at(i)->m_element->Is(REST)) - if (i > 0 && i < elementCount - 1) continue; - noteIndexes.push_back(i); - } - int noteCount = (int)noteIndexes.size(); - - if (noteCount > 0) { - int testDur = DUR_16; - int barY = beamInterface->m_beamWidth / 2; - - if (beamInterface->m_drawingPlace == BEAMPLACE_above) { - barY = -barY; - } - - int fractBeamWidth = m_doc->GetGlyphWidth(SMUFL_E0A4_noteheadBlack, glyphSize, beamInterface->m_cueSize); - - // loop - while (testDur <= beamInterface->m_shortestDur) { - // true at the beginning of a beam or after a breakSec - bool start = true; - - int idx = 0; - - // all but the last one - for (i = 0; i < noteCount - 1; ++i) { - idx = noteIndexes.at(i); - int nextIdx = noteIndexes.at(i + 1); - - bool breakSec = ((beamElementCoords->at(idx)->m_breaksec) - && (testDur - DUR_8 >= beamElementCoords->at(idx)->m_breaksec)); - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_NONE; - // partial is needed - if (beamElementCoords->at(idx)->m_dur >= (char)testDur) { - // and for the next one too, but no break - through - if ((beamElementCoords->at(nextIdx)->m_dur >= (char)testDur) && !breakSec) { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_THROUGH; - } - // not needed for the next one or break - else { - // we are starting a beam or after a beam break - put it right - if (start) { - if ((idx != 0) && (beamElementCoords->at(idx - 1)->m_element->Is(REST))) { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_LEFT; - } - else { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_RIGHT; - } - } - // or the previous one had no partial - else if (beamElementCoords->at(noteIndexes.at(i - 1))->m_dur < (char)testDur) { - // if we are at the full bar level, put it left - if (testDur == DUR_16) { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_LEFT; - } - // if the previous level underneath was a partial through, put it left - else if (beamElementCoords->at(noteIndexes.at(i - 1))->m_partialFlags[testDur - 1 - DUR_8] - == PARTIAL_THROUGH) { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_LEFT; - } - // if the level underneath was not left (right or through), put it right - else if (beamElementCoords->at(idx)->m_partialFlags[testDur - 1 - DUR_8] != PARTIAL_LEFT) { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_RIGHT; - } - // it was put left before, put it left - else { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_LEFT; - } - } - } - } - // we are not in a group - start = breakSec; - } - // last one - idx = (int)noteIndexes.back(); - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_NONE; - // partial is needed - if ((beamElementCoords->at(idx)->m_dur >= (char)testDur)) { - // and the previous one had no partial - put it left - if ((noteCount == 1) || (beamElementCoords->at(noteIndexes.at(i - 1))->m_dur < (char)testDur) - || start) { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_LEFT; - } - } - - barY = beamInterface->m_beamWidth * (testDur - DUR_8) / 2; - - // draw them - for (i = 0; i < noteCount; ++i) { - int barYPos = 0; - idx = noteIndexes.at(i); - if (BEAMPLACE_mixed == beamInterface->m_drawingPlace) { - int elemIndex = idx; - if (BEAMPLACE_NONE == beamElementCoords->at(idx)->m_partialFlagPlace) { - if ((0 == i) || ((noteCount - 1) == i) - || (beamElementCoords->at(noteIndexes.at(i - 1))->m_partialFlagPlace - != beamElementCoords->at(noteIndexes.at(i + 1))->m_partialFlagPlace)) { - continue; - } - elemIndex = i - 1; - } - barYPos - = barY * ((BEAMPLACE_above == beamElementCoords->at(elemIndex)->m_partialFlagPlace) ? 1 : -1); - } - else { - barYPos = shiftY * barY; - } - if (beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] == PARTIAL_THROUGH) { - // through should never be set on the last one - assert(i < noteCount - 1); - if (i >= noteCount - 1) continue; // assert for debug and skip otherwise - y1 = y + barYPos; - y2 = y + barYPos; - DrawObliquePolygon(dc, beamElementCoords->at(idx)->m_x, y1, - beamElementCoords->at(noteIndexes.at(i + 1))->m_x, y2, polygonHeight); - } - else if (beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] == PARTIAL_RIGHT) { - y1 = y + barYPos; - int x2 = beamElementCoords->at(idx)->m_x + fractBeamWidth; - y2 = y + barYPos + beamSegment->m_beamSlope * (x2 - beamElementCoords->at(0)->m_x); - DrawObliquePolygon(dc, beamElementCoords->at(idx)->m_x, y1, x2, y2, polygonHeight); - } - else if (beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] == PARTIAL_LEFT) { - y2 = y + barYPos; - int x1 = beamElementCoords->at(idx)->m_x - fractBeamWidth; - y1 = y + barYPos + beamSegment->m_beamSlope * (x1 - beamElementCoords->at(0)->m_x); - DrawObliquePolygon(dc, x1, y1, beamElementCoords->at(idx)->m_x, y2, polygonHeight); - } - } - - testDur += 1; - - } // end of while - } // end of drawing partial bars -} - } // namespace vrv From fe76b0666ffecf653d1c6635032e44cd72622687 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Wed, 12 Jan 2022 10:58:27 +0100 Subject: [PATCH 035/403] Check BBox existence and don't use note radii for tstamps --- src/layerelement.cpp | 4 +++- src/tie.cpp | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/layerelement.cpp b/src/layerelement.cpp index b1f288a4e5f..f7bb0fc4901 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -1947,7 +1947,9 @@ int LayerElement::AdjustXPos(FunctorParams *functorParams) [this](const std::pair &pair) { return pair.second == this; }); if (it != params->m_measureTieEndpoints.end()) { const int minTieLength = params->m_doc->GetOptions()->m_tieMinLength.GetValue() * drawingUnit; - const int currentTieLength = it->second->GetContentLeft() - it->first->GetContentRight() - drawingUnit; + const int leftXPos = it->first->HasContentBB() ? it->first->GetContentRight() : it->first->GetDrawingX(); + const int rightXPos = it->second->HasContentBB() ? it->second->GetContentLeft() : it->second->GetDrawingX(); + const int currentTieLength = rightXPos - leftXPos - drawingUnit; if ((currentTieLength < minTieLength) && ((it->first->GetFirstAncestor(CHORD) != NULL) || (this->GetFirstAncestor(CHORD) != NULL) || (it->first->FindDescendantByType(FLAG) != NULL))) { diff --git a/src/tie.cpp b/src/tie.cpp index 40b65c7feac..9f648f82a50 100644 --- a/src/tie.cpp +++ b/src/tie.cpp @@ -368,8 +368,8 @@ void Tie::CalculateXPosition(Doc *doc, Staff *staff, Chord *startParentChord, Ch isShortTie = true; } - int r1 = drawingUnit; - int r2 = r1; + int r1 = 0; + int r2 = 0; // the normal case if (spanningType == SPANNING_START_END) { if (startNote) { From e240623a410a5a06c8b256999972ddfab1888e7f Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 11 Jan 2022 07:49:20 +0100 Subject: [PATCH 036/403] Disable order check for syllables --- src/view_control.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/view_control.cpp b/src/view_control.cpp index 4bb7dcd93ce..7ac6663fd99 100644 --- a/src/view_control.cpp +++ b/src/view_control.cpp @@ -187,7 +187,7 @@ void View::DrawTimeSpanningElement(DeviceContext *dc, Object *element, System *s } } if (!start || !end) return; - if (!interface->IsOrdered(start, end)) { + if (!interface->IsOrdered(start, end) && !element->Is(SYL)) { // To avoid showing the same warning multiple times, display a warning only during actual drawing if (!dc->Is(BBOX_DEVICE_CONTEXT) && (m_currentPage == vrv_cast(start->GetFirstAncestor(PAGE)))) { LogWarning("%s '%s' is ignored, since start '%s' does not occur temporally before end '%s'.", From 49977baae7c8f8a496876c0c089d69786be1c744 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 11 Jan 2022 08:36:49 +0100 Subject: [PATCH 037/403] Handle multiple "syllabic" elements within MusicXML lyric --- src/iomusxml.cpp | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index 19b8d64ad9f..aa364e338d3 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -2778,14 +2778,16 @@ void MusicXmlInput::ReadMusicXmlNote( // verse->SetPlace(verse->AttPlacementRelStaff::StrToStaffrelBasic(lyric.attribute("placement").as_string())); verse->SetLabel(lyric.attribute("name").as_string()); verse->SetN(lyricNumber); - for (pugi::xml_node textNode : lyric.children("text")) { - if (!HasAttributeWithValue(lyric, "print-object", "no")) { + std::string syllabic = "single"; + for (pugi::xml_node childNode : lyric.children()) { + if (!strcmp(childNode.name(), "syllabic")) syllabic = GetContent(childNode); + if (!strcmp(childNode.name(), "text") && !HasAttributeWithValue(lyric, "print-object", "no")) { // const std::string textColor = textNode.attribute("color").as_string(); - const std::string textStyle = textNode.attribute("font-style").as_string(); - const std::string textWeight = textNode.attribute("font-weight").as_string(); - short int lineThrough = textNode.attribute("line-through").as_int(); - const std::string lang = textNode.attribute("xml:lang").as_string(); - std::string textStr = textNode.text().as_string(); + const std::string textStyle = childNode.attribute("font-style").as_string(); + const std::string textWeight = childNode.attribute("font-weight").as_string(); + int lineThrough = childNode.attribute("line-through").as_int(); + const std::string lang = childNode.attribute("xml:lang").as_string(); + std::string textStr = childNode.text().as_string(); // convert verse numbers to labels std::regex labelSearch("^([^[:alpha:]]*\\d[^[:alpha:]]*)$"); @@ -2793,7 +2795,7 @@ void MusicXmlInput::ReadMusicXmlNote( std::regex labelPrefixSearch("^([^[:alpha:]]*\\d[^[:alpha:]]*)[\\s\\u00A0]+"); std::smatch labelPrefixSearchMatches; if (!textStr.empty() && std::regex_search(textStr, labelSearchMatches, labelSearch) - && labelSearchMatches.ready() && textNode.next_sibling("elision")) { + && labelSearchMatches.ready() && childNode.next_sibling("elision")) { // entire textStr is a label (MusicXML from Finale) Label *label = new Label(); @@ -2822,25 +2824,25 @@ void MusicXmlInput::ReadMusicXmlNote( Syl *syl = new Syl(); syl->SetLang(lang.c_str()); - if (GetContentOfChild(lyric, "syllabic") == "single") { + if (syllabic == "single") { syl->SetWordpos(sylLog_WORDPOS_s); syl->SetCon(sylLog_CON_s); } - else if (GetContentOfChild(lyric, "syllabic") == "begin") { + else if (syllabic == "begin") { syl->SetWordpos(sylLog_WORDPOS_i); syl->SetCon(sylLog_CON_d); } - else if (GetContentOfChild(lyric, "syllabic") == "middle") { + else if (syllabic == "middle") { syl->SetWordpos(sylLog_WORDPOS_m); syl->SetCon(sylLog_CON_d); } - else if (GetContentOfChild(lyric, "syllabic") == "end") { + else if (syllabic == "end") { syl->SetWordpos(sylLog_WORDPOS_t); syl->SetCon(sylLog_CON_s); } // override @con if we have elisions or extensions - if (textNode.next_sibling("elision")) { + if (childNode.next_sibling("elision")) { syl->SetCon(sylLog_CON_b); } else if (lyric.child("extend")) { From b3a99202a7632bbeadcf5599f18a75458ee8e515 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 11 Jan 2022 14:24:52 +0100 Subject: [PATCH 038/403] Fix start and end at chords for syllables --- include/vrv/chord.h | 5 +++++ include/vrv/functorparams.h | 11 ++++++----- src/chord.cpp | 11 +++++++++++ src/doc.cpp | 4 ++-- src/note.cpp | 6 ++++-- src/syl.cpp | 6 +++--- 6 files changed, 31 insertions(+), 12 deletions(-) diff --git a/include/vrv/chord.h b/include/vrv/chord.h index e969abf5471..56431fc74d6 100644 --- a/include/vrv/chord.h +++ b/include/vrv/chord.h @@ -206,6 +206,11 @@ class Chord : public LayerElement, */ int PrepareLayerElementParts(FunctorParams *functorParams) override; + /** + * See Object::PrepareLyrics + */ + int PrepareLyrics(FunctorParams *functorParams) override; + /** * See Object::CalcOnsetOffsetEnd */ diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 1ed431d09b9..9a812203ce6 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1896,7 +1896,8 @@ class PrepareCrossStaffParams : public FunctorParams { /** * member 0: the current Syl - * member 1: the last Note + * member 1: the last Note or Chord + * member 2: the penultimate Note or Chord **/ class PrepareLyricsParams : public FunctorParams { @@ -1904,12 +1905,12 @@ class PrepareLyricsParams : public FunctorParams { PrepareLyricsParams() { m_currentSyl = NULL; - m_lastNote = NULL; - m_lastButOneNote = NULL; + m_lastNoteOrChord = NULL; + m_penultimateNoteOrChord = NULL; } Syl *m_currentSyl; - Note *m_lastNote; - Note *m_lastButOneNote; + LayerElement *m_lastNoteOrChord; + LayerElement *m_penultimateNoteOrChord; }; //---------------------------------------------------------------------------- diff --git a/src/chord.cpp b/src/chord.cpp index dc16eefa610..d9fcf865ab8 100644 --- a/src/chord.cpp +++ b/src/chord.cpp @@ -871,6 +871,17 @@ int Chord::PrepareLayerElementParts(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int Chord::PrepareLyrics(FunctorParams *functorParams) +{ + PrepareLyricsParams *params = vrv_params_cast(functorParams); + assert(params); + + params->m_penultimateNoteOrChord = params->m_lastNoteOrChord; + params->m_lastNoteOrChord = this; + + return FUNCTOR_CONTINUE; +} + int Chord::CalcOnsetOffsetEnd(FunctorParams *functorParams) { CalcOnsetOffsetParams *params = vrv_params_cast(functorParams); diff --git a/src/doc.cpp b/src/doc.cpp index 20f6dd4da51..21135df4731 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -1865,8 +1865,8 @@ int Doc::PrepareLyricsEnd(FunctorParams *functorParams) if (!params->m_currentSyl) { return FUNCTOR_STOP; // early return } - if (params->m_lastNote && (params->m_currentSyl->GetStart() != params->m_lastNote)) { - params->m_currentSyl->SetEnd(params->m_lastNote); + if (params->m_lastNoteOrChord && (params->m_currentSyl->GetStart() != params->m_lastNoteOrChord)) { + params->m_currentSyl->SetEnd(params->m_lastNoteOrChord); } else if (m_options->m_openControlEvents.GetValue()) { sylLog_WORDPOS wordpos = params->m_currentSyl->GetWordpos(); diff --git a/src/note.cpp b/src/note.cpp index b25d53c04f2..395a5d8c192 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -1273,8 +1273,10 @@ int Note::PrepareLyrics(FunctorParams *functorParams) PrepareLyricsParams *params = vrv_params_cast(functorParams); assert(params); - params->m_lastButOneNote = params->m_lastNote; - params->m_lastNote = this; + if (!this->IsChordTone()) { + params->m_penultimateNoteOrChord = params->m_lastNoteOrChord; + params->m_lastNoteOrChord = this; + } return FUNCTOR_CONTINUE; } diff --git a/src/syl.cpp b/src/syl.cpp index f3b72721cdf..7ec4c26d194 100644 --- a/src/syl.cpp +++ b/src/syl.cpp @@ -150,16 +150,16 @@ int Syl::PrepareLyrics(FunctorParams *functorParams) // The previous syl was an initial or median -> The note we just parsed is the end if ((params->m_currentSyl->GetWordpos() == sylLog_WORDPOS_i) || (params->m_currentSyl->GetWordpos() == sylLog_WORDPOS_m)) { - params->m_currentSyl->SetEnd(params->m_lastNote); + params->m_currentSyl->SetEnd(params->m_lastNoteOrChord); params->m_currentSyl->m_nextWordSyl = this; } // The previous syl was a underscore -> the previous but one was the end else if (params->m_currentSyl->GetCon() == sylLog_CON_u) { - if (params->m_currentSyl->GetStart() == params->m_lastButOneNote) + if (params->m_currentSyl->GetStart() == params->m_penultimateNoteOrChord) LogWarning("Syllable with underline extender under one single note '%s'", params->m_currentSyl->GetStart()->GetUuid().c_str()); else - params->m_currentSyl->SetEnd(params->m_lastButOneNote); + params->m_currentSyl->SetEnd(params->m_penultimateNoteOrChord); } } From b168c2979e3941258405a27d61a816512a53cdf5 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Wed, 12 Jan 2022 11:53:05 +0100 Subject: [PATCH 039/403] Add const --- src/iomusxml.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index aa364e338d3..ed014c1be53 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -2785,7 +2785,7 @@ void MusicXmlInput::ReadMusicXmlNote( // const std::string textColor = textNode.attribute("color").as_string(); const std::string textStyle = childNode.attribute("font-style").as_string(); const std::string textWeight = childNode.attribute("font-weight").as_string(); - int lineThrough = childNode.attribute("line-through").as_int(); + const int lineThrough = childNode.attribute("line-through").as_int(); const std::string lang = childNode.attribute("xml:lang").as_string(); std::string textStr = childNode.text().as_string(); From 4a0e1afd8a001a6928e7758e68841a8776df47a9 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Wed, 12 Jan 2022 12:27:34 +0100 Subject: [PATCH 040/403] Resolve rebase conflict --- src/iomusxml.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index ed014c1be53..f7c673e11f2 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -2785,7 +2785,7 @@ void MusicXmlInput::ReadMusicXmlNote( // const std::string textColor = textNode.attribute("color").as_string(); const std::string textStyle = childNode.attribute("font-style").as_string(); const std::string textWeight = childNode.attribute("font-weight").as_string(); - const int lineThrough = childNode.attribute("line-through").as_int(); + const short int lineThrough = childNode.attribute("line-through").as_int(); const std::string lang = childNode.attribute("xml:lang").as_string(); std::string textStr = childNode.text().as_string(); From 901621dba61827033047215b2d7a4476d11ec79e Mon Sep 17 00:00:00 2001 From: Paul Overell Date: Wed, 12 Jan 2022 11:55:29 +0000 Subject: [PATCH 041/403] Implement MIDI for tablature --- include/vrv/functorparams.h | 9 +++++ src/note.cpp | 38 ++++++++++++++++++-- src/staff.cpp | 12 +++++++ src/tuning.cpp | 69 ++++++++++++++++++++++++++++++------- 4 files changed, 113 insertions(+), 15 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 1ed431d09b9..8723ca523c3 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1534,6 +1534,14 @@ struct MIDINote { using MIDINoteSequence = std::list; +/** + * Helper struct for held notes in tablature + */ +struct MIDIHeldNote { + char m_pitch = 0; + double m_stoptime = 0; +}; + /** * member 0: MidiFile*: the MidiFile we are writing to * member 1: int: the midi track number @@ -1563,6 +1571,7 @@ class GenerateMIDIParams : public FunctorParams { double m_currentTempo; std::map m_expandedNotes; Functor *m_functor; + std::vector m_heldNotes; ///< Tablature held notes indexed by (course - 1) }; //---------------------------------------------------------------------------- diff --git a/src/note.cpp b/src/note.cpp index 31147a6dc57..c610040dbd9 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -1361,8 +1361,42 @@ int Note::GenerateMIDI(FunctorParams *functorParams) this->CalcMIDIPitch(params->m_transSemi); char pitch = this->GetMIDIPitch(); - params->m_midiFile->addNoteOn(params->m_midiTrack, starttime * tpq, channel, pitch, velocity); - params->m_midiFile->addNoteOff(params->m_midiTrack, stoptime * tpq, channel, pitch); + if (this->HasTabCourse() && this->GetTabCourse() >= 1) { + // Tablature 'rule of holds'. A note on a course is held until the next note + // on that course is required, or until a default hold duration is reached. + + const int course = this->GetTabCourse(); + if (params->m_heldNotes.size() < static_cast(course)) + params->m_heldNotes.resize(course); // make room + + // if a previously held note on this course is already sounding, end it now. + if (params->m_heldNotes[course - 1].m_pitch > 0) + params->m_heldNotes[course - 1].m_stoptime = starttime; // stop now + + // end all previously held notes that have reached their stoptime + for (auto &held : params->m_heldNotes) { + if (held.m_pitch > 0 && held.m_stoptime <= starttime) { + params->m_midiFile->addNoteOff(params->m_midiTrack, held.m_stoptime * tpq, channel, held.m_pitch); + held.m_pitch = 0; + held.m_stoptime = 0; + } + } + + // start this note + params->m_midiFile->addNoteOn(params->m_midiTrack, starttime * tpq, channel, pitch, velocity); + + // hold this note until the greater of its rhythm sign and the default duration. + // TODO optimize the default hold duration + const double defaultHoldTime = 4; // quarter notes + params->m_heldNotes[course - 1].m_pitch = pitch; + params->m_heldNotes[course - 1].m_stoptime = params->m_totalTime + + std::max(defaultHoldTime, this->GetScoreTimeOffset() + this->GetScoreTimeTiedDuration()); + } + else { + const double stoptime = params->m_totalTime + this->GetScoreTimeOffset() + this->GetScoreTimeTiedDuration(); + params->m_midiFile->addNoteOn(params->m_midiTrack, starttime * tpq, channel, pitch, velocity); + params->m_midiFile->addNoteOff(params->m_midiTrack, stoptime * tpq, channel, pitch); + } } return FUNCTOR_SIBLINGS; diff --git a/src/staff.cpp b/src/staff.cpp index e9e4b883b3e..50cbfba9df3 100644 --- a/src/staff.cpp +++ b/src/staff.cpp @@ -33,6 +33,8 @@ #include "vrv.h" #include "zone.h" +#include "MidiFile.h" + namespace vrv { //---------------------------------------------------------------------------- @@ -713,6 +715,16 @@ int Staff::GenerateMIDI(FunctorParams *functorParams) params->m_expandedNotes.clear(); + // Tablature: end any remaining held notes + for (auto &held : params->m_heldNotes) { + if (held.m_pitch > 0) { + params->m_midiFile->addNoteOff(params->m_midiTrack, held.m_stoptime * params->m_midiFile->getTPQ(), + params->m_midiChannel, held.m_pitch); + } + } + + params->m_heldNotes.clear(); + return FUNCTOR_CONTINUE; } diff --git a/src/tuning.cpp b/src/tuning.cpp index aa4ebf05c6d..b84bbaf50c4 100644 --- a/src/tuning.cpp +++ b/src/tuning.cpp @@ -108,29 +108,72 @@ int Tuning::CalcPitchNumber(int course, int fret, data_NOTATIONTYPE notationType } // no specified, fall back to @tuning.standard - // TODO what other values for @tuning.standard will there be? - // E4 B3 G3 D3 A2 E2 - static const int guitarPitch[] = { 64, 59, 55, 50, 45, 40 }; // modern guitar + // modern guitar E4 B3 G3 D3 A2 E2 + static const int guitarStandardPitch[] = { 64, 59, 55, 50, 45, 40 }; - // E4 B3 G3 D3 A2 D2 - static const int guitarDropDPitch[] = { 64, 59, 55, 50, 45, 38 }; // modern guitar drop D + // modern guitar drop D E4 B3 G3 D3 A2 D2 + static const int guitarDropDPitch[] = { 64, 59, 55, 50, 45, 38 }; - // G4 D4 A3 F3 C3 G2 - static const int lutePitch[] = { 67, 62, 57, 53, 48, 43 }; // 6 course renaissance lute + // modern guitar open D D4 A3 F#3 D3 A2 D2 + static const int guitarOpenDPitch[] = { 62, 57, 54, 50, 45, 38 }; + + // modern guitar open G D4 B3 G3 D3 G2 D2 + static const int guitarOpenGPitch[] = { 62, 59, 55, 50, 43, 38 }; + + // modern guitar open A E4 C#4 A3 E3 A2 E2 + static const int guitarOpenAPitch[] = { 64, 61, 57, 52, 45, 40 }; + + // 6 course renaissance lute G4 D4 A3 F3 C3 G2 + static const int luteRenaissance6Pitch[] = { 67, 62, 57, 53, 48, 43 }; + + // baroque lute D major F#4 D4 A3 F#3 D3 A2 G2 F#2 E2 D2 C#2 B1 A1 + static const int luteBaroqueDMajor[] = { 66, 62, 57, 54, 50, 45, 43, 42, 40, 38, 37, 35, 33 }; + + // baroque lute D minor F4 D4 A3 F3 D3 A2 G2 F2 E2 D2 C2 B1 A1 + static const int luteBaroqueDMinor[] = { 65, 62, 57, 53, 50, 45, 43, 41, 40, 38, 36, 35, 33 }; const int *pitch = nullptr; int pitchSize = 0; switch (GetTuningStandard()) { + case COURSETUNING_guitar_standard: + pitch = guitarStandardPitch; + pitchSize = sizeof(guitarStandardPitch); + break; case COURSETUNING_guitar_drop_D: pitch = guitarDropDPitch; pitchSize = sizeof(guitarDropDPitch); break; + case COURSETUNING_guitar_open_D: + pitch = guitarOpenDPitch; + pitchSize = sizeof(guitarOpenDPitch); + break; + + case COURSETUNING_guitar_open_G: + pitch = guitarOpenGPitch; + pitchSize = sizeof(guitarOpenGPitch); + break; + + case COURSETUNING_guitar_open_A: + pitch = guitarOpenAPitch; + pitchSize = sizeof(guitarOpenAPitch); + break; + case COURSETUNING_lute_renaissance_6: - pitch = lutePitch; - pitchSize = sizeof(lutePitch); + pitch = luteRenaissance6Pitch; + pitchSize = sizeof(luteRenaissance6Pitch); + break; + + case COURSETUNING_lute_baroque_d_major: + pitch = luteBaroqueDMajor; + pitchSize = sizeof(luteBaroqueDMajor); + break; + + case COURSETUNING_lute_baroque_d_minor: + pitch = luteBaroqueDMinor; + pitchSize = sizeof(luteBaroqueDMinor); break; case COURSETUNING_NONE: [[fallthrough]]; @@ -141,13 +184,13 @@ int Tuning::CalcPitchNumber(int course, int fret, data_NOTATIONTYPE notationType if (notationType == NOTATIONTYPE_tab_lute_french || notationType == NOTATIONTYPE_tab_lute_italian || notationType == NOTATIONTYPE_tab_lute_german) { // lute tablature, assume 6 course renaissance lute - pitch = lutePitch; - pitchSize = sizeof(lutePitch); + pitch = luteRenaissance6Pitch; + pitchSize = sizeof(luteRenaissance6Pitch); } else { // assume modern guitar - pitch = guitarPitch; - pitchSize = sizeof(guitarPitch); + pitch = guitarStandardPitch; + pitchSize = sizeof(guitarStandardPitch); } break; } From 8b9a2e59545d23a8df8ec8834aa60f5e4ee808a2 Mon Sep 17 00:00:00 2001 From: Paul Overell Date: Wed, 12 Jan 2022 12:47:31 +0000 Subject: [PATCH 042/403] Implement MusicXML tablature import. --- include/vrv/iomusxml.h | 7 + src/iomusxml.cpp | 338 ++++++++++++++++++++++++++++++++--------- 2 files changed, 271 insertions(+), 74 deletions(-) diff --git a/include/vrv/iomusxml.h b/include/vrv/iomusxml.h index e4c91917145..4fec151ccd6 100644 --- a/include/vrv/iomusxml.h +++ b/include/vrv/iomusxml.h @@ -430,6 +430,13 @@ class MusicXmlInput : public Input { static std::string ConvertFigureGlyph(const std::string &value); ///@} + /* + * @name Methods for converting between MusicXML and MIDI note numbers. + */ + ///@{ + static int PitchToMidi(const std::string &step, int alter, int octave); + static void MidiToPitch(int midi, std::string &step, int &alter, int &octave); + ///@} private: /* octave offset */ std::vector m_octDis; diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index 5c412915235..01edd1d68ad 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -26,6 +26,7 @@ #include "chord.h" #include "clef.h" #include "comparison.h" +#include "course.h" #include "dir.h" #include "doc.h" #include "dynam.h" @@ -73,10 +74,13 @@ #include "staffdef.h" #include "staffgrp.h" #include "syl.h" +#include "tabdursym.h" +#include "tabgrp.h" #include "tempo.h" #include "text.h" #include "tie.h" #include "trill.h" +#include "tuning.h" #include "tuplet.h" #include "turn.h" #include "verse.h" @@ -314,7 +318,7 @@ void MusicXmlInput::InsertClefIntoObject( } else { Object *parent = layerElement->GetParent(); - if (parent->Is({ CHORD, FTREM })) { + if (parent->Is({ CHORD, FTREM, TABGRP })) { InsertClefIntoObject(parent->GetParent(), clef, parent, insertAfter); } else { @@ -1270,7 +1274,11 @@ int MusicXmlInput::ReadMusicXmlPartAttributesAsStaffDef(pugi::xml_node node, Sta if (nbStaves > 1) clef.node().remove_attribute("id"); } Clef *meiClef = ConvertClef(clef.node()); - if (meiClef) staffDef->AddChild(meiClef); + if (meiClef) { + staffDef->AddChild(meiClef); + // if TAB assume guitar tablature until we examine , if any + if (meiClef->GetShape() == CLEFSHAPE_TAB) staffDef->SetNotationtype(NOTATIONTYPE_tab_guitar); + } // key sig xpath = StringFormat("key[@number='%d']", i + 1); @@ -1302,9 +1310,69 @@ int MusicXmlInput::ReadMusicXmlPartAttributesAsStaffDef(pugi::xml_node node, Sta if (!scaleStr.empty()) { staffDef->SetScale(staffDef->AttScalable::StrToPercent(scaleStr + "%")); } - pugi::xpath_node staffTuning = staffDetails.node().select_node("staff-tuning"); - if (staffTuning) { - staffDef->SetNotationtype(NOTATIONTYPE_tab); + // Tablature? + if (staffDetails.node().child("staff-tuning") || staffDef->GetNotationtype() == NOTATIONTYPE_tab_guitar) { + // tablature type. MusicXML does not support German tablature. + if (HasAttributeWithValue(staffDetails.node(), "show-frets", "letters")) { + staffDef->SetNotationtype(NOTATIONTYPE_tab_lute_french); + } + else { + // Frets are notated with numbers. + // Italian tablature if the top staff line has a lower pitch than the bottom line + // else guitar tablature. + pugi::xml_node topLine = staffDetails.node().find_child_by_attribute( + "staff-tuning", "line", std::to_string(staffLines).c_str()); + pugi::xml_node botLine = staffDetails.node().find_child_by_attribute("staff-tuning", "line", "1"); + if (topLine && botLine + && PitchToMidi(topLine.child("tuning-step").text().as_string(), + topLine.child("tuning-alter").text().as_int(), + topLine.child("tuning-octave").text().as_int()) + < PitchToMidi(botLine.child("tuning-step").text().as_string(), + botLine.child("tuning-alter").text().as_int(), + botLine.child("tuning-octave").text().as_int())) { + staffDef->SetNotationtype(NOTATIONTYPE_tab_lute_italian); + } + else { + staffDef->SetNotationtype(NOTATIONTYPE_tab_guitar); + } + } + + // MusicXML specifies the tuning of the staff rather than the instrument, + // but this will at least give the tuning of some of the courses. + // For French tablature MusicXML ought to allow zero and negative values + // of @line to give the tuning for diapasons: 0 => 7, -1 => 8 etc. But it doesn't. + // However, we can add the tuning of diapasons as we encounter them in s. + Tuning *tuning = new Tuning(); + staffDef->AddChild(tuning); + + for (pugi::xml_node staffTuning : staffDetails.node().children("staff-tuning")) { + Course *courseTuning = new Course(); + tuning->AddChild(courseTuning); + + const int line = staffTuning.attribute("line").as_int(); + const std::string stepStr = staffTuning.child("tuning-step").text().as_string(); + const int alterNum = staffTuning.child("tuning-alter").text().as_int(); + const int octaveNum = staffTuning.child("tuning-octave").text().as_int(); + + if (staffDef->GetNotationtype() == NOTATIONTYPE_tab_lute_italian) { + // Italian tablature, line 1 is course 1 + courseTuning->SetN(std::to_string(line)); + } + else { + // guitar and French tablature, line 1 is course = staffLines (typically 6) + courseTuning->SetN(std::to_string(staffLines - line + 1)); + } + courseTuning->SetPname(ConvertStepToPitchName(stepStr)); + courseTuning->SetOct(octaveNum); + + if (alterNum != 0) { + static_assert( + static_cast(ACCIDENTAL_WRITTEN_f) == static_cast(ACCIDENTAL_GESTURAL_f)); + static_assert( + static_cast(ACCIDENTAL_WRITTEN_s) == static_cast(ACCIDENTAL_GESTURAL_s)); + courseTuning->SetAccid(static_cast(ConvertAlterToAccid(alterNum))); + } + } } // time @@ -2438,6 +2506,20 @@ void MusicXmlInput::ReadMusicXmlNote( Staff *staff = vrv_cast(layer->GetFirstAncestor(STAFF)); assert(staff); + // find staff's staffDef + // TODO Tablature: is this the correct way to find a staff's staffDef? + AttNIntegerComparison cnc(STAFFDEF, staff->GetN()); + StaffDef *staffDef = vrv_cast(m_doc->GetCurrentScoreDef()->FindDescendantByComparison(&cnc)); + bool isTablature = false; + Tuning *tuning = NULL; + + if (staffDef) { + tuning = vrv_cast(staffDef->FindDescendantByType(TUNING)); + const data_NOTATIONTYPE notationType = staffDef->GetNotationtype(); + isTablature = (notationType == NOTATIONTYPE_tab || notationType == NOTATIONTYPE_tab_guitar + || notationType == NOTATIONTYPE_tab_lute_italian || notationType == NOTATIONTYPE_tab_lute_french + || notationType == NOTATIONTYPE_tab_lute_german); + } bool isChord = node.child("chord"); @@ -2468,43 +2550,49 @@ void MusicXmlInput::ReadMusicXmlNote( const std::string typeStr = node.child("type").text().as_string(); const int dots = (int)node.select_nodes("dot").size(); - ReadMusicXmlBeamsAndTuplets(node, layer, isChord); - - // beam start - bool beamStart = node.select_node("beam[@number='1'][text()='begin']"); - // tremolos - pugi::xpath_node tremolo = notations.node().select_node("ornaments/tremolo"); int tremSlashNum = -1; - if (tremolo) { - if (HasAttributeWithValue(tremolo.node(), "type", "start")) { - if (!isChord) { - FTrem *fTrem = new FTrem(); - AddLayerElement(layer, fTrem); - m_elementStackMap.at(layer).push_back(fTrem); - int beamFloatNum = tremolo.node().text().as_int(); // number of floating beams - int beamAttachedNum = 0; // number of attached beams - while (beamStart && beamAttachedNum < 8) { // count number of (attached) beams, max 8 - std::ostringstream o; - o << "beam[@number='" << ++beamAttachedNum + 1 << "'][text()='begin']"; - beamStart = node.select_node(o.str().c_str()); - } - fTrem->SetBeams(beamFloatNum + beamAttachedNum); - fTrem->SetBeamsFloat(beamFloatNum); - } - } - else if (!HasAttributeWithValue(tremolo.node(), "type", "stop")) { - // this is default tremolo type in MusicXML - tremSlashNum = tremolo.node().text().as_int(); - if (!isChord) { - BTrem *bTrem = new BTrem(); - AddLayerElement(layer, bTrem); - m_elementStackMap.at(layer).push_back(bTrem); - if (HasAttributeWithValue(tremolo.node(), "type", "unmeasured")) { - bTrem->SetForm(bTremLog_FORM_unmeas); - tremSlashNum = 0; + pugi::xpath_node tremolo; + + // TODO Tablature: support beams and tuplets. Neither nor support child . + if (!isTablature) { + ReadMusicXmlBeamsAndTuplets(node, layer, isChord); + + // beam start + bool beamStart = node.select_node("beam[@number='1'][text()='begin']"); + // tremolos + tremolo = notations.node().select_node("ornaments/tremolo"); + + if (tremolo) { + if (HasAttributeWithValue(tremolo.node(), "type", "start")) { + if (!isChord) { + FTrem *fTrem = new FTrem(); + AddLayerElement(layer, fTrem); + m_elementStackMap.at(layer).push_back(fTrem); + int beamFloatNum = tremolo.node().text().as_int(); // number of floating beams + int beamAttachedNum = 0; // number of attached beams + while (beamStart && beamAttachedNum < 8) { // count number of (attached) beams, max 8 + std::ostringstream o; + o << "beam[@number='" << ++beamAttachedNum + 1 << "'][text()='begin']"; + beamStart = node.select_node(o.str().c_str()); + } + fTrem->SetBeams(beamFloatNum + beamAttachedNum); + fTrem->SetBeamsFloat(beamFloatNum); } - else { - bTrem->SetForm(bTremLog_FORM_meas); + } + else if (!HasAttributeWithValue(tremolo.node(), "type", "stop")) { + // this is default tremolo type in MusicXML + tremSlashNum = tremolo.node().text().as_int(); + if (!isChord) { + BTrem *bTrem = new BTrem(); + AddLayerElement(layer, bTrem); + m_elementStackMap.at(layer).push_back(bTrem); + if (HasAttributeWithValue(tremolo.node(), "type", "unmeasured")) { + bTrem->SetForm(bTremLog_FORM_unmeas); + tremSlashNum = 0; + } + else { + bTrem->SetForm(bTremLog_FORM_meas); + } } } } @@ -2564,23 +2652,35 @@ void MusicXmlInput::ReadMusicXmlNote( } } else { - Rest *rest = new Rest(); - element = rest; - rest->SetColor(node.attribute("color").as_string()); - rest->SetDur(ConvertTypeToDur(typeStr)); - rest->SetDurPpq(duration); - if (dots > 0) rest->SetDots(dots); - if (cue) rest->SetCue(BOOLEAN_true); - if (!stepStr.empty()) rest->SetPloc(ConvertStepToPitchName(stepStr)); - if (!octaveStr.empty()) rest->SetOloc(atoi(octaveStr.c_str())); - if (!noteID.empty()) { - rest->SetUuid(noteID); - } - // set @staff attribute, if existing and different from parent staff number - if (noteStaffNum > 0 && noteStaffNum + staffOffset != staff->GetN()) - rest->SetStaff( - rest->AttStaffIdent::StrToXsdPositiveIntegerList(std::to_string(noteStaffNum + staffOffset))); - AddLayerElement(layer, rest, duration); + if (isTablature) { + // rest + TabGrp *tabGrp = new TabGrp(); + element = tabGrp; + tabGrp->SetDur(ConvertTypeToDur(typeStr)); + tabGrp->SetDurPpq(duration); + if (dots > 0) tabGrp->SetDots(dots); + tabGrp->AddChild(new TabDurSym()); + AddLayerElement(layer, tabGrp, duration); + } + else { + Rest *rest = new Rest(); + element = rest; + rest->SetColor(node.attribute("color").as_string()); + rest->SetDur(ConvertTypeToDur(typeStr)); + rest->SetDurPpq(duration); + if (dots > 0) rest->SetDots(dots); + if (cue) rest->SetCue(BOOLEAN_true); + if (!stepStr.empty()) rest->SetPloc(ConvertStepToPitchName(stepStr)); + if (!octaveStr.empty()) rest->SetOloc(atoi(octaveStr.c_str())); + if (!noteID.empty()) { + rest->SetUuid(noteID); + } + // set @staff attribute, if existing and different from parent staff number + if (noteStaffNum > 0 && noteStaffNum + staffOffset != staff->GetN()) + rest->SetStaff( + rest->AttStaffIdent::StrToXsdPositiveIntegerList(std::to_string(noteStaffNum + staffOffset))); + AddLayerElement(layer, rest, duration); + } } } else { @@ -2635,9 +2735,9 @@ void MusicXmlInput::ReadMusicXmlNote( stemDir = STEMDIRECTION_up; } - // pitch and octave + // pitch and octave, optional, not needed for tablature pugi::xml_node pitch = node.child("pitch"); - if (pitch) { + if (pitch && !isTablature) { const std::string stepStr = pitch.child("step").text().as_string(); const std::string alterStr = pitch.child("alter").text().as_string(); const int octaveNum = pitch.child("octave").text().as_int(); @@ -2685,7 +2785,21 @@ void MusicXmlInput::ReadMusicXmlNote( pugi::xpath_node nextNote = node.select_node("./following-sibling::note"); if (nextNote.node().child("chord")) nextIsChord = true; Chord *chord = NULL; - if (nextIsChord) { + TabGrp *tabGrp = NULL; + if (isTablature) { + // create the tabGrp if we are starting a new tabGrp + if (m_elementStackMap.at(layer).empty() || !m_elementStackMap.at(layer).back()->Is(TABGRP)) { + tabGrp = new TabGrp(); + tabGrp->SetDur(ConvertTypeToDur(typeStr)); + tabGrp->SetDurPpq(duration); + if (dots > 0) tabGrp->SetDots(dots); + tabGrp->AddChild(new TabDurSym()); + AddLayerElement(layer, tabGrp, duration); + m_elementStackMap.at(layer).push_back(tabGrp); + element = tabGrp; + } + } + else if (nextIsChord) { // create the chord if we are starting a new chord if (m_elementStackMap.at(layer).empty() || !m_elementStackMap.at(layer).back()->Is(CHORD)) { chord = new Chord(); @@ -2716,7 +2830,7 @@ void MusicXmlInput::ReadMusicXmlNote( } } // If the current note is part of a chord. - if (nextIsChord || node.child("chord")) { + if (!isTablature && (nextIsChord || node.child("chord"))) { if (chord == NULL && m_elementStackMap.at(layer).size() > 0 && m_elementStackMap.at(layer).back()->Is(CHORD)) { chord = dynamic_cast(m_elementStackMap.at(layer).back()); @@ -2749,7 +2863,7 @@ void MusicXmlInput::ReadMusicXmlNote( if (cue) note->SetCue(BOOLEAN_true); // set attributes to the note if we are not in a chord - if (m_elementStackMap.at(layer).empty() || !m_elementStackMap.at(layer).back()->Is(CHORD)) { + if (!isTablature && (m_elementStackMap.at(layer).empty() || !m_elementStackMap.at(layer).back()->Is(CHORD))) { if (!typeStr.empty()) note->SetDur(ConvertTypeToDur(typeStr)); note->SetDurPpq(duration); if (dots > 0) note->SetDots(dots); @@ -2864,6 +2978,7 @@ void MusicXmlInput::ReadMusicXmlNote( verse->AddChild(syl); } } + // TODO Tablature: does not support child if (element->Is(CHORD) || element->Is(NOTE)) { element->AddChild(verse); } @@ -2933,13 +3048,61 @@ void MusicXmlInput::ReadMusicXmlNote( // technical for (pugi::xml_node technical : notations.node().children("technical")) { - // fingering is handled on the same level as breath marks, dynamics, etc. so we skip it here - if (technical.child("fingering")) continue; - if (technical.child("fret")) { - // set @tab.string and @tab.fret - } - else { - for (pugi::xml_node articulation : technical.children()) { + for (pugi::xml_node technicalChild : technical.children()) { + const std::string technicalChildName = technicalChild.name(); + + // fingering is handled on the same level as breath marks, dynamics, etc. so we skip it here + if (technicalChildName == "fingering") continue; + if (technicalChildName == "string") continue; // handled with fret + + if (technicalChildName == "fret") { + assert(isTablature); + + // set @tab.string and @tab.fret + const int fret = technicalChild.text().as_int(); + const int course = technical.child("string").text().as_int(); + note->SetTabFret(fret); + note->SetTabCourse(course); + + // Do we have the pitch for this note, if so do we have the tuning for this course? + pugi::xml_node pitch = node.child("pitch"); + if (tuning && pitch) { + AttNNumberLikeComparison cnc(COURSE, std::to_string(course)); + Course *courseTuning = vrv_cast(tuning->FindDescendantByComparison(&cnc)); + + if (!courseTuning) { + // we have the note's pitch, but not the course's tuning, set it + + const int midi = PitchToMidi(pitch.child("step").text().as_string(), + pitch.child("alter").text().as_int(), + pitch.child("octave").text().as_int()); // note's midi note number + + // course's pitch + std::string stepStr; + int alterNum = 0; + int octaveNum = 0; + MidiToPitch(midi - fret, stepStr, alterNum, octaveNum); + + courseTuning = new Course(); + tuning->AddChild(courseTuning); + + courseTuning->SetN(std::to_string(course)); + courseTuning->SetPname(ConvertStepToPitchName(stepStr)); + courseTuning->SetOct(octaveNum); + + if (alterNum != 0) { + static_assert( + static_cast(ACCIDENTAL_WRITTEN_f) == static_cast(ACCIDENTAL_GESTURAL_f)); + static_assert( + static_cast(ACCIDENTAL_WRITTEN_s) == static_cast(ACCIDENTAL_GESTURAL_s)); + courseTuning->SetAccid( + static_cast(ConvertAlterToAccid(alterNum))); + } + } + } + } + else { + pugi::xml_node articulation = technicalChild; Artic *artic = new Artic(); artics.push_back(ConvertArticulations(articulation.name())); if (artics.back() == ARTICULATION_NONE) { @@ -2960,12 +3123,13 @@ void MusicXmlInput::ReadMusicXmlNote( // add the note to the layer or to the current container AddLayerElement(layer, note, duration); - // if we are ending a chord remove it from the stack + // if we are ending a chord or tabGrp remove it from the stack if (!nextIsChord) { - if (!m_elementStackMap.at(layer).empty() && m_elementStackMap.at(layer).back()->Is(CHORD)) { + const ClassId classId = isTablature ? TABGRP : CHORD; + if (!m_elementStackMap.at(layer).empty() && m_elementStackMap.at(layer).back()->Is(classId)) { SetChordStaff(layer); - RemoveLastFromStack(CHORD, layer); + RemoveLastFromStack(classId, layer); } } } @@ -3055,8 +3219,8 @@ void MusicXmlInput::ReadMusicXmlNote( pugi::xpath_node_set glissandi = notations.node().select_nodes("glissando|slide"); for (pugi::xpath_node_set::const_iterator it = glissandi.begin(); it != glissandi.end(); ++it) { std::string noteID = m_ID; - // prevent from using chords - if (element->Is(CHORD)) noteID = "#" + element->GetChild(0)->GetUuid(); + // prevent from using chords or tabGrps + if (element->Is(CHORD) || element->Is(TABGRP)) noteID = "#" + element->GetChild(0)->GetUuid(); pugi::xml_node xmlGlissando = it->node(); if (HasAttributeWithValue(xmlGlissando, "type", "start")) { Gliss *gliss = new Gliss(); @@ -3313,6 +3477,7 @@ void MusicXmlInput::ReadMusicXmlNote( Chord *chord = dynamic_cast(element); chord->SetBreaksec(breakSec); } + // TODO Tablature: support beams, does not support child } else { RemoveLastFromStack(BEAM, layer); @@ -4386,6 +4551,31 @@ void MusicXmlInput::SetChordStaff(Layer *layer) }); } +int MusicXmlInput::PitchToMidi(const std::string &step, int alter, int octave) +{ + if (step.empty() || step[0] < 'A' || step[0] > 'G') return 0; + + // Distance in semitones from the octave's starting C to the given step + // A B C D E F G + static const int octaveStart[] = { 9, 11, 0, 2, 4, 5, 7 }; + const int semitones = octave * 12 + octaveStart[step[0] - 'A'] + alter; // semitones from C0 + return semitones + 12; // MIDI note C4 = 60 +} + +void MusicXmlInput::MidiToPitch(int midi, std::string &step, int &alter, int &octave) +{ + const int semitones = midi - 12; // C0 = 0 + + // 12 notes in an octave. Ignore enharmonics, prefer B flat over A sharp. + static const std::pair octaveNotes[] = { { "C", 0 }, { "C", 1 }, { "D", 0 }, { "D", 1 }, + { "E", 0 }, { "F", 0 }, { "F", 1 }, { "G", 0 }, { "G", 1 }, { "A", 0 }, { "B", -1 }, { "B", 0 } }; + static_assert(sizeof(octaveNotes) / sizeof(octaveNotes[0]) == 12); + + octave = semitones / 12; + step = octaveNotes[semitones % 12].first; + alter = octaveNotes[semitones % 12].second; +} + #endif // NO_MUSICXML_SUPPORT } // namespace vrv From 5a57dec9fbb2dd4d7763919b474a837e9764b3e7 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Thu, 13 Jan 2022 10:33:59 +0100 Subject: [PATCH 043/403] move meter to staffDef --- src/ioabc.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/ioabc.cpp b/src/ioabc.cpp index a9072bbd992..5863657452b 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -161,16 +161,16 @@ void ABCInput::parseABC(std::istream &infile) staffDef->AddChild(m_clef); m_clef = NULL; } + if (m_meter) { + staffDef->AddChild(m_meter); + m_meter = NULL; + } staffGrp->AddChild(staffDef); m_doc->GetCurrentScoreDef()->AddChild(staffGrp); if (m_key) { m_doc->GetCurrentScoreDef()->AddChild(m_key); m_key = NULL; } - if (m_meter) { - m_doc->GetCurrentScoreDef()->AddChild(m_meter); - m_meter = NULL; - } } // create section @@ -577,7 +577,6 @@ void ABCInput::parseKey(std::string &keyString) m_key = new KeySig(); m_key->IsAttribute(true); m_clef = new Clef(); - m_clef->IsAttribute(true); while (isspace(keyString[i])) ++i; // set key.pname @@ -767,7 +766,6 @@ void ABCInput::parseMeter(const std::string &meterString) // this is a little "hack", until libMEI is fixed m_meter->SetCount({ atoi(meterCount.c_str()) }); m_meter->SetUnit(atoi(&meterString[meterString.find('/') + 1])); - m_meter->IsAttribute(true); } } From e4e11a0e9f43b128e0cd534c224dbd23824bd079 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Thu, 13 Jan 2022 11:05:51 +0100 Subject: [PATCH 044/403] add changes in dur.default --- src/ioabc.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 5863657452b..670f056d882 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -186,6 +186,7 @@ void ABCInput::parseABC(std::istream &infile) CalcUnitNoteLength(); } m_doc->GetCurrentScoreDef()->SetDurDefault(m_durDefault); + m_durDefault = DURATION_NONE; // read music code m_layer = new Layer(); @@ -1555,6 +1556,13 @@ void ABCInput::readMusicCode(const std::string &musicCode, Section *section) section->AddChild(scoreDef); m_meter = NULL; } + + if (m_durDefault != DURATION_NONE) { + ScoreDef *scoreDef = new ScoreDef(); + scoreDef->SetDurDefault(m_durDefault); + section->AddChild(scoreDef); + m_durDefault = DURATION_NONE; + } } // by default, line-breaks in the code generate line-breaks in the score From 5f2f22ea9f3a74ec15767267bdb846d504cb6d0d Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Thu, 13 Jan 2022 11:13:58 +0100 Subject: [PATCH 045/403] formatting --- src/ioabc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 670f056d882..52d65c43554 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -1556,7 +1556,7 @@ void ABCInput::readMusicCode(const std::string &musicCode, Section *section) section->AddChild(scoreDef); m_meter = NULL; } - + if (m_durDefault != DURATION_NONE) { ScoreDef *scoreDef = new ScoreDef(); scoreDef->SetDurDefault(m_durDefault); From 4fa203942367bed94eef610aead54673b9942f81 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 13 Jan 2022 12:31:24 +0100 Subject: [PATCH 046/403] Adjust warning --- src/view_element.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/view_element.cpp b/src/view_element.cpp index b6ce73f2316..ff5f1b32d5e 100644 --- a/src/view_element.cpp +++ b/src/view_element.cpp @@ -1356,7 +1356,7 @@ void View::DrawNote(DeviceContext *dc, LayerElement *element, Layer *layer, Staf int drawingDur = note->GetDrawingDur(); if (drawingDur == DUR_NONE) { if (note->IsInBeam() && !dc->Is(BBOX_DEVICE_CONTEXT)) { - LogWarning("Missing duration for note '%s'", note->GetUuid().c_str()); + LogWarning("Missing duration for note '%s' in beam", note->GetUuid().c_str()); } drawingDur = DUR_4; } From 1ada3084ba595acaf8dc4fff7c1d065f07b9187a Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 14 Jan 2022 07:59:47 +0100 Subject: [PATCH 047/403] Removing wrong ledgerline length adjustment. Fixes #2555 --- src/note.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/note.cpp b/src/note.cpp index 81a1994e9ce..975a707b89d 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -1192,9 +1192,6 @@ int Note::CalcLedgerLines(FunctorParams *functorParams) const int extension = params->m_doc->GetDrawingLedgerLineExtension(staffSize, drawingCueSize); const int left = this->GetDrawingX() - extension - staffX; int right = this->GetDrawingX() + 2 * radius + extension - staffX; - if (this->GetDrawingDur() == DUR_MX) { - right += 2 * radius; - } if (linesAbove > 0) { staff->AddLedgerLineAbove(linesAbove, left, right, extension, drawingCueSize); From 17fedcd27bc2585a38fcfaac16087d3036214697 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Fri, 14 Jan 2022 09:19:18 +0100 Subject: [PATCH 048/403] Use fallback duration for rests --- include/vrv/rest.h | 3 +++ src/rest.cpp | 7 ++++++- src/view_element.cpp | 10 +++++----- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/include/vrv/rest.h b/include/vrv/rest.h index aa0f4b39011..1861145c8cc 100644 --- a/include/vrv/rest.h +++ b/include/vrv/rest.h @@ -79,7 +79,10 @@ class Rest : public LayerElement, * Get the SMuFL glyph or a rest considering its actual duration. * This is valid only for CMN and for duration shorter than half notes. */ + ///@{ wchar_t GetRestGlyph() const; + wchar_t GetRestGlyph(int duration) const; + ///@} //----------// // Functors // diff --git a/src/rest.cpp b/src/rest.cpp index 8d3bdc0e890..95cbef4f7a6 100644 --- a/src/rest.cpp +++ b/src/rest.cpp @@ -219,6 +219,11 @@ void Rest::AddChild(Object *child) } wchar_t Rest::GetRestGlyph() const +{ + return this->GetRestGlyph(this->GetActualDur()); +} + +wchar_t Rest::GetRestGlyph(const int duration) const { // If there is glyph.num, prioritize it if (HasGlyphNum()) { @@ -231,7 +236,7 @@ wchar_t Rest::GetRestGlyph() const if (NULL != Resources::GetGlyph(code)) return code; } - switch (this->GetActualDur()) { + switch (duration) { case DUR_LG: return SMUFL_E4E1_restLonga; break; case DUR_BR: return SMUFL_E4E2_restDoubleWhole; break; case DUR_1: return SMUFL_E4E3_restWhole; break; diff --git a/src/view_element.cpp b/src/view_element.cpp index ff5f1b32d5e..ef50e7ca2b5 100644 --- a/src/view_element.cpp +++ b/src/view_element.cpp @@ -1432,17 +1432,17 @@ void View::DrawRest(DeviceContext *dc, LayerElement *element, Layer *layer, Staf if (rest->m_crossStaff) staff = rest->m_crossStaff; const bool drawingCueSize = rest->GetDrawingCueSize(); - const int drawingDur = rest->GetActualDur(); + int drawingDur = rest->GetActualDur(); if (drawingDur == DUR_NONE) { if (!dc->Is(BBOX_DEVICE_CONTEXT)) { LogWarning("Missing duration for rest '%s'", rest->GetUuid().c_str()); } - return; + drawingDur = DUR_4; } - const wchar_t drawingGlyph = rest->GetRestGlyph(); + const wchar_t drawingGlyph = rest->GetRestGlyph(drawingDur); - int x = element->GetDrawingX(); - int y = element->GetDrawingY(); + const int x = element->GetDrawingX(); + const int y = element->GetDrawingY(); DrawSmuflCode(dc, x, y, drawingGlyph, staff->m_drawingStaffSize, drawingCueSize); From a55c2f5fd74d9578074bb7430c41b10594547b08 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 14 Jan 2022 09:45:34 +0100 Subject: [PATCH 049/403] Update changelog [skip-ci] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 18b00e68502..cbaeed5eddc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [unreleased] * Support for `beatRpt@beatdef` +* Support for `scoreDef` and `staffDef` `@dur.default` (@eNote-GmBH) ## [3.8.1] - 2022-01-10 * Fix bug in PAE importer for durations and for key signatures From 6d9823600c1559a1a809dcf8245664fcaf65c052 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Fri, 14 Jan 2022 11:46:54 +0100 Subject: [PATCH 050/403] Refine beam intersection calculation --- include/vrv/boundingbox.h | 2 +- src/boundingbox.cpp | 31 +++++++++++++++++-------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/include/vrv/boundingbox.h b/include/vrv/boundingbox.h index cf994bd7b54..96aa85dce70 100644 --- a/include/vrv/boundingbox.h +++ b/include/vrv/boundingbox.h @@ -167,7 +167,7 @@ class BoundingBox { * A segment of the beam that matches horizontal position of the bounding box is taken to find whether there is * intersection. */ - int Intersects(BeamDrawingInterface *beamInterface, Accessor type, int additionalOffset = 0) const; + int Intersects(BeamDrawingInterface *beamInterface, Accessor type, int margin = 0) const; //----------------// // Static methods // diff --git a/src/boundingbox.cpp b/src/boundingbox.cpp index 9d3bde2fac6..76843d58de9 100644 --- a/src/boundingbox.cpp +++ b/src/boundingbox.cpp @@ -654,7 +654,7 @@ int BoundingBox::Intersects(FloatingCurvePositioner *curve, Accessor type, int m return 0; } -int BoundingBox::Intersects(BeamDrawingInterface *beamInterface, Accessor type, int additionalOffset) const +int BoundingBox::Intersects(BeamDrawingInterface *beamInterface, Accessor type, const int margin) const { assert(beamInterface); assert(!beamInterface->m_beamElementCoords.empty()); @@ -664,18 +664,21 @@ int BoundingBox::Intersects(BeamDrawingInterface *beamInterface, Accessor type, const Point beamRight( beamInterface->m_beamElementCoords.back()->m_x, beamInterface->m_beamElementCoords.back()->m_yBeam); + const int leftX = this->GetLeftBy(type) - margin; + const int rightX = this->GetRightBy(type) + margin; + Point leftIntersection(0, 0); Point rightIntersection(0, 0); const double beamSlope = BoundingBox::CalcSlope(beamLeft, beamRight); - if (this->GetLeftBy(type) <= beamLeft.x) { + if (leftX <= beamLeft.x) { // BB does not overlap horizontally with beam (left side of the beam) - if (this->GetRightBy(type) < beamLeft.x) { + if (rightX < beamLeft.x) { return 0; } // BB overlaps with left side of the beam - else if (this->GetRightBy(type) < beamRight.x) { + else if (rightX < beamRight.x) { leftIntersection = beamLeft; - rightIntersection.x = this->GetRightBy(type); + rightIntersection.x = rightX; rightIntersection.y = beamLeft.y + beamSlope * (rightIntersection.x - beamLeft.x); } // BB covers the whole beam @@ -685,10 +688,10 @@ int BoundingBox::Intersects(BeamDrawingInterface *beamInterface, Accessor type, } } else { - if (this->GetRightBy(type) > beamRight.x) { + if (rightX > beamRight.x) { // BB overlaps with right side of the beam - if (this->GetLeftBy(type) <= beamRight.x) { - leftIntersection.x = this->GetLeftBy(type); + if (leftX <= beamRight.x) { + leftIntersection.x = leftX; leftIntersection.y = beamLeft.y + beamSlope * (leftIntersection.x - beamLeft.x); rightIntersection = beamRight; } @@ -699,9 +702,9 @@ int BoundingBox::Intersects(BeamDrawingInterface *beamInterface, Accessor type, } // BB is inside of the beam else { - leftIntersection.x = this->GetLeftBy(type); + leftIntersection.x = leftX; leftIntersection.y = beamLeft.y + beamSlope * (leftIntersection.x - beamLeft.x); - rightIntersection.x = this->GetRightBy(type); + rightIntersection.x = rightX; rightIntersection.y = beamLeft.y + beamSlope * (rightIntersection.x - beamLeft.x); } } @@ -709,13 +712,13 @@ int BoundingBox::Intersects(BeamDrawingInterface *beamInterface, Accessor type, // calculate vertical overlap of the BB with beam section if (beamInterface->m_drawingPlace == BEAMPLACE_above) { const int topY = std::max(leftIntersection.y, rightIntersection.y); - const int shift = topY - this->GetBottomBy(type); - if (shift > 0) return shift + additionalOffset; + const int shift = topY - this->GetBottomBy(type) + margin; + return std::max(shift, 0); } else if (beamInterface->m_drawingPlace == BEAMPLACE_below) { const int bottomY = std::min(leftIntersection.y, rightIntersection.y); - const int shift = bottomY - this->GetTopBy(type); - if (shift < 0) return shift - additionalOffset; + const int shift = bottomY - this->GetTopBy(type) - margin; + return std::min(shift, 0); } return 0; From f8e8add6a50965b1f2982bb79d1ad2b538a3dee0 Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 15 Dec 2021 14:25:47 +0200 Subject: [PATCH 051/403] Adjust incosistent beam slope --- src/beam.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/beam.cpp b/src/beam.cpp index 866078356fb..fc86cf96579 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -550,7 +550,7 @@ bool BeamSegment::CalcBeamSlope( } else { // A fourth or smaller - reduce to a short step - if (noteStep <= unit * 3) { + if (noteStep < unit * 3) { step = unit / 2; shortStep = true; } From 0bc6bd95f1f1d322cd2edadb59a845b6e8601bf8 Mon Sep 17 00:00:00 2001 From: Monceber Date: Fri, 17 Dec 2021 19:00:14 +0200 Subject: [PATCH 052/403] Remove m_extendedToCenter variable - removed m_extendedToCenter variable to avoid mismatch between note distance and beam slope - beam still should be limited by vertical center of the staff, while allowing for steeper slopes for beams that need those --- include/vrv/beam.h | 1 - src/beam.cpp | 25 +++++++------------------ 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 857fc454dc6..2f639023885 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -116,7 +116,6 @@ class BeamSegment { public: // values set by CalcBeam int m_nbNotesOrChords; - bool m_extendedToCenter; // the stem where extended to touch the center staff line double m_beamSlope; // the slope of the beam int m_verticalCenter; int m_ledgerLinesAbove; diff --git a/src/beam.cpp b/src/beam.cpp index fc86cf96579..f9eabbe1425 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -55,7 +55,6 @@ void BeamSegment::Reset() m_beamSlope = 0.0; m_verticalCenter = 0; - m_extendedToCenter = false; m_ledgerLinesAbove = 0; m_ledgerLinesBelow = 0; m_uniformStemLength = 0; @@ -405,7 +404,6 @@ void BeamSegment::CalcBeamInit( int nbRests = 0; m_nbNotesOrChords = 0; - m_extendedToCenter = false; m_ledgerLinesAbove = 0; m_ledgerLinesBelow = 0; @@ -525,11 +523,7 @@ bool BeamSegment::CalcBeamSlope( // Indicates if we have a short step of half a unit // This occurs with 8th and 16th only and with a reduced distance of 3 stave-spaces (6 units) bool shortStep = false; - if (m_extendedToCenter) { - step = unit / 2; - shortStep = true; - } - else if (m_nbNotesOrChords == 2) { + if (m_nbNotesOrChords == 2) { step = unit * 2; // Short distance if (dist <= unit * 6) { @@ -1412,17 +1406,12 @@ void BeamElementCoord::SetDrawingStemDir( // Make sure the stem reaches the center of the staff // Mark the segment as extendedToCenter since we then want a reduced slope - if (interface->m_crossStaffContent || (BEAMPLACE_mixed == interface->m_drawingPlace)) { - segment->m_extendedToCenter = false; - } - else if (((stemDir == STEMDIRECTION_up) && (m_yBeam <= segment->m_verticalCenter)) - || ((stemDir == STEMDIRECTION_down) && (segment->m_verticalCenter <= m_yBeam))) { - m_yBeam = segment->m_verticalCenter; - segment->m_extendedToCenter = true; - m_centered = false; - } - else { - segment->m_extendedToCenter = false; + if (!interface->m_crossStaffContent && (BEAMPLACE_mixed != interface->m_drawingPlace)) { + if (((stemDir == STEMDIRECTION_up) && (m_yBeam <= segment->m_verticalCenter)) + || ((stemDir == STEMDIRECTION_down) && (segment->m_verticalCenter <= m_yBeam))) { + m_yBeam = segment->m_verticalCenter; + m_centered = false; + } } m_yBeam += m_overlapMargin; From 4667a76fee6f521767aa3e0c83d6df059750b100 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 21 Dec 2021 18:48:47 +0200 Subject: [PATCH 053/403] Avoid steep sloves on beams with repeated notes --- src/beam.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/beam.cpp b/src/beam.cpp index f9eabbe1425..f1bdbf158eb 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -552,6 +552,13 @@ bool BeamSegment::CalcBeamSlope( else if (noteStep <= unit * 4) { step = unit * 2; } + else if (m_nbNotesOrChords == 4) { + if ((m_beamElementCoordRefs.at(1)->m_yBeam == m_beamElementCoordRefs.at(2)->m_yBeam) + && ((m_firstNoteOrChord->m_yBeam == m_beamElementCoordRefs.at(1)->m_yBeam) + || (m_lastNoteOrChord->m_yBeam == m_beamElementCoordRefs.at(2)->m_yBeam))) { + step = unit * 2; + } + } } // Prevent short step with values not shorter than a 16th From 5aca23f7b22e18bb82955276916b57b2d40548f2 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 14 Dec 2021 13:20:31 +0100 Subject: [PATCH 054/403] Introduce MIDI chord sequence --- include/vrv/functorparams.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 3322be3035e..167453ef76b 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1554,6 +1554,16 @@ struct MIDINote { using MIDINoteSequence = std::list; +/** + * Helper struct to store chord sequences in MIDI output due to grace notes + */ +struct MIDIChord { + std::set pitches; + double duration; +}; + +using MIDIChordSequence = std::list; + /** * member 0: MidiFile*: the MidiFile we are writing to * member 1: int: the midi track number @@ -1561,6 +1571,7 @@ using MIDINoteSequence = std::list; * member 4: int: the semi tone transposition for the current track * member 5: double with the current tempo * member 6: expanded notes due to ornaments and tremolandi + * member 7: grace note sequence **/ class GenerateMIDIParams : public FunctorParams { @@ -1582,6 +1593,7 @@ class GenerateMIDIParams : public FunctorParams { int m_transSemi; double m_currentTempo; std::map m_expandedNotes; + MIDIChordSequence m_graceNotes; Functor *m_functor; }; From 0f48fca8e3a0701132de89f4f718ad2032e6076d Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 14 Dec 2021 13:31:17 +0100 Subject: [PATCH 055/403] Store MIDI grace notes --- src/note.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/note.cpp b/src/note.cpp index 975a707b89d..de1d63d6468 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -1329,8 +1329,18 @@ int Note::GenerateMIDI(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - // For now just ignore grace notes + // Handle grace notes if (this->IsGraceNote()) { + this->CalcMIDIPitch(params->m_transSemi); + const char pitch = this->GetMIDIPitch(); + + double quarterDuration = 0.0; + const data_DURATION dur = this->GetDur(); + if ((dur >= DURATION_long) && (dur <= DURATION_1024)) { + quarterDuration = pow(2.0, (DURATION_4 - dur)); + } + + params->m_graceNotes.push_back({ { pitch }, quarterDuration }); return FUNCTOR_SIBLINGS; } From 4c291f21663185cbb39383b6fa49d389b35461e6 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Wed, 15 Dec 2021 09:04:47 +0100 Subject: [PATCH 056/403] Play MIDI grace notes --- include/vrv/functorparams.h | 5 ++- include/vrv/note.h | 10 +++++ src/note.cpp | 84 ++++++++++++++++++++++++++++++++----- 3 files changed, 87 insertions(+), 12 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 167453ef76b..95af71cc7e7 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1571,7 +1571,9 @@ using MIDIChordSequence = std::list; * member 4: int: the semi tone transposition for the current track * member 5: double with the current tempo * member 6: expanded notes due to ornaments and tremolandi - * member 7: grace note sequence + * member 7: deferred notes which start slightly later + * member 8: grace note sequence + * member 9: the functor **/ class GenerateMIDIParams : public FunctorParams { @@ -1593,6 +1595,7 @@ class GenerateMIDIParams : public FunctorParams { int m_transSemi; double m_currentTempo; std::map m_expandedNotes; + std::map m_deferredNotes; MIDIChordSequence m_graceNotes; Functor *m_functor; }; diff --git a/include/vrv/note.h b/include/vrv/note.h index 67aaebf475e..44a8ccb6d3b 100644 --- a/include/vrv/note.h +++ b/include/vrv/note.h @@ -343,6 +343,16 @@ class Note : public LayerElement, */ bool IsDotOverlappingWithFlag(Doc *doc, const int staffSize, bool isDotShifted); + /** + * Register deferred notes for MIDI + */ + void DeferMIDINote(FunctorParams *functorParams, double shift, bool includeChordSiblings); + + /** + * Create the MIDI output of the grace note sequence stored in params + */ + void GenerateGraceNoteMIDI(FunctorParams *functorParams, double startTime, int tpq, int channel, int velocity); + public: // private: diff --git a/src/note.cpp b/src/note.cpp index de1d63d6468..a4d1afecd82 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -740,6 +740,57 @@ bool Note::IsDotOverlappingWithFlag(Doc *doc, const int staffSize, bool isDotShi return dotMargin < 0; } +void Note::DeferMIDINote(FunctorParams *functorParams, double shift, bool includeChordSiblings) +{ + GenerateMIDIParams *params = vrv_params_cast(functorParams); + assert(params); + + // Recursive call for chords + Chord *chord = this->IsChordTone(); + if (chord && includeChordSiblings) { + const ArrayOfObjects *notes = chord->GetList(chord); + assert(notes); + + for (Object *obj : *notes) { + Note *note = vrv_cast(obj); + assert(note); + note->DeferMIDINote(functorParams, shift, false); + } + return; + } + + // Register the shift + if (shift < this->GetScoreTimeDuration() + this->GetScoreTimeTiedDuration()) { + params->m_deferredNotes[this] = shift; + } +} + +void Note::GenerateGraceNoteMIDI(FunctorParams *functorParams, double startTime, int tpq, int channel, int velocity) +{ + GenerateMIDIParams *params = vrv_params_cast(functorParams); + assert(params); + + // Unaccented grace notes have a duration of 27 ms + constexpr int ms = 27; + const double unaccGraceNoteDur = ms * params->m_currentTempo / 60000.0; + const double totalDur = unaccGraceNoteDur * params->m_graceNotes.size(); + if (startTime >= totalDur) { + startTime -= totalDur; + } + else { + this->DeferMIDINote(functorParams, totalDur, true); + } + + for (const MIDIChord &chord : params->m_graceNotes) { + const double stopTime = startTime + unaccGraceNoteDur; + for (char pitch : chord.pitches) { + params->m_midiFile->addNoteOn(params->m_midiTrack, startTime * tpq, channel, pitch, velocity); + params->m_midiFile->addNoteOff(params->m_midiTrack, stopTime * tpq, channel, pitch); + } + startTime = stopTime; + } +} + //----------------// // Static methods // //----------------// @@ -1344,34 +1395,45 @@ int Note::GenerateMIDI(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - int channel = params->m_midiChannel; + const int channel = params->m_midiChannel; int velocity = MIDI_VELOCITY; if (this->HasVel()) velocity = this->GetVel(); - double starttime = params->m_totalTime + this->GetScoreTimeOnset(); + double startTime = params->m_totalTime + this->GetScoreTimeOnset(); + const int tpq = params->m_midiFile->getTPQ(); - int tpq = params->m_midiFile->getTPQ(); + // Check if some grace notes must be performed + if (!params->m_graceNotes.empty()) { + this->GenerateGraceNoteMIDI(functorParams, startTime, tpq, channel, velocity); + params->m_graceNotes.clear(); + } + + // Check if note is deferred + if (params->m_deferredNotes.find(this) != params->m_deferredNotes.end()) { + startTime += params->m_deferredNotes.at(this); + params->m_deferredNotes.erase(this); + } // Check if note was expanded into sequence of short notes due to trills/tremolandi // Play either the expanded note sequence or a single note if (params->m_expandedNotes.find(this) != params->m_expandedNotes.end()) { for (const auto &midiNote : params->m_expandedNotes[this]) { - double stoptime = starttime + midiNote.duration; + const double stopTime = startTime + midiNote.duration; - params->m_midiFile->addNoteOn(params->m_midiTrack, starttime * tpq, channel, midiNote.pitch, velocity); - params->m_midiFile->addNoteOff(params->m_midiTrack, stoptime * tpq, channel, midiNote.pitch); + params->m_midiFile->addNoteOn(params->m_midiTrack, startTime * tpq, channel, midiNote.pitch, velocity); + params->m_midiFile->addNoteOff(params->m_midiTrack, stopTime * tpq, channel, midiNote.pitch); - starttime = stoptime; + startTime = stopTime; } } else { - double stoptime = params->m_totalTime + this->GetScoreTimeOffset() + this->GetScoreTimeTiedDuration(); + const double stopTime = params->m_totalTime + this->GetScoreTimeOffset() + this->GetScoreTimeTiedDuration(); this->CalcMIDIPitch(params->m_transSemi); - char pitch = this->GetMIDIPitch(); + const char pitch = this->GetMIDIPitch(); - params->m_midiFile->addNoteOn(params->m_midiTrack, starttime * tpq, channel, pitch, velocity); - params->m_midiFile->addNoteOff(params->m_midiTrack, stoptime * tpq, channel, pitch); + params->m_midiFile->addNoteOn(params->m_midiTrack, startTime * tpq, channel, pitch, velocity); + params->m_midiFile->addNoteOff(params->m_midiTrack, stopTime * tpq, channel, pitch); } return FUNCTOR_SIBLINGS; From 3690665b4ef2db4d0afd70e2c60327d13f310bec Mon Sep 17 00:00:00 2001 From: David Bauer Date: Wed, 15 Dec 2021 09:41:37 +0100 Subject: [PATCH 057/403] Remove MIDI pitch cache --- include/vrv/functorparams.h | 4 ++-- include/vrv/note.h | 12 +++++------- src/btrem.cpp | 3 +-- src/featureextractor.cpp | 5 +---- src/note.cpp | 25 ++++++------------------- src/toolkit.cpp | 7 +++---- 6 files changed, 18 insertions(+), 38 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 95af71cc7e7..b07f2f0665f 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1548,7 +1548,7 @@ class GenerateFeaturesParams : public FunctorParams { * Helper struct to store note sequences which replace notes in MIDI output due to expanded ornaments and tremolandi */ struct MIDINote { - char pitch; + int pitch; double duration; }; @@ -1558,7 +1558,7 @@ using MIDINoteSequence = std::list; * Helper struct to store chord sequences in MIDI output due to grace notes */ struct MIDIChord { - std::set pitches; + std::set pitches; double duration; }; diff --git a/include/vrv/note.h b/include/vrv/note.h index 44a8ccb6d3b..5abe80b163d 100644 --- a/include/vrv/note.h +++ b/include/vrv/note.h @@ -219,16 +219,19 @@ class Note : public LayerElement, void SetScoreTimeOffset(double scoreTime); void SetRealTimeOffsetSeconds(double timeInSeconds); void SetScoreTimeTiedDuration(double timeInSeconds); - void CalcMIDIPitch(int shift); double GetScoreTimeOnset() const; double GetRealTimeOnsetMilliseconds() const; double GetScoreTimeOffset() const; double GetScoreTimeTiedDuration() const; double GetRealTimeOffsetMilliseconds() const; double GetScoreTimeDuration() const; - char GetMIDIPitch() const; ///@} + /** + * MIDI pitch + */ + int GetMIDIPitch(int shift); + public: //----------------// // Static methods // @@ -411,11 +414,6 @@ class Note : public LayerElement, * indicate that it should not be written to MIDI output. */ double m_scoreTimeTiedDuration; - - /** - * The MIDI pitch of the note. - */ - char m_MIDIPitch; }; //---------------------------------------------------------------------------- diff --git a/src/btrem.cpp b/src/btrem.cpp index 5b23bd48a9c..d092d1e0351 100644 --- a/src/btrem.cpp +++ b/src/btrem.cpp @@ -86,8 +86,7 @@ int BTrem::GenerateMIDI(FunctorParams *functorParams) auto expandNote = [params, noteInQuarterDur](Object *obj) { Note *note = vrv_cast(obj); assert(note); - note->CalcMIDIPitch(params->m_transSemi); - const char pitch = note->GetMIDIPitch(); + const int pitch = note->GetMIDIPitch(params->m_transSemi); const double totalInQuarterDur = note->GetScoreTimeDuration() + note->GetScoreTimeTiedDuration(); const int multiplicity = totalInQuarterDur / noteInQuarterDur; (params->m_expandedNotes)[note] = MIDINoteSequence(multiplicity, { pitch, noteInQuarterDur }); diff --git a/src/featureextractor.cpp b/src/featureextractor.cpp index 29002bc448d..31feb75bc3d 100644 --- a/src/featureextractor.cpp +++ b/src/featureextractor.cpp @@ -60,10 +60,7 @@ void FeatureExtractor::Extract(Object *object, GenerateFeaturesParams *params) // Check if the note is tied to a previous one and skip it if yes if (note->GetScoreTimeTiedDuration() == -1.0) return; - note->CalcMIDIPitch(0); - std::stringstream pitch; - data_OCTAVE oct = note->GetOct(); char octSign = (oct > 3) ? '\'' : ','; int signCount = (oct > 3) ? (oct - 3) : (4 - oct); @@ -105,7 +102,7 @@ void FeatureExtractor::Extract(Object *object, GenerateFeaturesParams *params) // We have a previous note, so we can calculate an interval if (m_previousNote) { - std::string interval = StringFormat("%d", note->GetMIDIPitch() - m_previousNote->GetMIDIPitch()); + std::string interval = StringFormat("%d", note->GetMIDIPitch(0) - m_previousNote->GetMIDIPitch(0)); m_intervals << interval; jsonxx::Array intervalsIds; intervalsIds << m_previousNote->GetUuid(); diff --git a/src/note.cpp b/src/note.cpp index a4d1afecd82..8b694814ea0 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -122,8 +122,6 @@ void Note::Reset() m_realTimeOnsetMilliseconds = 0; m_realTimeOffsetMilliseconds = 0; m_scoreTimeTiedDuration = 0.0; - - m_MIDIPitch = -1; } bool Note::IsSupportedChild(Object *child) @@ -554,10 +552,7 @@ bool Note::IsVisible() const bool Note::IsEnharmonicWith(Note *note) { - this->CalcMIDIPitch(0); - note->CalcMIDIPitch(0); - - return (this->GetMIDIPitch() == note->GetMIDIPitch()); + return (this->GetMIDIPitch(0) == note->GetMIDIPitch(0)); } void Note::SetScoreTimeOnset(double scoreTime) @@ -587,10 +582,10 @@ void Note::SetScoreTimeTiedDuration(double scoreTime) m_scoreTimeTiedDuration = scoreTime; } -void Note::CalcMIDIPitch(int shift) +int Note::GetMIDIPitch(int shift) { if (this->HasPnum()) { - m_MIDIPitch = this->GetPnum(); + return this->GetPnum(); } else if (this->HasPname() || this->HasPnameGes()) { int midiBase = 0; @@ -616,7 +611,7 @@ void Note::CalcMIDIPitch(int shift) int oct = this->GetOct(); if (this->HasOctGes()) oct = this->GetOctGes(); - m_MIDIPitch = midiBase + (oct + 1) * 12; + return midiBase + (oct + 1) * 12; } else if (this->HasTabCourse()) { // tablature @@ -662,11 +657,6 @@ double Note::GetScoreTimeDuration() const return this->GetScoreTimeOffset() - this->GetScoreTimeOnset(); } -char Note::GetMIDIPitch() const -{ - return m_MIDIPitch; -} - int Note::GetChromaticAlteration() { Accid *accid = this->GetDrawingAccid(); @@ -1382,8 +1372,7 @@ int Note::GenerateMIDI(FunctorParams *functorParams) // Handle grace notes if (this->IsGraceNote()) { - this->CalcMIDIPitch(params->m_transSemi); - const char pitch = this->GetMIDIPitch(); + const int pitch = this->GetMIDIPitch(params->m_transSemi); double quarterDuration = 0.0; const data_DURATION dur = this->GetDur(); @@ -1428,9 +1417,7 @@ int Note::GenerateMIDI(FunctorParams *functorParams) } else { const double stopTime = params->m_totalTime + this->GetScoreTimeOffset() + this->GetScoreTimeTiedDuration(); - - this->CalcMIDIPitch(params->m_transSemi); - const char pitch = this->GetMIDIPitch(); + const int pitch = this->GetMIDIPitch(params->m_transSemi); params->m_midiFile->addNoteOn(params->m_midiTrack, startTime * tpq, channel, pitch, velocity); params->m_midiFile->addNoteOff(params->m_midiTrack, stopTime * tpq, channel, pitch); diff --git a/src/toolkit.cpp b/src/toolkit.cpp index ab764099dbc..6d1a6689a41 100644 --- a/src/toolkit.cpp +++ b/src/toolkit.cpp @@ -1643,10 +1643,9 @@ std::string Toolkit::GetMIDIValuesForElement(const std::string &xmlId) } Note *note = vrv_cast(element); assert(note); - int timeOfElement = this->GetTimeForElement(xmlId); - note->CalcMIDIPitch(0); - int pitchOfElement = note->GetMIDIPitch(); - int durationOfElement = note->GetRealTimeOffsetMilliseconds() - note->GetRealTimeOnsetMilliseconds(); + const int timeOfElement = this->GetTimeForElement(xmlId); + const int pitchOfElement = note->GetMIDIPitch(0); + const int durationOfElement = note->GetRealTimeOffsetMilliseconds() - note->GetRealTimeOnsetMilliseconds(); o << "time" << timeOfElement; o << "pitch" << pitchOfElement; o << "duration" << durationOfElement; From fbe27252f7f378c6907f475a06a6d0054f8a7f48 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Wed, 15 Dec 2021 10:17:28 +0100 Subject: [PATCH 058/403] Play MIDI grace chords --- include/vrv/chord.h | 5 +++++ src/chord.cpp | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/include/vrv/chord.h b/include/vrv/chord.h index 56431fc74d6..1d7fcf624ed 100644 --- a/include/vrv/chord.h +++ b/include/vrv/chord.h @@ -226,6 +226,11 @@ class Chord : public LayerElement, */ int AdjustCrossStaffContent(FunctorParams *functorParams) override; + /** + * See Object::GenerateMIDI + */ + int GenerateMIDI(FunctorParams *functorParams) override; + protected: /** * The note locations w.r.t. each staff diff --git a/src/chord.cpp b/src/chord.cpp index d9fcf865ab8..db6480949dd 100644 --- a/src/chord.cpp +++ b/src/chord.cpp @@ -970,4 +970,33 @@ int Chord::AdjustCrossStaffContent(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int Chord::GenerateMIDI(FunctorParams *functorParams) +{ + GenerateMIDIParams *params = vrv_params_cast(functorParams); + assert(params); + + // Handle grace chords + if (this->IsGraceNote()) { + std::set pitches; + const ArrayOfObjects *notes = this->GetList(this); + assert(notes); + for (Object *obj : *notes) { + Note *note = vrv_cast(obj); + assert(note); + pitches.insert(note->GetMIDIPitch(params->m_transSemi)); + } + + double quarterDuration = 0.0; + const data_DURATION dur = this->GetDur(); + if ((dur >= DURATION_long) && (dur <= DURATION_1024)) { + quarterDuration = pow(2.0, (DURATION_4 - dur)); + } + + params->m_graceNotes.push_back({ pitches, quarterDuration }); + return FUNCTOR_SIBLINGS; + } + + return FUNCTOR_CONTINUE; +} + } // namespace vrv From bab39729920c62dc7080ac18a573d82c6deecfc4 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Wed, 15 Dec 2021 13:41:37 +0100 Subject: [PATCH 059/403] Distinguish between accented and unaccented --- include/vrv/functorparams.h | 5 ++++- src/chord.cpp | 7 +++++++ src/note.cpp | 31 +++++++++++++++++++++++-------- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index b07f2f0665f..047793820f2 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1573,7 +1573,8 @@ using MIDIChordSequence = std::list; * member 6: expanded notes due to ornaments and tremolandi * member 7: deferred notes which start slightly later * member 8: grace note sequence - * member 9: the functor + * member 9: flag indicating whether the last grace note/chord was accented + * member 10: the functor **/ class GenerateMIDIParams : public FunctorParams { @@ -1586,6 +1587,7 @@ class GenerateMIDIParams : public FunctorParams { m_totalTime = 0.0; m_transSemi = 0; m_currentTempo = 120.0; + m_accentedGraceNote = false; m_functor = functor; } smf::MidiFile *m_midiFile; @@ -1597,6 +1599,7 @@ class GenerateMIDIParams : public FunctorParams { std::map m_expandedNotes; std::map m_deferredNotes; MIDIChordSequence m_graceNotes; + bool m_accentedGraceNote; Functor *m_functor; }; diff --git a/src/chord.cpp b/src/chord.cpp index db6480949dd..19ad58ecf65 100644 --- a/src/chord.cpp +++ b/src/chord.cpp @@ -24,6 +24,7 @@ #include "elementpart.h" #include "fermata.h" #include "functorparams.h" +#include "gracegrp.h" #include "horizontalaligner.h" #include "layer.h" #include "note.h" @@ -993,6 +994,12 @@ int Chord::GenerateMIDI(FunctorParams *functorParams) } params->m_graceNotes.push_back({ pitches, quarterDuration }); + + bool accented = (this->GetGrace() == GRACE_acc); + GraceGrp *graceGrp = vrv_cast(this->GetFirstAncestor(GRACEGRP)); + if (graceGrp && (graceGrp->GetGrace() == GRACE_acc)) accented = true; + params->m_accentedGraceNote = accented; + return FUNCTOR_SIBLINGS; } diff --git a/src/note.cpp b/src/note.cpp index 8b694814ea0..a4863855837 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -22,6 +22,7 @@ #include "fermata.h" #include "functorparams.h" #include "glyph.h" +#include "gracegrp.h" #include "layer.h" #include "ligature.h" #include "plica.h" @@ -760,19 +761,27 @@ void Note::GenerateGraceNoteMIDI(FunctorParams *functorParams, double startTime, GenerateMIDIParams *params = vrv_params_cast(functorParams); assert(params); - // Unaccented grace notes have a duration of 27 ms - constexpr int ms = 27; - const double unaccGraceNoteDur = ms * params->m_currentTempo / 60000.0; - const double totalDur = unaccGraceNoteDur * params->m_graceNotes.size(); - if (startTime >= totalDur) { - startTime -= totalDur; + double graceNoteDur = 0.0; + if (params->m_accentedGraceNote && !params->m_graceNotes.empty()) { + const double totalDur = this->GetScoreTimeDuration() / 2.0; + this->DeferMIDINote(functorParams, totalDur, true); + graceNoteDur = totalDur / params->m_graceNotes.size(); } else { - this->DeferMIDINote(functorParams, totalDur, true); + // Unaccented grace notes obtain a fixed duration of 27 ms + constexpr int ms = 27; + graceNoteDur = ms * params->m_currentTempo / 60000.0; + const double totalDur = graceNoteDur * params->m_graceNotes.size(); + if (startTime >= totalDur) { + startTime -= totalDur; + } + else { + this->DeferMIDINote(functorParams, totalDur, true); + } } for (const MIDIChord &chord : params->m_graceNotes) { - const double stopTime = startTime + unaccGraceNoteDur; + const double stopTime = startTime + graceNoteDur; for (char pitch : chord.pitches) { params->m_midiFile->addNoteOn(params->m_midiTrack, startTime * tpq, channel, pitch, velocity); params->m_midiFile->addNoteOff(params->m_midiTrack, stopTime * tpq, channel, pitch); @@ -1381,6 +1390,12 @@ int Note::GenerateMIDI(FunctorParams *functorParams) } params->m_graceNotes.push_back({ { pitch }, quarterDuration }); + + bool accented = (this->GetGrace() == GRACE_acc); + GraceGrp *graceGrp = vrv_cast(this->GetFirstAncestor(GRACEGRP)); + if (graceGrp && (graceGrp->GetGrace() == GRACE_acc)) accented = true; + params->m_accentedGraceNote = accented; + return FUNCTOR_SIBLINGS; } From b282ea5189a7af5477791f24dba938b13380603a Mon Sep 17 00:00:00 2001 From: David Bauer Date: Wed, 15 Dec 2021 21:11:12 +0100 Subject: [PATCH 060/403] Handling of Nachschlag --- include/vrv/functorparams.h | 13 ++++++++----- include/vrv/gracegrp.h | 11 +++++++++++ include/vrv/object.h | 1 + include/vrv/vrvdef.h | 2 ++ src/doc.cpp | 3 ++- src/gracegrp.cpp | 37 +++++++++++++++++++++++++++++++++++++ src/note.cpp | 7 ++++--- 7 files changed, 65 insertions(+), 9 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 047793820f2..0e93a3a853a 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1570,11 +1570,12 @@ using MIDIChordSequence = std::list; * member 3: double: the score time from the start of the music to the start of the current measure * member 4: int: the semi tone transposition for the current track * member 5: double with the current tempo - * member 6: expanded notes due to ornaments and tremolandi - * member 7: deferred notes which start slightly later - * member 8: grace note sequence - * member 9: flag indicating whether the last grace note/chord was accented - * member 10: the functor + * member 6: the last (non grace) note that was performed + * member 7: expanded notes due to ornaments and tremolandi + * member 8: deferred notes which start slightly later + * member 9: grace note sequence + * member 10: flag indicating whether the last grace note/chord was accented + * member 11: the functor **/ class GenerateMIDIParams : public FunctorParams { @@ -1587,6 +1588,7 @@ class GenerateMIDIParams : public FunctorParams { m_totalTime = 0.0; m_transSemi = 0; m_currentTempo = 120.0; + m_lastNote = NULL; m_accentedGraceNote = false; m_functor = functor; } @@ -1596,6 +1598,7 @@ class GenerateMIDIParams : public FunctorParams { double m_totalTime; int m_transSemi; double m_currentTempo; + Note *m_lastNote; std::map m_expandedNotes; std::map m_deferredNotes; MIDIChordSequence m_graceNotes; diff --git a/include/vrv/gracegrp.h b/include/vrv/gracegrp.h index 5ad51db574a..a5eb580fb6e 100644 --- a/include/vrv/gracegrp.h +++ b/include/vrv/gracegrp.h @@ -36,6 +36,17 @@ class GraceGrp : public LayerElement, public AttColor, public AttGraced, public */ bool IsSupportedChild(Object *object) override; + //----------// + // Functors // + //----------// + + /** + * @name See Object::GenerateMIDIEnd + */ + ///@{ + int GenerateMIDIEnd(FunctorParams *functorParams) override; + ///@} + protected: // private: diff --git a/include/vrv/object.h b/include/vrv/object.h index 754e99eb879..e6a03d3aaae 100644 --- a/include/vrv/object.h +++ b/include/vrv/object.h @@ -1269,6 +1269,7 @@ class Object : public BoundingBox { */ ///@{ virtual int GenerateMIDI(FunctorParams *) { return FUNCTOR_CONTINUE; } + virtual int GenerateMIDIEnd(FunctorParams *) { return FUNCTOR_CONTINUE; } ///@} /** diff --git a/include/vrv/vrvdef.h b/include/vrv/vrvdef.h index 3aa640f3942..d7961c0450f 100644 --- a/include/vrv/vrvdef.h +++ b/include/vrv/vrvdef.h @@ -65,6 +65,8 @@ enum MEIVersion { MEI_UNDEFINED = 0, MEI_2013, MEI_3_0_0, MEI_4_0_0, MEI_4_0_1, #define MIDI_VELOCITY 90 #define MIDI_TEMPO 120 +#define UNACC_GRACENOTE_DUR 27 // in milliseconds + //---------------------------------------------------------------------------- // Object defines //---------------------------------------------------------------------------- diff --git a/src/doc.cpp b/src/doc.cpp index b568ac73f51..f266071b504 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -382,6 +382,7 @@ void Doc::ExportMIDI(smf::MidiFile *midiFile) filters.push_back(&matchLayer); Functor generateMIDI(&Object::GenerateMIDI); + Functor generateMIDIEnd(&Object::GenerateMIDIEnd); GenerateMIDIParams generateMIDIParams(midiFile, &generateMIDI); generateMIDIParams.m_midiChannel = midiChannel; generateMIDIParams.m_midiTrack = midiTrack; @@ -389,7 +390,7 @@ void Doc::ExportMIDI(smf::MidiFile *midiFile) generateMIDIParams.m_currentTempo = tempo; // LogDebug("Exporting track %d ----------------", midiTrack); - this->Process(&generateMIDI, &generateMIDIParams, NULL, &filters); + this->Process(&generateMIDI, &generateMIDIParams, &generateMIDIEnd, &filters); } } } diff --git a/src/gracegrp.cpp b/src/gracegrp.cpp index a3025b90e1f..f09f36bbe97 100644 --- a/src/gracegrp.cpp +++ b/src/gracegrp.cpp @@ -16,11 +16,16 @@ #include "beam.h" #include "chord.h" #include "editorial.h" +#include "functorparams.h" #include "note.h" #include "rest.h" #include "space.h" #include "vrv.h" +//---------------------------------------------------------------------------- + +#include "MidiFile.h" + namespace vrv { //---------------------------------------------------------------------------- @@ -74,4 +79,36 @@ bool GraceGrp::IsSupportedChild(Object *child) return true; } +int GraceGrp::GenerateMIDIEnd(FunctorParams *functorParams) +{ + GenerateMIDIParams *params = vrv_params_cast(functorParams); + assert(params); + + if (!params->m_graceNotes.empty() && (this->GetAttach() == graceGrpLog_ATTACH_pre) && !params->m_accentedGraceNote + && params->m_lastNote) { + double startTime = params->m_totalTime + params->m_lastNote->GetScoreTimeOffset(); + const double graceNoteDur = UNACC_GRACENOTE_DUR * params->m_currentTempo / 60000.0; + const double totalDur = graceNoteDur * params->m_graceNotes.size(); + startTime -= totalDur; + startTime = std::max(startTime, 0.0); + + const int channel = params->m_midiChannel; + int velocity = MIDI_VELOCITY; + if (params->m_lastNote->HasVel()) velocity = params->m_lastNote->GetVel(); + const int tpq = params->m_midiFile->getTPQ(); + + for (const MIDIChord &chord : params->m_graceNotes) { + const double stopTime = startTime + graceNoteDur; + for (char pitch : chord.pitches) { + params->m_midiFile->addNoteOn(params->m_midiTrack, startTime * tpq, channel, pitch, velocity); + params->m_midiFile->addNoteOff(params->m_midiTrack, stopTime * tpq, channel, pitch); + } + startTime = stopTime; + } + + params->m_graceNotes.clear(); + } + return FUNCTOR_CONTINUE; +} + } // namespace vrv diff --git a/src/note.cpp b/src/note.cpp index a4863855837..916b11d7e4c 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -768,9 +768,7 @@ void Note::GenerateGraceNoteMIDI(FunctorParams *functorParams, double startTime, graceNoteDur = totalDur / params->m_graceNotes.size(); } else { - // Unaccented grace notes obtain a fixed duration of 27 ms - constexpr int ms = 27; - graceNoteDur = ms * params->m_currentTempo / 60000.0; + graceNoteDur = UNACC_GRACENOTE_DUR * params->m_currentTempo / 60000.0; const double totalDur = graceNoteDur * params->m_graceNotes.size(); if (startTime >= totalDur) { startTime -= totalDur; @@ -1438,6 +1436,9 @@ int Note::GenerateMIDI(FunctorParams *functorParams) params->m_midiFile->addNoteOff(params->m_midiTrack, stopTime * tpq, channel, pitch); } + // Store reference, i.e. for Nachschlag + params->m_lastNote = this; + return FUNCTOR_SIBLINGS; } From ada6ad4b8065fba90640e82be7fa9dc0026a2aa6 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 16 Dec 2021 06:59:59 +0100 Subject: [PATCH 061/403] Add comment --- src/gracegrp.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gracegrp.cpp b/src/gracegrp.cpp index f09f36bbe97..acef37dc2d8 100644 --- a/src/gracegrp.cpp +++ b/src/gracegrp.cpp @@ -84,6 +84,7 @@ int GraceGrp::GenerateMIDIEnd(FunctorParams *functorParams) GenerateMIDIParams *params = vrv_params_cast(functorParams); assert(params); + // Handling of Nachschlag if (!params->m_graceNotes.empty() && (this->GetAttach() == graceGrpLog_ATTACH_pre) && !params->m_accentedGraceNote && params->m_lastNote) { double startTime = params->m_totalTime + params->m_lastNote->GetScoreTimeOffset(); From 6affb9ddd5d4efa4e50bd9b5fb450f9307b39173 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Fri, 14 Jan 2022 14:50:21 +0100 Subject: [PATCH 062/403] Avoid infinite sameas link recursion --- src/clef.cpp | 6 +++--- src/layerelement.cpp | 23 +++++++++++++---------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/clef.cpp b/src/clef.cpp index 8c3c3e9caeb..6b8d0974eae 100644 --- a/src/clef.cpp +++ b/src/clef.cpp @@ -57,9 +57,9 @@ void Clef::Reset() int Clef::GetClefLocOffset() const { - if (this->HasSameasLink() && this->GetSameasLink()->Is(CLEF)) { - Clef *sameas = vrv_cast(this->GetSameasLink()); - assert(sameas); + // Only resolve simple sameas links to avoid infinite recursion + Clef *sameas = dynamic_cast(this->GetSameasLink()); + if (sameas && !sameas->HasSameasLink()) { return sameas->GetClefLocOffset(); } diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 42f8efdc3a5..cf8b7e2c27e 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -625,12 +625,13 @@ double LayerElement::GetAlignmentDuration( return 0.0; } - if (this->HasSameasLink() && this->GetSameasLink()->IsLayerElement()) { - LayerElement *sameas = vrv_cast(this->GetSameasLink()); - assert(sameas); + // Only resolve simple sameas links to avoid infinite recursion + LayerElement *sameas = dynamic_cast(this->GetSameasLink()); + if (sameas && !sameas->HasSameasLink()) { return sameas->GetAlignmentDuration(mensur, meterSig, notGraceOnly, notationType); } - else if (this->HasInterface(INTERFACE_DURATION)) { + + if (this->HasInterface(INTERFACE_DURATION)) { int num = 1; int numbase = 1; Tuplet *tuplet = dynamic_cast(this->GetFirstAncestor(TUPLET, MAX_TUPLET_DEPTH)); @@ -2489,9 +2490,10 @@ int LayerElement::GenerateMIDI(FunctorParams *functorParams) if (this->IsScoreDefElement()) return FUNCTOR_SIBLINGS; - if (this->HasSameasLink()) { - assert(this->GetSameasLink()); - this->GetSameasLink()->Process(params->m_functor, functorParams); + // Only resolve simple sameas links to avoid infinite recursion + LayerElement *sameas = dynamic_cast(this->GetSameasLink()); + if (sameas && !sameas->HasSameasLink()) { + sameas->Process(params->m_functor, functorParams); } return FUNCTOR_CONTINUE; @@ -2504,9 +2506,10 @@ int LayerElement::GenerateTimemap(FunctorParams *functorParams) if (this->IsScoreDefElement()) return FUNCTOR_SIBLINGS; - if (this->HasSameasLink()) { - assert(this->GetSameasLink()); - this->GetSameasLink()->Process(params->m_functor, functorParams); + // Only resolve simple sameas links to avoid infinite recursion + LayerElement *sameas = dynamic_cast(this->GetSameasLink()); + if (sameas && !sameas->HasSameasLink()) { + sameas->Process(params->m_functor, functorParams); } return FUNCTOR_CONTINUE; From 3916460a6400f159ea5f5fe089dd2894ae36ef2b Mon Sep 17 00:00:00 2001 From: David Bauer Date: Fri, 14 Jan 2022 16:24:01 +0100 Subject: [PATCH 063/403] Fix rebase issues --- src/note.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/note.cpp b/src/note.cpp index 916b11d7e4c..d953d9ffc8f 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -583,10 +583,12 @@ void Note::SetScoreTimeTiedDuration(double scoreTime) m_scoreTimeTiedDuration = scoreTime; } -int Note::GetMIDIPitch(int shift) +int Note::GetMIDIPitch(const int shift) { + int pitch = 0; + if (this->HasPnum()) { - return this->GetPnum(); + pitch = this->GetPnum(); } else if (this->HasPname() || this->HasPnameGes()) { int midiBase = 0; @@ -606,26 +608,23 @@ int Note::GetMIDIPitch(int shift) // Check for accidentals midiBase += this->GetChromaticAlteration(); - // Apply shift, i.e. from transposition instruments - midiBase += shift; - int oct = this->GetOct(); if (this->HasOctGes()) oct = this->GetOctGes(); - return midiBase + (oct + 1) * 12; + pitch = midiBase + (oct + 1) * 12; } else if (this->HasTabCourse()) { // tablature Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); assert(staff); if (staff->m_drawingTuning) { - m_MIDIPitch = staff->m_drawingTuning->CalcPitchNumber( + pitch = staff->m_drawingTuning->CalcPitchNumber( this->GetTabCourse(), this->GetTabFret(), staff->m_drawingNotationType); } } - else { - m_MIDIPitch = 0; - } + + // Apply shift, i.e. from transposition instruments + return pitch + shift; } double Note::GetScoreTimeOnset() const From 739429e61e9fe1cf49b7b8b6fa357fc41ff4b004 Mon Sep 17 00:00:00 2001 From: Paul Overell Date: Fri, 14 Jan 2022 15:47:39 +0000 Subject: [PATCH 064/403] MusicXML import tablature beams. --- src/iomusxml.cpp | 85 ++++++++++++++++++++++++------------------------ 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index f3f88117899..1ac67bda767 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -2552,48 +2552,44 @@ void MusicXmlInput::ReadMusicXmlNote( const int dots = (int)node.select_nodes("dot").size(); short int tremSlashNum = -1; - pugi::xpath_node tremolo; - - // TODO Tablature: support beams and tuplets. Neither nor support child . - if (!isTablature) { - ReadMusicXmlBeamsAndTuplets(node, layer, isChord); - - // beam start - bool beamStart = node.select_node("beam[@number='1'][text()='begin']"); - // tremolos - tremolo = notations.node().select_node("ornaments/tremolo"); - - if (tremolo) { - if (HasAttributeWithValue(tremolo.node(), "type", "start")) { - if (!isChord) { - FTrem *fTrem = new FTrem(); - AddLayerElement(layer, fTrem); - m_elementStackMap.at(layer).push_back(fTrem); - int beamFloatNum = tremolo.node().text().as_int(); // number of floating beams - int beamAttachedNum = 0; // number of attached beams - while (beamStart && beamAttachedNum < 8) { // count number of (attached) beams, max 8 - std::ostringstream o; - o << "beam[@number='" << ++beamAttachedNum + 1 << "'][text()='begin']"; - beamStart = node.select_node(o.str().c_str()); - } - fTrem->SetBeams(beamFloatNum + beamAttachedNum); - fTrem->SetBeamsFloat(beamFloatNum); + + ReadMusicXmlBeamsAndTuplets(node, layer, isChord); + + // beam start + bool beamStart = node.select_node("beam[@number='1'][text()='begin']"); + // tremolos + pugi::xpath_node tremolo = notations.node().select_node("ornaments/tremolo"); + + if (tremolo) { + if (HasAttributeWithValue(tremolo.node(), "type", "start")) { + if (!isChord) { + FTrem *fTrem = new FTrem(); + AddLayerElement(layer, fTrem); + m_elementStackMap.at(layer).push_back(fTrem); + int beamFloatNum = tremolo.node().text().as_int(); // number of floating beams + int beamAttachedNum = 0; // number of attached beams + while (beamStart && beamAttachedNum < 8) { // count number of (attached) beams, max 8 + std::ostringstream o; + o << "beam[@number='" << ++beamAttachedNum + 1 << "'][text()='begin']"; + beamStart = node.select_node(o.str().c_str()); } - } - else if (!HasAttributeWithValue(tremolo.node(), "type", "stop")) { - // this is default tremolo type in MusicXML - tremSlashNum = tremolo.node().text().as_int(); - if (!isChord) { - BTrem *bTrem = new BTrem(); - AddLayerElement(layer, bTrem); - m_elementStackMap.at(layer).push_back(bTrem); - if (HasAttributeWithValue(tremolo.node(), "type", "unmeasured")) { - bTrem->SetForm(bTremLog_FORM_unmeas); - tremSlashNum = 0; - } - else { - bTrem->SetForm(bTremLog_FORM_meas); - } + fTrem->SetBeams(beamFloatNum + beamAttachedNum); + fTrem->SetBeamsFloat(beamFloatNum); + } + } + else if (!HasAttributeWithValue(tremolo.node(), "type", "stop")) { + // this is default tremolo type in MusicXML + tremSlashNum = tremolo.node().text().as_int(); + if (!isChord) { + BTrem *bTrem = new BTrem(); + AddLayerElement(layer, bTrem); + m_elementStackMap.at(layer).push_back(bTrem); + if (HasAttributeWithValue(tremolo.node(), "type", "unmeasured")) { + bTrem->SetForm(bTremLog_FORM_unmeas); + tremSlashNum = 0; + } + else { + bTrem->SetForm(bTremLog_FORM_meas); } } } @@ -3480,7 +3476,10 @@ void MusicXmlInput::ReadMusicXmlNote( Chord *chord = dynamic_cast(element); chord->SetBreaksec(breakSec); } - // TODO Tablature: support beams, does not support child + else if (element->Is(TABGRP)) { + TabGrp *tabGrp = vrv_cast(element); + tabGrp->SetBreaksec(breakSec); + } } else { RemoveLastFromStack(BEAM, layer); @@ -3623,6 +3622,8 @@ void MusicXmlInput::ReadMusicXmlBeamsAndTuplets(const pugi::xml_node &node, Laye void MusicXmlInput::ReadMusicXmlTupletStart(const pugi::xml_node &node, const pugi::xml_node &tupletStart, Layer *layer) { + // TODO does not support child + if (!tupletStart) return; Tuplet *tuplet = new Tuplet(); From 8886fc0cef848d93519f8653f32aea5c4d347c67 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Mon, 17 Jan 2022 09:49:20 +0100 Subject: [PATCH 065/403] Add argument default --- include/vrv/note.h | 2 +- src/featureextractor.cpp | 2 +- src/note.cpp | 2 +- src/toolkit.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/vrv/note.h b/include/vrv/note.h index 5abe80b163d..ae131487a7b 100644 --- a/include/vrv/note.h +++ b/include/vrv/note.h @@ -230,7 +230,7 @@ class Note : public LayerElement, /** * MIDI pitch */ - int GetMIDIPitch(int shift); + int GetMIDIPitch(int shift = 0); public: //----------------// diff --git a/src/featureextractor.cpp b/src/featureextractor.cpp index 31feb75bc3d..788cdd1564d 100644 --- a/src/featureextractor.cpp +++ b/src/featureextractor.cpp @@ -102,7 +102,7 @@ void FeatureExtractor::Extract(Object *object, GenerateFeaturesParams *params) // We have a previous note, so we can calculate an interval if (m_previousNote) { - std::string interval = StringFormat("%d", note->GetMIDIPitch(0) - m_previousNote->GetMIDIPitch(0)); + std::string interval = StringFormat("%d", note->GetMIDIPitch() - m_previousNote->GetMIDIPitch()); m_intervals << interval; jsonxx::Array intervalsIds; intervalsIds << m_previousNote->GetUuid(); diff --git a/src/note.cpp b/src/note.cpp index d953d9ffc8f..06b37c1a374 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -553,7 +553,7 @@ bool Note::IsVisible() const bool Note::IsEnharmonicWith(Note *note) { - return (this->GetMIDIPitch(0) == note->GetMIDIPitch(0)); + return (this->GetMIDIPitch() == note->GetMIDIPitch()); } void Note::SetScoreTimeOnset(double scoreTime) diff --git a/src/toolkit.cpp b/src/toolkit.cpp index 6d1a6689a41..d482e7360dd 100644 --- a/src/toolkit.cpp +++ b/src/toolkit.cpp @@ -1644,7 +1644,7 @@ std::string Toolkit::GetMIDIValuesForElement(const std::string &xmlId) Note *note = vrv_cast(element); assert(note); const int timeOfElement = this->GetTimeForElement(xmlId); - const int pitchOfElement = note->GetMIDIPitch(0); + const int pitchOfElement = note->GetMIDIPitch(); const int durationOfElement = note->GetRealTimeOffsetMilliseconds() - note->GetRealTimeOnsetMilliseconds(); o << "time" << timeOfElement; o << "pitch" << pitchOfElement; From d5f06e63734f74dd9a0e195830434019efd4252f Mon Sep 17 00:00:00 2001 From: David Bauer Date: Mon, 17 Jan 2022 10:23:07 +0100 Subject: [PATCH 066/403] Adjust type --- src/gracegrp.cpp | 2 +- src/note.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gracegrp.cpp b/src/gracegrp.cpp index acef37dc2d8..d5611e15dd8 100644 --- a/src/gracegrp.cpp +++ b/src/gracegrp.cpp @@ -100,7 +100,7 @@ int GraceGrp::GenerateMIDIEnd(FunctorParams *functorParams) for (const MIDIChord &chord : params->m_graceNotes) { const double stopTime = startTime + graceNoteDur; - for (char pitch : chord.pitches) { + for (int pitch : chord.pitches) { params->m_midiFile->addNoteOn(params->m_midiTrack, startTime * tpq, channel, pitch, velocity); params->m_midiFile->addNoteOff(params->m_midiTrack, stopTime * tpq, channel, pitch); } diff --git a/src/note.cpp b/src/note.cpp index 06b37c1a374..9d409fa4eb2 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -779,7 +779,7 @@ void Note::GenerateGraceNoteMIDI(FunctorParams *functorParams, double startTime, for (const MIDIChord &chord : params->m_graceNotes) { const double stopTime = startTime + graceNoteDur; - for (char pitch : chord.pitches) { + for (int pitch : chord.pitches) { params->m_midiFile->addNoteOn(params->m_midiTrack, startTime * tpq, channel, pitch, velocity); params->m_midiFile->addNoteOff(params->m_midiTrack, stopTime * tpq, channel, pitch); } From be01c453d961a9cc05ab90dfccabd36f29db1ec6 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Mon, 17 Jan 2022 12:32:30 +0100 Subject: [PATCH 067/403] FindStaff function --- include/vrv/layerelement.h | 8 ++++++++ src/layerelement.cpp | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index 1f92dd8211a..6c52f85a487 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -29,6 +29,9 @@ class MeterSig; class Staff; class StaffAlignment; +// Helper enums +enum StaffSearch { ANCESTOR_ONLY = 0, RESOLVE_CROSSSTAFF }; + //---------------------------------------------------------------------------- // LayerElement //---------------------------------------------------------------------------- @@ -179,6 +182,11 @@ class LayerElement : public Object, */ Alignment *GetAlignment() const { return m_alignment; } + /** + * Find the ancestor or cross staff + */ + Staff *FindStaff(StaffSearch strategy); + /** * Look for a cross or a a parent LayerElement (note, chord, rest) with a cross staff. * Also set the corresponding m_crossLayer to layer if a cross staff is found. diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 42f8efdc3a5..aad4767da82 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -242,6 +242,18 @@ int LayerElement::GetOriginalLayerN() return layerN; } +Staff *LayerElement::FindStaff(const StaffSearch strategy) +{ + Staff *staff = NULL; + if (strategy == RESOLVE_CROSSSTAFF) { + Layer *layer = NULL; + staff = this->GetCrossStaff(layer); + } + if (!staff) staff = vrv_cast(this->GetFirstAncestor(STAFF)); + assert(staff); + return staff; +} + Staff *LayerElement::GetCrossStaff(Layer *&layer) const { if (m_crossStaff) { From 5b3c9d603fbf8c99871db295d836da8b073d0623 Mon Sep 17 00:00:00 2001 From: Paul Overell Date: Fri, 14 Jan 2022 15:47:39 +0000 Subject: [PATCH 068/403] MusicXML import tablature beams. --- src/iomusxml.cpp | 85 ++++++++++++++++++++++++------------------------ 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index f3f88117899..1ac67bda767 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -2552,48 +2552,44 @@ void MusicXmlInput::ReadMusicXmlNote( const int dots = (int)node.select_nodes("dot").size(); short int tremSlashNum = -1; - pugi::xpath_node tremolo; - - // TODO Tablature: support beams and tuplets. Neither nor support child . - if (!isTablature) { - ReadMusicXmlBeamsAndTuplets(node, layer, isChord); - - // beam start - bool beamStart = node.select_node("beam[@number='1'][text()='begin']"); - // tremolos - tremolo = notations.node().select_node("ornaments/tremolo"); - - if (tremolo) { - if (HasAttributeWithValue(tremolo.node(), "type", "start")) { - if (!isChord) { - FTrem *fTrem = new FTrem(); - AddLayerElement(layer, fTrem); - m_elementStackMap.at(layer).push_back(fTrem); - int beamFloatNum = tremolo.node().text().as_int(); // number of floating beams - int beamAttachedNum = 0; // number of attached beams - while (beamStart && beamAttachedNum < 8) { // count number of (attached) beams, max 8 - std::ostringstream o; - o << "beam[@number='" << ++beamAttachedNum + 1 << "'][text()='begin']"; - beamStart = node.select_node(o.str().c_str()); - } - fTrem->SetBeams(beamFloatNum + beamAttachedNum); - fTrem->SetBeamsFloat(beamFloatNum); + + ReadMusicXmlBeamsAndTuplets(node, layer, isChord); + + // beam start + bool beamStart = node.select_node("beam[@number='1'][text()='begin']"); + // tremolos + pugi::xpath_node tremolo = notations.node().select_node("ornaments/tremolo"); + + if (tremolo) { + if (HasAttributeWithValue(tremolo.node(), "type", "start")) { + if (!isChord) { + FTrem *fTrem = new FTrem(); + AddLayerElement(layer, fTrem); + m_elementStackMap.at(layer).push_back(fTrem); + int beamFloatNum = tremolo.node().text().as_int(); // number of floating beams + int beamAttachedNum = 0; // number of attached beams + while (beamStart && beamAttachedNum < 8) { // count number of (attached) beams, max 8 + std::ostringstream o; + o << "beam[@number='" << ++beamAttachedNum + 1 << "'][text()='begin']"; + beamStart = node.select_node(o.str().c_str()); } - } - else if (!HasAttributeWithValue(tremolo.node(), "type", "stop")) { - // this is default tremolo type in MusicXML - tremSlashNum = tremolo.node().text().as_int(); - if (!isChord) { - BTrem *bTrem = new BTrem(); - AddLayerElement(layer, bTrem); - m_elementStackMap.at(layer).push_back(bTrem); - if (HasAttributeWithValue(tremolo.node(), "type", "unmeasured")) { - bTrem->SetForm(bTremLog_FORM_unmeas); - tremSlashNum = 0; - } - else { - bTrem->SetForm(bTremLog_FORM_meas); - } + fTrem->SetBeams(beamFloatNum + beamAttachedNum); + fTrem->SetBeamsFloat(beamFloatNum); + } + } + else if (!HasAttributeWithValue(tremolo.node(), "type", "stop")) { + // this is default tremolo type in MusicXML + tremSlashNum = tremolo.node().text().as_int(); + if (!isChord) { + BTrem *bTrem = new BTrem(); + AddLayerElement(layer, bTrem); + m_elementStackMap.at(layer).push_back(bTrem); + if (HasAttributeWithValue(tremolo.node(), "type", "unmeasured")) { + bTrem->SetForm(bTremLog_FORM_unmeas); + tremSlashNum = 0; + } + else { + bTrem->SetForm(bTremLog_FORM_meas); } } } @@ -3480,7 +3476,10 @@ void MusicXmlInput::ReadMusicXmlNote( Chord *chord = dynamic_cast(element); chord->SetBreaksec(breakSec); } - // TODO Tablature: support beams, does not support child + else if (element->Is(TABGRP)) { + TabGrp *tabGrp = vrv_cast(element); + tabGrp->SetBreaksec(breakSec); + } } else { RemoveLastFromStack(BEAM, layer); @@ -3623,6 +3622,8 @@ void MusicXmlInput::ReadMusicXmlBeamsAndTuplets(const pugi::xml_node &node, Laye void MusicXmlInput::ReadMusicXmlTupletStart(const pugi::xml_node &node, const pugi::xml_node &tupletStart, Layer *layer) { + // TODO does not support child + if (!tupletStart) return; Tuplet *tuplet = new Tuplet(); From a0bc703c618692a4b555bcbfe0ff63b261b6f1a0 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 17 Jan 2022 15:55:38 +0100 Subject: [PATCH 069/403] Draw continuous staff lines for French and Italian tablature. Closes #2526 --- src/view_page.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/view_page.cpp b/src/view_page.cpp index 9e5cbb34582..f0cfee5c0c1 100644 --- a/src/view_page.cpp +++ b/src/view_page.cpp @@ -1224,9 +1224,12 @@ void View::DrawStaffLines(DeviceContext *dc, Staff *staff, Measure *measure, Sys y2 -= m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); } else { + const bool isFrenchOrItalianTablature = (staff->m_drawingNotationType == NOTATIONTYPE_tab_lute_french + || staff->m_drawingNotationType == NOTATIONTYPE_tab_lute_italian); SegmentedLine line(x1, x2); - // We do not need to do this during layout calculation - and only with tablature - if (!dc->Is(BBOX_DEVICE_CONTEXT) && staff->IsTablature()) { + // We do not need to do this during layout calculation - and only with tablature but not for French or + // Italian tablature + if (!dc->Is(BBOX_DEVICE_CONTEXT) && staff->IsTablature() && !isFrenchOrItalianTablature) { Object fullLine; fullLine.SetParent(system); fullLine.UpdateContentBBoxY(y1 + (lineWidth / 2), y1 - (lineWidth / 2)); From 7d917bc403b93c86919567afc6e4f475e0e9785e Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 18 Jan 2022 09:35:36 +0100 Subject: [PATCH 070/403] Apply to resolve cross staff --- src/accid.cpp | 6 ++---- src/chord.cpp | 15 +++------------ src/horizontalaligner.cpp | 7 +------ src/layer.cpp | 16 ++-------------- src/layerelement.cpp | 26 ++++++-------------------- src/note.cpp | 5 +---- src/slur.cpp | 6 +----- 7 files changed, 16 insertions(+), 65 deletions(-) diff --git a/src/accid.cpp b/src/accid.cpp index 0af3d0ba303..3999d5b26a1 100644 --- a/src/accid.cpp +++ b/src/accid.cpp @@ -121,11 +121,9 @@ std::wstring Accid::GetSymbolStr(const data_NOTATIONTYPE notationType) const void Accid::AdjustToLedgerLines(Doc *doc, LayerElement *element, int staffSize) { - Layer *layer = NULL; - Staff *staff = element->GetCrossStaff(layer); - if (!staff) staff = vrv_cast(element->GetFirstAncestor(STAFF)); - + Staff *staff = element->FindStaff(RESOLVE_CROSSSTAFF); Chord *chord = vrv_cast(this->GetFirstAncestor(CHORD)); + if (element->Is(NOTE) && chord && chord->HasAdjacentNotesInStaff(staff)) { const int horizontalMargin = 4 * doc->GetDrawingStemWidth(staffSize); const int drawingUnit = doc->GetDrawingUnit(staffSize); diff --git a/src/chord.cpp b/src/chord.cpp index d9fcf865ab8..22fb033ac14 100644 --- a/src/chord.cpp +++ b/src/chord.cpp @@ -535,10 +535,7 @@ std::list Chord::GetAdjacentNotesList(Staff *staff, int loc) Note *note = vrv_cast(obj); assert(note); - Layer *layer = NULL; - Staff *noteStaff = note->GetCrossStaff(layer); - if (!noteStaff) noteStaff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(noteStaff); + Staff *noteStaff = note->FindStaff(RESOLVE_CROSSSTAFF); if (noteStaff != staff) continue; const int locDiff = note->GetDrawingLoc() - loc; @@ -747,10 +744,7 @@ MapOfNoteLocs Chord::CalcNoteLocations(NotePredicate predicate) if (predicate && !predicate(note)) continue; - Layer *layer = NULL; - Staff *staff = note->GetCrossStaff(layer); - if (!staff) staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = note->FindStaff(RESOLVE_CROSSSTAFF); noteLocations[staff].insert(note->GetDrawingLoc()); } @@ -918,10 +912,7 @@ int Chord::AdjustCrossStaffContent(FunctorParams *functorParams) // Check if chord spreads across several staves std::list extremalStaves; for (Note *note : { this->GetTopNote(), this->GetBottomNote() }) { - Layer *layer = NULL; - Staff *staff = note->GetCrossStaff(layer); - if (!staff) staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = note->FindStaff(RESOLVE_CROSSSTAFF); extremalStaves.push_back(staff); } assert(extremalStaves.size() == 2); diff --git a/src/horizontalaligner.cpp b/src/horizontalaligner.cpp index d0ba59e331e..c2aceeb0e8b 100644 --- a/src/horizontalaligner.cpp +++ b/src/horizontalaligner.cpp @@ -1339,12 +1339,7 @@ int AlignmentReference::AdjustLayersEnd(FunctorParams *functorParams) // Determine staff if (params->m_current.empty()) return FUNCTOR_CONTINUE; LayerElement *firstElem = params->m_current.at(0); - Layer *layer = NULL; - Staff *staff = firstElem->GetCrossStaff(layer); - if (!staff) { - staff = vrv_cast(firstElem->GetFirstAncestor(STAFF)); - } - assert(staff); + Staff *staff = firstElem->FindStaff(RESOLVE_CROSSSTAFF); const int extension = params->m_doc->GetDrawingLedgerLineExtension(staff->m_drawingStaffSize, firstElem->GetDrawingCueSize()); diff --git a/src/layer.cpp b/src/layer.cpp index 98235e6eb06..dd49cf7da61 100644 --- a/src/layer.cpp +++ b/src/layer.cpp @@ -307,13 +307,7 @@ std::set Layer::GetLayersNForTimeSpanOf(LayerElement *element) Alignment *alignment = element->GetAlignment(); assert(alignment); - Layer *layer = NULL; - Staff *staff = element->GetCrossStaff(layer); - if (!staff) { - staff = dynamic_cast(element->GetFirstAncestor(STAFF)); - } - // At this stage we have the parent or the cross-staff - assert(staff); + Staff *staff = element->FindStaff(RESOLVE_CROSSSTAFF); return this->GetLayersNInTimeSpan(alignment->GetTime(), element->GetAlignmentDuration(), measure, staff->GetN()); } @@ -381,13 +375,7 @@ ListOfObjects Layer::GetLayerElementsForTimeSpanOf(LayerElement *element, bool e return {}; } - Layer *layer = NULL; - Staff *staff = element->GetCrossStaff(layer); - if (!staff) { - staff = static_cast(element->GetFirstAncestor(STAFF)); - } - // At this stage we have the parent or the cross-staff - assert(staff); + Staff *staff = element->FindStaff(RESOLVE_CROSSSTAFF); return GetLayerElementsInTimeSpan(time, duration, measure, staff->GetN(), excludeCurrent); } diff --git a/src/layerelement.cpp b/src/layerelement.cpp index aad4767da82..111f11457ee 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -282,11 +282,7 @@ data_STAFFREL_basic LayerElement::GetCrossStaffRel() void LayerElement::GetOverflowStaffAlignments(StaffAlignment *&above, StaffAlignment *&below) { - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - Layer *crossLayer = NULL; - Staff *crossStaff = this->GetCrossStaff(crossLayer); - if (crossStaff) staff = crossStaff; - assert(staff); + Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); // By default use the alignment of the staff above = staff->GetAlignment(); @@ -2375,21 +2371,15 @@ int LayerElement::FindSpannedLayerElements(FunctorParams *functorParams) // Skip elements aligned at start/end, but on a different staff if ((this->GetAlignment() == start->GetAlignment()) && !start->Is(TIMESTAMP_ATTR)) { - Layer *layer = NULL; - Staff *staff = this->GetCrossStaff(layer); - if (!staff) staff = vrv_cast(this->GetFirstAncestor(STAFF)); - Staff *startStaff = start->GetCrossStaff(layer); - if (!startStaff) startStaff = vrv_cast(start->GetFirstAncestor(STAFF)); + Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); + Staff *startStaff = start->FindStaff(RESOLVE_CROSSSTAFF); if (staff->GetN() != startStaff->GetN()) { return FUNCTOR_CONTINUE; } } if ((this->GetAlignment() == end->GetAlignment()) && !end->Is(TIMESTAMP_ATTR)) { - Layer *layer = NULL; - Staff *staff = this->GetCrossStaff(layer); - if (!staff) staff = vrv_cast(this->GetFirstAncestor(STAFF)); - Staff *endStaff = end->GetCrossStaff(layer); - if (!endStaff) endStaff = vrv_cast(end->GetFirstAncestor(STAFF)); + Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); + Staff *endStaff = end->FindStaff(RESOLVE_CROSSSTAFF); if (staff->GetN() != endStaff->GetN()) { return FUNCTOR_CONTINUE; } @@ -2576,11 +2566,7 @@ int LayerElement::PrepareDuration(FunctorParams *functorParams) durInterface->SetDurDefault(params->m_durDefault); // Check if there is a duration default for the staff if (!params->m_durDefaultForStaffN.empty()) { - Layer *layer = NULL; - Staff *staff = this->GetCrossStaff(layer); - if (!staff) staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); - + Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); if (params->m_durDefaultForStaffN.count(staff->GetN()) > 0) { durInterface->SetDurDefault(params->m_durDefaultForStaffN.at(staff->GetN())); } diff --git a/src/note.cpp b/src/note.cpp index 975a707b89d..d29d4c622fc 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -1062,10 +1062,7 @@ MapOfNoteLocs Note::CalcNoteLocations(NotePredicate predicate) { if (predicate && !predicate(this)) return {}; - Layer *layer = NULL; - Staff *staff = this->GetCrossStaff(layer); - if (!staff) staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); MapOfNoteLocs noteLocations; noteLocations[staff] = { this->GetDrawingLoc() }; diff --git a/src/slur.cpp b/src/slur.cpp index f836b072574..9dba6d151e5 100644 --- a/src/slur.cpp +++ b/src/slur.cpp @@ -275,11 +275,7 @@ Staff *Slur::CalculateExtremalStaff(Staff *staff, int xMin, int xMax, char spann // The floating curve positioner of cross staff slurs should live in the upper/lower staff alignment // corresponding to whether the slur is curved above/below auto adaptStaff = [&extremalStaff, curveDir](LayerElement *element) { - Layer *elementLayer = NULL; - Staff *elementStaff = element->GetCrossStaff(elementLayer); - if (!elementStaff) elementStaff = vrv_cast(element->GetFirstAncestor(STAFF)); - assert(elementStaff); - + Staff *elementStaff = element->FindStaff(RESOLVE_CROSSSTAFF); if ((curveDir == curvature_CURVEDIR_above) && (elementStaff->GetN() < extremalStaff->GetN())) { extremalStaff = elementStaff; } From 5c39e65feaf84ea763a1c84dddc27c6a9b74a451 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 18 Jan 2022 10:05:01 +0100 Subject: [PATCH 071/403] Adjust positioning of tablature glyphs --- include/vrv/vrvdef.h | 2 +- src/view_tab.cpp | 28 +++++++++++++++++----------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/include/vrv/vrvdef.h b/include/vrv/vrvdef.h index d7961c0450f..d234364bbb6 100644 --- a/include/vrv/vrvdef.h +++ b/include/vrv/vrvdef.h @@ -614,7 +614,7 @@ enum { KEY_LEFT = 37, KEY_UP = 38, KEY_RIGHT = 39, KEY_DOWN = 40 }; // Temporary - to be made an option? //---------------------------------------------------------------------------- -#define TABLATURE_STAFF_RATIO 1.3 +#define TABLATURE_STAFF_RATIO 1.75 #define SUPER_SCRIPT_FACTOR 0.58 #define SUPER_SCRIPT_POSITION -0.20 // lowered down from the midline diff --git a/src/view_tab.cpp b/src/view_tab.cpp index 47dfe04c8d1..693c525f875 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -105,12 +105,15 @@ void View::DrawTabNote(DeviceContext *dc, LayerElement *element, Layer *layer, S else { std::wstring fret = note->GetTabFretString(staff->m_drawingNotationType); - wchar_t code = (staff->m_drawingNotationType == NOTATIONTYPE_tab_lute_french) ? SMUFL_EBC0_luteFrenchFretA - : SMUFL_EBE0_luteItalianFret0; - int radius = m_doc->GetGlyphWidth(SMUFL_E0A4_noteheadBlack, glyphSize, false); - y -= (m_doc->GetGlyphHeight(code, glyphSize, drawingCueSize) / 2); - x += radius - (m_doc->GetGlyphWidth(code, glyphSize, drawingCueSize) / 2); - + // Center for italian tablature + if (staff->m_drawingNotationType == NOTATIONTYPE_tab_lute_italian) { + y -= (m_doc->GetGlyphHeight(SMUFL_EBE0_luteItalianFret0, glyphSize, drawingCueSize) / 2); + } + // Above the line for french tablature + else if (staff->m_drawingNotationType == NOTATIONTYPE_tab_lute_french) { + y -= m_doc->GetDrawingUnit(staff->m_drawingStaffSize) - m_doc->GetDrawingStaffLineWidth(staff->m_drawingStaffSize); + } + dc->SetFont(m_doc->GetDrawingSmuflFont(glyphSize, false)); DrawSmuflString(dc, x, y, fret, HORIZONTALALIGNMENT_center, glyphSize); dc->ResetFont(); @@ -139,7 +142,13 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, int x = element->GetDrawingX(); int y = element->GetDrawingY(); - y += m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * 1.5; + + double spacingRatio = 1.0; + if (staff->m_drawingNotationType == NOTATIONTYPE_tab_lute_french) { + spacingRatio = 2.0; + } + y += m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * spacingRatio; + int drawingDur = (tabGrp->GetDurGes() != DURATION_NONE) ? tabGrp->GetActualDurGes() : tabGrp->GetActualDur(); int glyphSize = staff->m_drawingStaffSize / TABLATURE_STAFF_RATIO; @@ -151,9 +160,6 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, x + m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) / 2, y + height); } else { - int radius = m_doc->GetGlyphWidth(SMUFL_E0A4_noteheadBlack, glyphSize, false) / 2; - x += radius; - int symc = 0; switch (drawingDur) { case DUR_2: symc = SMUFL_EBA7_luteDurationWhole; break; @@ -170,7 +176,7 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, y += m_doc->GetDrawingUnit(glyphSize) * 0.5; x += m_doc->GetDrawingUnit(glyphSize); for (int i = 0; i < tabGrp->GetDots(); ++i) { - DrawDot(dc, x, y, glyphSize / 2); + DrawDot(dc, x, y, glyphSize * 2 / 3); // HARDCODED x += m_doc->GetDrawingUnit(glyphSize) * 0.75; } From f3095d2df184b7d575d72d34c7b87cb3e89577f8 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 18 Jan 2022 10:05:47 +0100 Subject: [PATCH 072/403] Regenerate fonts with Leipzig 5.2.65 --- data/Leipzig.xml | 46 ++--- data/Leipzig/EBC0-luteFrenchFretA.xml | 2 +- data/Leipzig/EBC1-luteFrenchFretB.xml | 2 +- data/Leipzig/EBC2-luteFrenchFretC.xml | 2 +- data/Leipzig/EBC3-luteFrenchFretD.xml | 2 +- data/Leipzig/EBC4-luteFrenchFretE.xml | 2 +- data/Leipzig/EBC5-luteFrenchFretF.xml | 2 +- data/Leipzig/EBC6-luteFrenchFretG.xml | 2 +- data/Leipzig/EBC7-luteFrenchFretH.xml | 2 +- data/Leipzig/EBC8-luteFrenchFretI.xml | 2 +- data/Leipzig/EBC9-luteFrenchFretK.xml | 2 +- data/Leipzig/EBCA-luteFrenchFretL.xml | 2 +- data/Leipzig/EBCB-luteFrenchFretM.xml | 2 +- data/Leipzig/EBCC-luteFrenchFretN.xml | 2 +- data/Leipzig/EBE0-luteItalianFret0.xml | 2 +- data/Leipzig/EBE1-luteItalianFret1.xml | 2 +- data/Leipzig/EBE2-luteItalianFret2.xml | 2 +- data/Leipzig/EBE3-luteItalianFret3.xml | 2 +- data/Leipzig/EBE4-luteItalianFret4.xml | 2 +- data/Leipzig/EBE5-luteItalianFret5.xml | 2 +- data/Leipzig/EBE6-luteItalianFret6.xml | 2 +- data/Leipzig/EBE7-luteItalianFret7.xml | 2 +- data/Leipzig/EBE8-luteItalianFret8.xml | 2 +- data/Leipzig/EBE9-luteItalianFret9.xml | 2 +- fonts/Leipzig.svg | 225 +++++++++++++++++-------- 25 files changed, 203 insertions(+), 114 deletions(-) diff --git a/data/Leipzig.xml b/data/Leipzig.xml index 6833f973d3b..05998076264 100644 --- a/data/Leipzig.xml +++ b/data/Leipzig.xml @@ -349,16 +349,16 @@ - - - - - - - - - - + + + + + + + + + + @@ -369,19 +369,19 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/data/Leipzig/EBC0-luteFrenchFretA.xml b/data/Leipzig/EBC0-luteFrenchFretA.xml index 3fe5c95190b..fa6f1af4a25 100644 --- a/data/Leipzig/EBC0-luteFrenchFretA.xml +++ b/data/Leipzig/EBC0-luteFrenchFretA.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBC1-luteFrenchFretB.xml b/data/Leipzig/EBC1-luteFrenchFretB.xml index 563e1d359c7..f54751de894 100644 --- a/data/Leipzig/EBC1-luteFrenchFretB.xml +++ b/data/Leipzig/EBC1-luteFrenchFretB.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBC2-luteFrenchFretC.xml b/data/Leipzig/EBC2-luteFrenchFretC.xml index 61402124cf0..f14b6fec755 100644 --- a/data/Leipzig/EBC2-luteFrenchFretC.xml +++ b/data/Leipzig/EBC2-luteFrenchFretC.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBC3-luteFrenchFretD.xml b/data/Leipzig/EBC3-luteFrenchFretD.xml index a4bf118098e..11dfb08f562 100644 --- a/data/Leipzig/EBC3-luteFrenchFretD.xml +++ b/data/Leipzig/EBC3-luteFrenchFretD.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBC4-luteFrenchFretE.xml b/data/Leipzig/EBC4-luteFrenchFretE.xml index 8319faa9c1f..07334e3fe75 100644 --- a/data/Leipzig/EBC4-luteFrenchFretE.xml +++ b/data/Leipzig/EBC4-luteFrenchFretE.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBC5-luteFrenchFretF.xml b/data/Leipzig/EBC5-luteFrenchFretF.xml index 9597a3f3085..85918e4303c 100644 --- a/data/Leipzig/EBC5-luteFrenchFretF.xml +++ b/data/Leipzig/EBC5-luteFrenchFretF.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBC6-luteFrenchFretG.xml b/data/Leipzig/EBC6-luteFrenchFretG.xml index 21661830b6e..c59e8b060fb 100644 --- a/data/Leipzig/EBC6-luteFrenchFretG.xml +++ b/data/Leipzig/EBC6-luteFrenchFretG.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBC7-luteFrenchFretH.xml b/data/Leipzig/EBC7-luteFrenchFretH.xml index 698a557ddca..6c89618043b 100644 --- a/data/Leipzig/EBC7-luteFrenchFretH.xml +++ b/data/Leipzig/EBC7-luteFrenchFretH.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBC8-luteFrenchFretI.xml b/data/Leipzig/EBC8-luteFrenchFretI.xml index 5a4d00aaba0..06aaa70515a 100644 --- a/data/Leipzig/EBC8-luteFrenchFretI.xml +++ b/data/Leipzig/EBC8-luteFrenchFretI.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBC9-luteFrenchFretK.xml b/data/Leipzig/EBC9-luteFrenchFretK.xml index bbc1d480de1..216d5fdfdb8 100644 --- a/data/Leipzig/EBC9-luteFrenchFretK.xml +++ b/data/Leipzig/EBC9-luteFrenchFretK.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBCA-luteFrenchFretL.xml b/data/Leipzig/EBCA-luteFrenchFretL.xml index 9f67006d9c4..0a7ba912be2 100644 --- a/data/Leipzig/EBCA-luteFrenchFretL.xml +++ b/data/Leipzig/EBCA-luteFrenchFretL.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBCB-luteFrenchFretM.xml b/data/Leipzig/EBCB-luteFrenchFretM.xml index 6919026ea25..4bd0a492e65 100644 --- a/data/Leipzig/EBCB-luteFrenchFretM.xml +++ b/data/Leipzig/EBCB-luteFrenchFretM.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBCC-luteFrenchFretN.xml b/data/Leipzig/EBCC-luteFrenchFretN.xml index e15e9c8261d..bf448db58c5 100644 --- a/data/Leipzig/EBCC-luteFrenchFretN.xml +++ b/data/Leipzig/EBCC-luteFrenchFretN.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBE0-luteItalianFret0.xml b/data/Leipzig/EBE0-luteItalianFret0.xml index fd66643bc6c..0f2a8b89085 100644 --- a/data/Leipzig/EBE0-luteItalianFret0.xml +++ b/data/Leipzig/EBE0-luteItalianFret0.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBE1-luteItalianFret1.xml b/data/Leipzig/EBE1-luteItalianFret1.xml index 8f961af4c81..fc86101061b 100644 --- a/data/Leipzig/EBE1-luteItalianFret1.xml +++ b/data/Leipzig/EBE1-luteItalianFret1.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBE2-luteItalianFret2.xml b/data/Leipzig/EBE2-luteItalianFret2.xml index f4fca180b72..658537028da 100644 --- a/data/Leipzig/EBE2-luteItalianFret2.xml +++ b/data/Leipzig/EBE2-luteItalianFret2.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBE3-luteItalianFret3.xml b/data/Leipzig/EBE3-luteItalianFret3.xml index 48f84b3c34d..0700c87b51a 100644 --- a/data/Leipzig/EBE3-luteItalianFret3.xml +++ b/data/Leipzig/EBE3-luteItalianFret3.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBE4-luteItalianFret4.xml b/data/Leipzig/EBE4-luteItalianFret4.xml index bc18da4ff7a..36e893c74fd 100644 --- a/data/Leipzig/EBE4-luteItalianFret4.xml +++ b/data/Leipzig/EBE4-luteItalianFret4.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBE5-luteItalianFret5.xml b/data/Leipzig/EBE5-luteItalianFret5.xml index bed3b256945..bb0a7f7fbd8 100644 --- a/data/Leipzig/EBE5-luteItalianFret5.xml +++ b/data/Leipzig/EBE5-luteItalianFret5.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBE6-luteItalianFret6.xml b/data/Leipzig/EBE6-luteItalianFret6.xml index d2b50c3d637..24f00e73bb0 100644 --- a/data/Leipzig/EBE6-luteItalianFret6.xml +++ b/data/Leipzig/EBE6-luteItalianFret6.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBE7-luteItalianFret7.xml b/data/Leipzig/EBE7-luteItalianFret7.xml index 03666a5508a..265215a6c5d 100644 --- a/data/Leipzig/EBE7-luteItalianFret7.xml +++ b/data/Leipzig/EBE7-luteItalianFret7.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBE8-luteItalianFret8.xml b/data/Leipzig/EBE8-luteItalianFret8.xml index 77a1273e97f..a1cd24ab817 100644 --- a/data/Leipzig/EBE8-luteItalianFret8.xml +++ b/data/Leipzig/EBE8-luteItalianFret8.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBE9-luteItalianFret9.xml b/data/Leipzig/EBE9-luteItalianFret9.xml index cc3f9f3f5ff..2d0fa809190 100644 --- a/data/Leipzig/EBE9-luteItalianFret9.xml +++ b/data/Leipzig/EBE9-luteItalianFret9.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/fonts/Leipzig.svg b/fonts/Leipzig.svg index d670a3b0a15..23bfc1ee94a 100644 --- a/fonts/Leipzig.svg +++ b/fonts/Leipzig.svg @@ -2,11 +2,11 @@ -Created by FontForge 20201107 at Tue Nov 23 15:17:13 2021 - By Klaus Rettinghaus +Created by FontForge 20201107 at Tue Jan 18 09:38:40 2022 + By Laurent Pugin Created by Etienne Darbellay, Jean-Francois Marti, Laurent Pugin, and Klaus Rettinghaus. This font is licensed under the SIL Open Font License \(http://scripts.sil.org/OFL\). -Version 5.2.64 +Version 5.2.65 @@ -984,38 +984,83 @@ l284 285c-35 29 -81 47 -131 47c-80 0 -135 -31 -181 -108zM111 -154c36 -34 76 -50 d="M480 266l26 -26l-84 -84c10 -12 19 -25 27 -38c-16 -13 -9 -8 -28 -22c-8 13 -16 25 -24 35l-288 -288c35 -29 81 -47 131 -47c78 0 129 34 177 110c17 -12 4 -3 33 -22c-41 -74 -120 -124 -210 -124c-60 0 -114 22 -156 58l-84 -84l-26 26l84 84c-36 42 -58 96 -58 156 c0 132 108 240 240 240c61 0 114 -21 156 -58zM83 -131l289 289c-36 32 -78 46 -132 46c-113 0 -204 -91 -204 -204c0 -50 18 -96 47 -131z" /> +d="M46.9994 122c0 -31.6546 6.02829 -59.1559 16.5208 -75.3716c9.92803 -15.8848 18.7864 -28.6289 45.4798 -28.6289c26.1589 0 40.2571 16.2734 50.4547 32.5895c10.4579 16.1622 14.5459 40.6011 14.5459 73.4111c0 32.8236 -4.07153 57.1476 -15.4534 73.2719 +c-11.5721 16.0229 -16.8963 28.7287 -45.5472 28.7287c-27.6659 0 -42.7777 -17.5063 -53.4547 -34.5895c-10.4399 -16.1343 -12.5459 -36.4399 -12.5459 -69.4111zM-2.99941 123c0 40.9423 18.417 72.5943 35.7116 92.9409c1.0816 1.27247 2.67619 2.30745 3.90212 3.34154 +c22.5969 19.0608 35.6405 29.717 74.3856 29.717c40.7644 0 53.134 -11.7138 76.9274 -31.7003c0.0665658 -0.0559153 0.131266 -0.115179 0.193878 -0.177791c21.6304 -21.6304 34.8781 -53.4598 34.8781 -94.1213c0 -44.2834 -18.2069 -78.6745 -38.5026 -98.9701 +c-19.863 -19.863 -39.9728 -27.0293 -76.4969 -27.0293h-1c-34.2852 0 -52.5574 7.05298 -71.8206 26.3162c-20.7184 20.7184 -38.1788 54.682 -38.1788 99.6832z" /> +d="M1.30977 212.912c-1.41382 0 -3.39737 1.98033 -3.39737 3.39737c0 0.38667 0.088179 0.64011 0.088179 0.690225c0 1.82277 0.928332 3.29656 2.01872 4.38695c3.17118 3.17118 9.26313 5.45433 19.095 8.47951c4.90221 1.50837 9.80738 2.56603 14.5117 3.99732 +c7.07189 2.1516 14.183 4.01193 21.3811 5.97506c14.0485 6.01065 24.0361 9.16057 29.9929 9.16057c7.26384 0 24.9994 -5.55225 24.9994 -16.9994c0 -8.75675 -0.931436 -34.5712 -1.88928 -48.4439c-0.632443 -9.15987 -1.11072 -16.1558 -1.11072 -21.5561v-7.94555 +l2 -111.054v-9c0 -9.32659 1.01343 -11.2529 2.34968 -14.0172c1.28293 -2.65403 0.402619 -2.32948 3.30524 -3.05514c6.80411 -1.51202 13.4558 -3.18221 20.4211 -4.43452c7.53715 -1.35512 13.3137 -1.85919 16.4037 -4.94926 +c0.848666 -0.848666 1.52025 -2.1162 1.52025 -3.54387c0 -1.33328 -0.619167 -2.5443 -1.43139 -3.35653c-3.62724 -3.62724 -11.9128 -3.64289 -24.2452 -3.64289c-0.107305 0 -0.214916 1.18442e-06 -0.322833 1.18442e-06h-83.9112 +c-5.66508 -0.33324 -11.4073 -1 -17.0888 -1c-7.12644 0 -11.875 0.923094 -14.4736 3.52164c-0.833434 0.833434 -1.52585 2.0391 -1.52585 3.47777c0 1.6481 0.75802 3.12625 1.81559 4.18382c2.95421 2.95421 8.24485 4.03202 15.7844 4.79069l23.5671 3.92785 +c7.62797 3.25191 7.83285 12.2838 7.83285 24.0976v4.98087l-1 158.019v4c0 6.67177 -5.94482 11.0006 -12.0006 11.0006c-3.51967 0 -9.34253 -0.926483 -18.2688 -2.91009c-8.25978 -2.06495 -15.3671 -2.08992 -20.3635 -2.08992 +c-0.123871 0 -0.246444 1.5352e-05 -0.367705 1.5352e-05h-5c-0.0501153 0 -0.303556 -0.088179 -0.690225 -0.088179z" /> +d="M87 248.999c40.5608 0 81.9994 -20.5017 81.9994 -62.9994c0 -13.9743 -6.44598 -27.5914 -17.5973 -42.7978c-9.15411 -12.2055 -18.1178 -25.8684 -31.3392 -39.3836c0 0 -44.9179 -45.9161 -44.9415 -45.94 +c-0.0360394 -0.0360394 -0.0727707 -0.0709694 -0.110151 -0.10479c-9.04812 -8.18639 -14.5859 -13.0465 -17.9427 -15.9925c-2.37929 -2.08807 -4.34297 -3.09081 -4.34297 -4.44546c0 -0.119359 0.0103543 -0.231754 0.0279685 -0.336602 +c6.72911 0 13.4582 -0.000534409 20.1873 -0.000534409l51.0593 1.00058c12.16 0 19.8895 1.017 22.0753 1.51372c1.6937 2.48891 4.94015 7.04395 8.03143 10.1352c1.48929 1.48929 3.14134 3.35105 5.89332 3.35105c2.14714 0 4.26322 -0.473588 5.82113 -2.03151 +c1.96544 -1.96544 2.17828 -4.56794 2.17828 -6.9679c0 -0.0529648 -0.00139223 -0.10593 -0.0041767 -0.158834l-1.99623 -37.9284c-0.0594922 -6.37994 -5.99201 -7.94599 -12.0034 -7.94599c-1.30178 0 -2.64246 0.0337757 -3.99559 0.0337757h-50 +c-35.9978 0 -66.9789 -0.00174341 -90.8742 -0.99738c-0.0419184 -0.0017466 -0.0838665 -0.0026199 -0.125815 -0.0026199h-2c-4.82697 0 -8.99941 1.66876 -8.99941 5.99941c-0.218042 2.45942 -1.89886 4.96481 -1.89886 8.62991 +c0 2.69654 0.835286 6.54975 3.77695 9.49141c5.64272 5.64272 15.3719 14.3676 21.0985 20.0942c22.7972 20.8431 37.3098 35.4762 53.8285 53.8303c27.4438 29.4041 40.1949 68.9932 40.1949 86.9542c0 18.46 -11.7323 36.0006 -31.0006 36.0006h-10 +c-20.2557 0 -30.3096 -5.48741 -49.2022 -20.4027c-4.16744 -3.12558 -6.64633 -3.59734 -9.79778 -3.59734c-5.33434 0 -7.99941 4.45552 -7.99941 8.99941c0 4.43645 2.78243 9.02565 9.87809 16.1213c20.5221 20.5221 44.3554 29.8781 70.1213 29.8781z" /> +d="M145.999 206c0 -21.589 -24.2937 -41.2395 -41.8466 -52.775c24.8193 -3.16322 36.9661 -11.9435 48.8951 -23.8725c9.64163 -9.64163 15.9514 -20.4636 15.9514 -34.3525c0 -17.9611 -8.18608 -38.7166 -26.1478 -56.6783 +c-5.22496 -5.22496 -11.3273 -10.2441 -18.2422 -14.8541c-22.0307 -14.0195 -26.839 -15.3679 -43.8028 -20.3572c-18.3972 -5.11034 -36.6822 -6.10978 -52.8065 -6.10978c-12.7325 0 -22.2024 2.2669 -27.3393 7.40381 +c-2.32806 2.32806 -3.66007 5.31475 -3.66007 8.5956c0 9.20231 8.46001 11.9994 17.9994 11.9994c5.41559 0 11.8063 -1.09736 20.0562 -4.19109c0.0970953 -0.0364107 0.192676 -0.0780247 0.286311 -0.124842c4.81861 -2.40931 7.28149 -2.81659 8.96553 -2.81659 +c1.04633 0 1.66611 0.132522 2.69192 0.132522c5.68834 0 18.6947 5.70797 27.5431 10.6238c0.984545 0.54697 2.14935 0.929429 2.97915 1.27672c4.7487 1.98742 5.56735 2.24498 10.6311 6.46474c5.05039 3.95248 9.3383 7.6879 12.9402 11.2898 +c12.5409 12.5409 16.907 23.3486 16.907 37.3455c0 24.7573 -19.3288 41.0006 -43.0006 41.0006c-6.91145 0 -21.5153 -2.64287 -26.2234 -3.89837l-15 -4c-0.254078 -0.0677541 -0.515344 -0.101631 -0.776611 -0.101631c-4.94713 0 -9.99941 5.05824 -9.99941 9.99941 +c0 2.04589 1.12479 3.5264 2.27716 4.67878c3.2874 3.2874 9.56905 6.33938 18.5085 10.066l14.8033 6.90821c12.7391 7.65084 20.9397 13.6464 26.212 18.9186c8.93826 8.93826 9.95934 15.8086 11.2176 27.762c0.199293 1.79363 0.308637 3.49435 0.308637 5.09867 +c0 7.06562 -2.3472 11.3286 -6.75797 14.6404c-7.6682 5.75758 -11.6876 8.92794 -22.5697 8.92794c-12.7577 0 -16.663 -0.687927 -33.5959 -9.65241c-2.16841 -1.14798 -4.5954 -1.98034 -6.85683 -2.94952c-5.41469 -4.23079 -11.3695 -6.39807 -14.5472 -6.39807 +c-2.48393 0 -7.99941 2.28272 -7.99941 5.99941c0 7.3303 9.46566 14.9413 15.1482 19.3611c14.5228 11.4108 32.2311 17.6383 52.8512 17.6383c15.482 0 36.7456 -3.98959 48.5111 -10.4071c10.5741 -6.16822 25.4883 -17.6291 25.4883 -32.5923z" /> +d="M118 -1.99941c-2.5413 0 -5.33271 -1 -8 -1h-3c-0.587337 0 -1.22426 -0.0306072 -1.88533 -0.0306072c-1.77718 0 -3.72884 0.221205 -5.36061 1.85297c-1.43836 1.43836 -1.75348 3.34213 -1.75348 5.17705c0 1.84945 0.977486 3.26123 2.00752 4.29127 +c1.90349 1.90349 4.69859 3.41683 8.64935 5.39221c0.147975 0.0739875 0.300812 0.13498 0.456803 0.182977c5.99451 1.84447 15.7112 3.08963 17.8863 8.65803v37.4485l-106.001 -0.972359h-8c-8.26364 0 -16.9994 2.31834 -16.9994 9.99941 +c0 3.99237 2.95192 6.99517 6.34409 11.2999c1.28791 1.63437 2.67705 3.78641 4.43535 5.71807l142.096 156.106c4.15577 4.15577 8.11664 6.87583 14.1238 6.87583c7.23857 0 14.9994 -2.29158 14.9994 -9.99941c0 0 0.0144199 -0.241523 0.0144199 -0.663211 +c0 -1.97145 -0.315176 -7.88077 -3.89251 -11.4581l-142 -142c-0.39664 -0.39664 -1.31355 -1.84419 -2.05166 -3.06038c1.25385 0.0685571 2.4736 0.181111 3.93034 0.181111h71.8157c0.680409 0.488995 1.73622 1 3.18429 1h16.4595 +c1.17974 0.498129 1.54142 0.862722 1.54142 3.04376l0.999692 69.9568c0 11.8317 11.2352 14.9994 23.9994 14.9994c6.52169 0 19.9994 -3.01195 19.9994 -11.9994v-71c0 -5.07909 -0.787003 -5.00059 3.00059 -5.00059c0 0 25.9994 -1.60847 25.9994 -9.99941 +c0 -4.79378 -0.560611 -8.71897 -3.31925 -11.4776c-3.15563 -3.15563 -7.78162 -3.5218 -13.6802 -3.5218c-2.22657 0 -3.65938 0.67535 -5.08123 0.999785c-4.521 -0.0241309 -5.91936 -1.44445 -5.91936 -6.00037v-15.8836 +c0.908781 -11.7416 1.84429 -18.1835 4.34313 -19.4329c1.19235 -0.596177 1.79082 -1.71349 2.55949 -2.48216c0.298658 -0.298658 1.64983 -0.996972 6.82919 -2.29181c6.23073 -1.55768 10.3519 -2.13294 12.8674 -4.64841 +c0.761056 -0.761056 1.40082 -1.93407 1.40082 -3.26109c0 -1.75654 -0.254894 -3.99812 -2.00309 -5.74632c-1.73384 -1.73384 -4.16955 -2.25309 -6.99632 -2.25309c-15.532 0 -31.085 2 -43 2c-4.99257 0 -11.8328 -2.19098e-05 -20.6664 -0.981529 +c-0.110824 -0.0123138 -0.222206 -0.0184707 -0.333587 -0.0184707h-10z" /> +d="M10 -2.99941c-6.36094 0 -11.9994 2.5276 -11.9994 8.99941c0 1.33474 0.692379 2.08462 1.05652 2.44876c2.45825 2.45825 8.47519 3.8234 21.1364 7.44087c17.1554 4.76539 26.815 8.54848 27.6332 8.87271c19.3655 8.72423 29.0341 17.2416 39.8812 29.1734 +c10.5617 12.482 16.2927 27.7874 16.2927 44.0643c0 18.5045 -5.99919 32.6829 -17.1219 42.8787c-9.67657 9.67657 -21.0616 17.3343 -42.6716 23.228c-5.35366 1.46009 -12.3406 2.913 -19.949 4.9861c-12.3519 2.90877 -20.3506 5.67392 -24.506 9.82933 +c-1.64511 1.64511 -2.75138 3.72772 -2.75138 6.07794c0 3.39968 2.22443 8.14522 6.23535 17.1688c6.04583 15.1182 8.61928 23.8845 9.91884 27.7832c1.87005 5.61015 3.61258 10.4664 7.89324 11.8932c2.99915 0.999717 6.54203 2.15419 11.952 2.15419 +l0.21889 0.0100674c1.12415 0.0709809 4.63378 0.494013 10.2018 1.17826c8.81906 1.08376 33.2751 3.8367 46.6527 5.80584c10.4889 1.54394 20.301 3.00583 28.9266 3.00583c5.93671 0 8.99941 -5.74455 8.99941 -10.9994c0 -13.472 -6.12911 -26.9994 -20.9994 -26.9994 +c-3.42812 0 -5.16391 -0.948126 -7.85859 -0.998689c-18.0179 -1.50133 -36.1178 -3.02318 -54.072 -4.55053c-8.25461 -0.702209 -9.99305 -1.28145 -12.937 -2.73504c-2.16811 -1.07051 -3.26491 -1.70594 -3.68952 -2.13055 +c-0.0257041 -0.0257041 -1.70263 -3.32985 -1.70263 -6.21497c0 -0.847385 4.16448 -2.24445 11.6868 -3.40173c6.97486 -0.996409 14.1004 -1.99249 20.4548 -4.10053c25.1581 -7.04944 47.5233 -16.122 62.1012 -28.6173 +c15.753 -13.8997 31.0164 -33.5846 31.0164 -55.2512c0 -24.8488 -10.5204 -46.2169 -28.1848 -63.8813c-17.4873 -17.4873 -39.7427 -29.7961 -66.7584 -39.927c-0.0345648 -0.0129618 -0.0693214 -0.0252642 -0.10425 -0.0369072 +c-18.3822 -6.12741 -33.7933 -7.15419 -46.952 -7.15419z" /> +d="M102 138.999c41.5302 0 76.9994 -23.4296 76.9994 -65.9994c0 -21.5221 -3.9846 -41.2214 -19.9536 -55.1943c-16.038 -14.9688 -47.6663 -20.8051 -71.0458 -20.8051c-52.5273 0 -90.9994 37.3419 -90.9994 89.9994c0 34.2408 14.352 65.5953 43.7022 94.9454 +c5.8701 5.8701 12.2824 11.6159 19.3564 17.3424c20.1563 17.1329 66.2479 49.7116 96.9409 49.7116c4.1359 0 7.99941 -2.81745 7.99941 -6.99941c0 -0.591571 0.0812094 -1.44111 0.0812094 -2.4051c0 -1.81924 -0.289223 -4.04614 -1.9593 -5.71622 +c-1.61729 -1.61729 -3.8716 -2.76598 -5.95493 -3.64317c-18.6396 -7.84825 -36.4625 -19.7095 -53.3601 -32.6312c-8.00357 -6.04714 -15.0912 -12.1759 -21.331 -18.4157c-28.3796 -28.3796 -39.4758 -59.1306 -39.4758 -96.1886 +c0 -21.2827 6.52843 -41.5646 18.4909 -53.5271c7.18645 -7.18645 16.2986 -11.4735 27.5097 -11.4735c16.5621 0 23.4919 2.61059 37.2583 12.4437c5.69568 4.06834 7.74226 22.2106 7.74226 37.5569c0 28.4356 -14.4777 48.0006 -43.0006 48.0006 +c-4.83073 0 -14.7758 -3 -20 -3c-3.39057 0 -6.48672 2.20297 -8.55013 4.26638c-1.08747 1.08747 -2.44929 2.44066 -2.44929 4.73303c0 2.06366 1.09146 3.64045 2.26299 4.81198c7.30205 7.30205 31.2167 12.1874 39.7364 12.1874z" /> +d="M115.001 202c0 1.74074 0.846645 3.51149 0.968316 6.57022c-0.834553 0.620516 -1.93898 1.43051 -1.93898 1.43051l-101.03 -1.00015c-6.01323 0 -10.2837 0.131807 -13.1879 3.03602c-2.5545 2.5545 -2.83328 5.97425 -2.83328 10.2175 +c0 1.18474 0.0217328 2.43368 0.0217328 3.74591c0 7.7221 0.0403777 14.101 4.20464 18.2653c2.75799 2.75799 6.73796 3.73411 11.7948 3.73411c6.53019 0 26.3529 -1 33 -1c15.0338 0 30.1291 -0.444336 45.333 -0.444336c20.4401 0 40.0413 1.35868 59.4994 2.43968 +c0.0558297 0.00310165 0.11173 0.00465247 0.16763 0.00465247c4.58104 0 8.58802 -0.0652331 11.4026 -2.87986c2.06451 -2.06451 2.59677 -4.91777 2.59677 -8.11956c0 -4.12021 -15.6827 -39.1114 -19.3119 -45.3498l-75.9463 -180.87 +c-2.94735 -6.63153 -10.9711 -14.7791 -17.7412 -14.7791c-5.44442 0 -16.9994 2.76915 -16.9994 9.99941c0 0.686781 -0.147067 3.87762 1.23409 7.16443l78.7659 187.443v0.392654z" /> +d="M51.9994 192c0 -9.69122 2.68532 -19.0747 11.0869 -27.4763c1.40654 -1.40654 2.98092 -2.79013 4.74053 -4.14367c15.7309 -12.7813 22.6559 -14.3806 35.1731 -14.3806c11.5056 0 24.3628 5.92241 32.6933 15.919c7.35835 9.19794 8.30728 19.2245 8.30728 30.0816 +c0 11.8338 -5.22379 18.9676 -13.0721 27.8145c-9.56569 7.60375 -19.7537 12.186 -33.9285 12.186c-15.9695 0 -28.2493 -6.15498 -36.977 -14.8827c-6.55323 -6.55323 -8.02354 -13.8173 -8.02354 -25.1179zM39.9994 57c0 -13.044 6.96956 -23.6359 16.0059 -31.7686 +c9.2866 -8.35794 20.3489 -11.232 35.9947 -11.232c20.102 0 32.3158 6.78876 43.166 17.639c7.11857 7.11857 11.8346 14.8845 11.8346 25.3616c0 11.0133 -1.22633 16.9831 -4.12191 19.8787c-3.09935 3.09935 -5.15338 8.07694 -8.67646 10.7192 +c-3.8997 2.92478 -6.86386 4.90691 -10.7806 7.8357c-6.34884 3.13056 -19.0783 5.47325 -27.8988 7.43912c-3.63566 0.810295 -4.95356 1.12784 -8.52278 1.12784c-6.80358 0 -25.4377 -7.26339 -36.719 -18.5447c-6.83543 -6.83543 -10.2816 -15.2204 -10.2816 -28.4559z +M-2.99941 56c0 15.1782 2.87248 29.6765 15.6899 42.4939c2.74316 2.74316 5.87686 5.36513 9.54716 7.93434c11.0552 8.04012 19.4469 13.3091 29.9347 16.4555c3.96942 1.13412 8.15864 1.29443 11.6582 2.17142c-6.54442 4.77272 -17.0529 8.64916 -25.0507 12.2037 +c-0.163226 0.072545 -0.321282 0.160375 -0.471989 0.263491c-5.86208 4.01089 -10.9342 8.05325 -15.1843 12.3034c-9.7987 9.7987 -15.1228 20.7633 -15.1228 34.1743c0 21.1795 17.3036 37.4753 32.3711 47.5202c17.4388 11.2839 37.0392 17.4792 58.6284 17.4792 +c29.3287 0 54.2945 -7.63584 68.771 -22.1124c9.04274 -9.04274 14.2284 -20.9093 14.2284 -34.887c0 -12.6511 -4.74303 -23.6187 -14.4509 -33.3266c-5.02871 -5.02871 -11.3483 -9.72221 -19.0229 -14.2572c-3.89967 -2.30435 -9.85301 -6.01003 -14.586 -7.27188 +c-1.50316 -0.599945 -3.50577 -1.42757 -4.53201 -1.91363c3.28208 -2.38512 10.3078 -5.32418 14.6807 -6.91143c2.9579 -1.07365 5.08104 -1.45615 6.7373 -2.91981c9.73262 -6.01391 18.835 -13.0509 24.7146 -18.9305 +c8.50479 -8.50479 15.4593 -24.2883 15.4593 -40.4689c0 -16.3424 -6.90542 -30.9377 -18.3913 -42.4236c-4.11893 -4.11893 -8.72311 -7.77416 -13.9103 -11.0503c-16.898 -11.6174 -43.4327 -15.5255 -68.6978 -15.5255c-23.0825 0 -44.6362 1.86811 -59.5709 11.4423 +c-15.5417 9.15472 -33.4285 25.849 -33.4285 47.5571z" /> +d="M109 132.999c3.41418 0 5.99941 -2.58047 5.99941 -5.99941c0 -8.30426 -8.90271 -15.0516 -17.3451 -16.9277c-9.17045 -2.03788 -17.2844 -3.07176 -22.6543 -3.07176c-20.1432 0 -43.9297 2.68996 -57.0335 15.7937c-13.247 12.228 -20.9659 30.288 -20.9659 48.2057 +c0 21.2944 10.6894 39.8402 26.0258 53.2595c16.5799 14.5074 42.1154 24.7399 64.9736 24.7399c26.6046 0 55.6606 -8.35346 72.1897 -26.9487c15.6938 -16.74 21.8097 -39.5771 21.8097 -64.0507c0 -6.3061 -1.03631 -17.4876 -4.07715 -31.6782 +c-3.05489 -13.2379 -7.12531 -23.5065 -12.3403 -31.8506c-17.7025 -29.873 -43.5079 -51.9634 -73.993 -71.0166c-16.3703 -10.2314 -37.4682 -18.2402 -54.5326 -24.263c-5.22104 -1.95789 -9.42979 -2.34294 -12.3318 -2.34294 +c-1.52019 0 -2.55487 0.151846 -3.72446 0.151846c-5.08589 0 -8.99941 4.62292 -8.99941 8.99941c0 2.71308 1.63305 4.92365 3.73597 7.02657c6.08035 6.08035 18.6085 10.9996 27.8514 15.621c29.5237 15.746 49.5195 29.4864 66.9755 53.1033 +c17.6711 24.5432 27.4372 52.9492 27.4372 81.2492c0 17.607 -2.75619 26.7594 -10.5653 40.4404c-8.59035 13.2529 -22.1772 26.5602 -40.4353 26.5602c-16.4256 0 -28.7492 -8.46116 -36.4676 -19.6099c-6.82344 -10.7226 -10.533 -19.9402 -10.533 -35.3906 +c0 -14.8027 7.45053 -27.4278 16.2003 -36.1777c6.4778 -6.4778 13.0667 -9.82293 21.8002 -9.82293c9.45771 0 21.5864 4 31 4z" /> @@ -1070,48 +1115,92 @@ c-63 -59 -57 -53 -61 -56c-30 -27 -44 -71 -53 -88c20 3 36 6 47 9c88 27 168 95 168 c-24 -46 -58 -86 -93 -118c-63 -59 -57 -53 -61 -56c-30 -27 -44 -71 -53 -88c20 3 36 6 47 9c88 27 168 95 168 200c0 25 -4 42 -8 53zM247 -111c-24 -46 -58 -86 -93 -118c-63 -59 -57 -53 -61 -56c-30 -27 -44 -71 -53 -88c20 3 36 6 47 9c88 27 168 95 168 200 c0 25 -4 42 -8 53zM248 -677c-23 -48 -58 -89 -94 -122c-63 -59 -57 -53 -61 -56c-30 -27 -44 -71 -53 -88c20 3 36 6 47 9c88 27 168 95 168 200c0 19 -3 39 -7 57zM40 -753c20 3 36 6 47 9c128 36 169 90 169 177c0 24 -3 50 -8 79c-23 -44 -61 -90 -94 -121 c-63 -59 -57 -53 -61 -56c-30 -27 -44 -71 -53 -88z" /> - - - - - - - - - - - - - + + + + + + + + + + + + + From 809750aa2486dba339824cd27988bba22095e882 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 18 Jan 2022 10:14:11 +0100 Subject: [PATCH 073/403] clang-format --- src/view_tab.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/view_tab.cpp b/src/view_tab.cpp index 693c525f875..8ccd6647721 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -111,9 +111,10 @@ void View::DrawTabNote(DeviceContext *dc, LayerElement *element, Layer *layer, S } // Above the line for french tablature else if (staff->m_drawingNotationType == NOTATIONTYPE_tab_lute_french) { - y -= m_doc->GetDrawingUnit(staff->m_drawingStaffSize) - m_doc->GetDrawingStaffLineWidth(staff->m_drawingStaffSize); + y -= m_doc->GetDrawingUnit(staff->m_drawingStaffSize) + - m_doc->GetDrawingStaffLineWidth(staff->m_drawingStaffSize); } - + dc->SetFont(m_doc->GetDrawingSmuflFont(glyphSize, false)); DrawSmuflString(dc, x, y, fret, HORIZONTALALIGNMENT_center, glyphSize); dc->ResetFont(); @@ -142,13 +143,13 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, int x = element->GetDrawingX(); int y = element->GetDrawingY(); - + double spacingRatio = 1.0; if (staff->m_drawingNotationType == NOTATIONTYPE_tab_lute_french) { spacingRatio = 2.0; } y += m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * spacingRatio; - + int drawingDur = (tabGrp->GetDurGes() != DURATION_NONE) ? tabGrp->GetActualDurGes() : tabGrp->GetActualDur(); int glyphSize = staff->m_drawingStaffSize / TABLATURE_STAFF_RATIO; From 9cedccfbf54a43f93281e87e7192e6f613f824e8 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 18 Jan 2022 11:03:18 +0100 Subject: [PATCH 074/403] Add helper on Staff for notation types --- include/vrv/staff.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/vrv/staff.h b/include/vrv/staff.h index f3001ead092..5b75da2df6b 100644 --- a/include/vrv/staff.h +++ b/include/vrv/staff.h @@ -104,6 +104,9 @@ class Staff : public Object, bool IsMensural(); bool IsNeume(); bool IsTablature(); + bool IsTabLuteFrench() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_french; } + bool IsTablatureGerman() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_german; } + bool IsTabLuteItalian() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_italian; } ///@} /** From 43153e9228dcdc5666d3ae430eca10f2963051e5 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 18 Jan 2022 11:03:56 +0100 Subject: [PATCH 075/403] Set the y position in tabDurSym --- src/layerelement.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/layerelement.cpp b/src/layerelement.cpp index cf8b7e2c27e..da534e6cd49 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -1431,6 +1431,15 @@ int LayerElement::SetAlignmentPitchPos(FunctorParams *functorParams) rest->SetDrawingLoc(loc); this->SetDrawingYRel(staffY->CalcPitchPosYRel(params->m_doc, loc)); } + else if (this->Is(TABDURSYM)) { + int yRel = 0; + double spacingRatio = 1.0; + if (staffY->IsTabLuteFrench()) { + spacingRatio = 2.0; + } + yRel += params->m_doc->GetDrawingUnit(staffY->m_drawingStaffSize) * spacingRatio; + this->SetDrawingYRel(yRel); + } return FUNCTOR_CONTINUE; } From 1b6fc784f8fde71b6599e9c2768c70235b080ac5 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 18 Jan 2022 11:05:02 +0100 Subject: [PATCH 076/403] Use tabDurSym y position for beam or for drawing them --- src/beam.cpp | 15 +++++++++++---- src/view_tab.cpp | 6 ------ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/beam.cpp b/src/beam.cpp index 866078356fb..d4a70b1dabc 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -92,13 +92,20 @@ void BeamSegment::CalcTabBeam( // draws the stems. int glyphSize = staff->m_drawingStaffSize / TABLATURE_STAFF_RATIO; beamInterface->m_fractionSize = glyphSize * 2 / 3; - int height = doc->GetGlyphHeight(SMUFL_EBA8_luteDurationHalf, glyphSize, true); - int y = staff->GetDrawingY() + height; - y += doc->GetDrawingUnit(staff->m_drawingStaffSize) * 1.5; assert(m_beamElementCoordRefs.size() > 0); - // For recursive calls, avoid to re-init values + int y = staff->GetDrawingY(); + + // Get the y position of the first tabDurSym + assert(m_beamElementCoordRefs.at(0)->m_element); + LayerElement *tabDurSym + = vrv_cast(m_beamElementCoordRefs.at(0)->m_element->FindDescendantByType(TABDURSYM)); + if (tabDurSym) y = tabDurSym->GetDrawingY(); + + const int height = doc->GetGlyphHeight(SMUFL_EBA8_luteDurationHalf, glyphSize, true); + y += height; + this->CalcBeamInit(layer, staff, doc, beamInterface, place); // Adjust the height and spacing of the beams diff --git a/src/view_tab.cpp b/src/view_tab.cpp index 8ccd6647721..b09cc05a07a 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -144,12 +144,6 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, int x = element->GetDrawingX(); int y = element->GetDrawingY(); - double spacingRatio = 1.0; - if (staff->m_drawingNotationType == NOTATIONTYPE_tab_lute_french) { - spacingRatio = 2.0; - } - y += m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * spacingRatio; - int drawingDur = (tabGrp->GetDurGes() != DURATION_NONE) ? tabGrp->GetActualDurGes() : tabGrp->GetActualDur(); int glyphSize = staff->m_drawingStaffSize / TABLATURE_STAFF_RATIO; From dd0db080c1c870556170b4bb91d5ec70f40c03e5 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 18 Jan 2022 11:05:27 +0100 Subject: [PATCH 077/403] Use notationtype staff helpers --- src/view_page.cpp | 3 +-- src/view_tab.cpp | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/view_page.cpp b/src/view_page.cpp index f0cfee5c0c1..b69a5cee6c0 100644 --- a/src/view_page.cpp +++ b/src/view_page.cpp @@ -1224,8 +1224,7 @@ void View::DrawStaffLines(DeviceContext *dc, Staff *staff, Measure *measure, Sys y2 -= m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); } else { - const bool isFrenchOrItalianTablature = (staff->m_drawingNotationType == NOTATIONTYPE_tab_lute_french - || staff->m_drawingNotationType == NOTATIONTYPE_tab_lute_italian); + const bool isFrenchOrItalianTablature = (staff->IsTabLuteFrench() || staff->IsTabLuteItalian()); SegmentedLine line(x1, x2); // We do not need to do this during layout calculation - and only with tablature but not for French or // Italian tablature diff --git a/src/view_tab.cpp b/src/view_tab.cpp index b09cc05a07a..d411bc54d82 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -106,11 +106,11 @@ void View::DrawTabNote(DeviceContext *dc, LayerElement *element, Layer *layer, S std::wstring fret = note->GetTabFretString(staff->m_drawingNotationType); // Center for italian tablature - if (staff->m_drawingNotationType == NOTATIONTYPE_tab_lute_italian) { + if (staff->IsTabLuteItalian()) { y -= (m_doc->GetGlyphHeight(SMUFL_EBE0_luteItalianFret0, glyphSize, drawingCueSize) / 2); } // Above the line for french tablature - else if (staff->m_drawingNotationType == NOTATIONTYPE_tab_lute_french) { + else if (staff->IsTabLuteFrench()) { y -= m_doc->GetDrawingUnit(staff->m_drawingStaffSize) - m_doc->GetDrawingStaffLineWidth(staff->m_drawingStaffSize); } From ee9048cc13fa286bcf1e3f2177aaa4e3826cb642 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 18 Jan 2022 11:05:52 +0100 Subject: [PATCH 078/403] Adjust beam width according to the notation type --- src/beam.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/beam.cpp b/src/beam.cpp index d4a70b1dabc..20c26d5a063 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -111,6 +111,13 @@ void BeamSegment::CalcTabBeam( // Adjust the height and spacing of the beams beamInterface->m_beamWidthBlack /= 2; beamInterface->m_beamWidthWhite /= 2; + + // Adjust it further for tab.lute.french and tab.lute.italian + if (staff->IsTabLuteFrench() || staff->IsTabLuteItalian()) { + beamInterface->m_beamWidthBlack /= 2; + beamInterface->m_beamWidthWhite = beamInterface->m_beamWidthWhite * 2 / 3; + } + beamInterface->m_beamWidth = beamInterface->m_beamWidthBlack + beamInterface->m_beamWidthWhite; beamInterface->m_drawingPlace = (place == BEAMPLACE_below) ? BEAMPLACE_below : BEAMPLACE_above; From b98636713cc8326b14b4d37cd7064bbe68797ae6 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 18 Jan 2022 11:12:04 +0100 Subject: [PATCH 079/403] Change german tablature helper name --- include/vrv/staff.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/vrv/staff.h b/include/vrv/staff.h index 5b75da2df6b..df2d85cc7ba 100644 --- a/include/vrv/staff.h +++ b/include/vrv/staff.h @@ -105,7 +105,7 @@ class Staff : public Object, bool IsNeume(); bool IsTablature(); bool IsTabLuteFrench() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_french; } - bool IsTablatureGerman() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_german; } + bool IsTabLuteGerman() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_german; } bool IsTabLuteItalian() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_italian; } ///@} From 090610888f3612bdfab0fb1ffd0307eb5f6e2583 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 18 Jan 2022 12:56:56 +0100 Subject: [PATCH 080/403] Improve adjustment for short slurs Don't adjust endpoints individually then --- include/vrv/slur.h | 6 +++++- src/slur.cpp | 29 +++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/include/vrv/slur.h b/include/vrv/slur.h index 64fca90cbea..789a163db66 100644 --- a/include/vrv/slur.h +++ b/include/vrv/slur.h @@ -150,7 +150,8 @@ class Slur : public ControlElement, void FilterSpannedElements(FloatingCurvePositioner *curve, const BezierCurve &bezierCurve, int margin); // Calculate the vertical shift of the slur end points - std::pair CalcEndPointShift(FloatingCurvePositioner *curve, const BezierCurve &bezierCurve, int margin); + std::pair CalcEndPointShift( + FloatingCurvePositioner *curve, const BezierCurve &bezierCurve, int margin, int unit); // Calculate the horizontal control point offset std::tuple CalcControlPointOffset( @@ -177,6 +178,9 @@ class Slur : public ControlElement, // Shift end points for collisions nearby void ShiftEndPoints(int &shiftLeft, int &shiftRight, double ratio, int intersection) const; + // Rebalance shifts to avoid awkward tilting of short slurs + void RebalanceShifts(int &shiftLeft, int &shiftRight, double distance, int unit) const; + // Rotate the slope by a given number of degrees, but choose smaller angles if already close to the vertical axis // Choose doublingBound as the positive slope value where doubling has the same effect as rotating: // tan(atan(doublingBound) + degrees * PI / 180.0) ≈ 2.0 * doublingBound diff --git a/src/slur.cpp b/src/slur.cpp index f836b072574..4b4a3d8709c 100644 --- a/src/slur.cpp +++ b/src/slur.cpp @@ -312,6 +312,7 @@ void Slur::AdjustSlur(Doc *doc, FloatingCurvePositioner *curve, Staff *staff) BezierCurve bezier(points[0], points[1], points[2], points[3]); bezier.UpdateControlPointParams(curve->GetDir()); + const int unit = doc->GetDrawingUnit(100); const int margin = doc->GetOptions()->m_slurMargin.GetValue() * doc->GetDrawingUnit(100); // STEP 1: Filter spanned elements and discard certain bounding boxes even though they collide @@ -321,7 +322,7 @@ void Slur::AdjustSlur(Doc *doc, FloatingCurvePositioner *curve, Staff *staff) // Only collisions near the endpoints are taken into account. int endPointShiftLeft = 0; int endPointShiftRight = 0; - std::tie(endPointShiftLeft, endPointShiftRight) = this->CalcEndPointShift(curve, bezier, margin); + std::tie(endPointShiftLeft, endPointShiftRight) = this->CalcEndPointShift(curve, bezier, margin, unit); if ((endPointShiftLeft != 0) || (endPointShiftRight != 0)) { const int sign = (curve->GetDir() == curvature_CURVEDIR_above) ? 1 : -1; bezier.p1.y += sign * endPointShiftLeft; @@ -406,7 +407,8 @@ void Slur::FilterSpannedElements(FloatingCurvePositioner *curve, const BezierCur } } -std::pair Slur::CalcEndPointShift(FloatingCurvePositioner *curve, const BezierCurve &bezierCurve, int margin) +std::pair Slur::CalcEndPointShift( + FloatingCurvePositioner *curve, const BezierCurve &bezierCurve, const int margin, const int unit) { if (bezierCurve.p1.x >= bezierCurve.p2.x) return { 0, 0 }; @@ -443,6 +445,9 @@ std::pair Slur::CalcEndPointShift(FloatingCurvePositioner *curve, cons this->ShiftEndPoints(shiftLeft, shiftRight, distanceRatioRight, intersectionRight); } } + + this->RebalanceShifts(shiftLeft, shiftRight, dist, unit); + return { shiftLeft, shiftRight }; } @@ -469,6 +474,26 @@ void Slur::ShiftEndPoints(int &shiftLeft, int &shiftRight, double ratio, int int } } +void Slur::RebalanceShifts(int &shiftLeft, int &shiftRight, const double distance, const int unit) const +{ + // alpha is 1 for dist <= 4U, 0 for dist >= 8U, interpolated between 4U and 8U + double alpha = 0.0; + if (distance <= 4.0 * unit) { + alpha = 1.0; + } + else if (distance <= 8.0 * unit) { + alpha = 2.0 - distance / (4.0 * unit); + } + + const int difference = std::abs(shiftLeft - shiftRight); + if (shiftLeft < shiftRight) { + shiftLeft += alpha * difference; + } + else { + shiftRight += alpha * difference; + } +} + std::tuple Slur::CalcControlPointOffset( FloatingCurvePositioner *curve, const BezierCurve &bezierCurve, int margin) { From 1971274673414db7c6280a4603c637980043f54d Mon Sep 17 00:00:00 2001 From: Paul Overell Date: Tue, 18 Jan 2022 12:08:38 +0000 Subject: [PATCH 081/403] Fix format. --- include/vrv/staff.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/vrv/staff.h b/include/vrv/staff.h index 85a7e1ab9b8..bcbeca93305 100644 --- a/include/vrv/staff.h +++ b/include/vrv/staff.h @@ -247,11 +247,12 @@ class Staff : public Object, * See Object::GenerateMIDI */ int GenerateMIDI(FunctorParams *functorParams) override; - + /** * See Object::GenerateMIDIEnd */ int GenerateMIDIEnd(FunctorParams *functorParams) override; + private: /** * Add the ledger line dashes to the legderline array. From 415195384af061c469dfc580fdc2fb5da8ce402a Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 18 Jan 2022 13:41:37 +0100 Subject: [PATCH 082/403] Minor improvement --- src/slur.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slur.cpp b/src/slur.cpp index 4b4a3d8709c..eb00694d5bd 100644 --- a/src/slur.cpp +++ b/src/slur.cpp @@ -313,7 +313,7 @@ void Slur::AdjustSlur(Doc *doc, FloatingCurvePositioner *curve, Staff *staff) bezier.UpdateControlPointParams(curve->GetDir()); const int unit = doc->GetDrawingUnit(100); - const int margin = doc->GetOptions()->m_slurMargin.GetValue() * doc->GetDrawingUnit(100); + const int margin = doc->GetOptions()->m_slurMargin.GetValue() * unit; // STEP 1: Filter spanned elements and discard certain bounding boxes even though they collide this->FilterSpannedElements(curve, bezier, margin); @@ -369,7 +369,7 @@ void Slur::AdjustSlur(Doc *doc, FloatingCurvePositioner *curve, Staff *staff) // STEP 5: Adjust the slur shape // Through the control point adjustments in step 3 and 4 it can happen that the slur looses its desired shape. // We correct the shape if the slur is too flat or not convex. - this->AdjustSlurShape(bezier, curve->GetDir(), doc->GetDrawingUnit(100)); + this->AdjustSlurShape(bezier, curve->GetDir(), unit); curve->UpdatePoints(bezier); // Since we are going to redraw it, reset its bounding box From 2d4884351aeb1767d975141e80e91334c0b4bf23 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 18 Jan 2022 14:05:23 +0100 Subject: [PATCH 083/403] Adjust shortest beam duration for beam in tablabures --- src/view_beam.cpp | 54 +++++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/src/view_beam.cpp b/src/view_beam.cpp index 2c1d0a21e84..1fa5aa5f03d 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -282,13 +282,18 @@ void View::DrawBeamSegment(DeviceContext *dc, BeamSegment *beamSegment, BeamDraw } int noteCount = (int)noteIndexes.size(); - if (noteCount > 0) { - int testDur = DUR_16; - int barY = beamInterface->m_beamWidth; + int durRef = DUR_8; + int durRef2 = DUR_16; + + if (staff->IsTabLuteFrench() || staff->IsTabLuteItalian()) { + durRef = DUR_4; + durRef2 = DUR_8; + } - if (beamInterface->m_drawingPlace == BEAMPLACE_above) { - barY = -barY; - } + int barY = 0; + + if (noteCount > 0) { + int testDur = durRef2; int fractBeamWidth = m_doc->GetGlyphWidth(SMUFL_E0A4_noteheadBlack, beamInterface->m_fractionSize, beamInterface->m_cueSize); @@ -299,6 +304,7 @@ void View::DrawBeamSegment(DeviceContext *dc, BeamSegment *beamSegment, BeamDraw bool start = true; int idx = 0; + barY += beamInterface->m_beamWidth; // all but the last one for (i = 0; i < noteCount - 1; ++i) { @@ -306,43 +312,43 @@ void View::DrawBeamSegment(DeviceContext *dc, BeamSegment *beamSegment, BeamDraw int nextIdx = noteIndexes.at(i + 1); bool breakSec = ((beamElementCoords->at(idx)->m_breaksec) - && (testDur - DUR_8 >= beamElementCoords->at(idx)->m_breaksec)); - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_NONE; + && (testDur - durRef >= beamElementCoords->at(idx)->m_breaksec)); + beamElementCoords->at(idx)->m_partialFlags[testDur - durRef] = PARTIAL_NONE; // partial is needed if (beamElementCoords->at(idx)->m_dur >= (char)testDur) { // and for the next one too, but no break - through if ((beamElementCoords->at(nextIdx)->m_dur >= (char)testDur) && !breakSec) { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_THROUGH; + beamElementCoords->at(idx)->m_partialFlags[testDur - durRef] = PARTIAL_THROUGH; } // not needed for the next one or break else { // we are starting a beam or after a beam break - put it right if (start) { if ((idx != 0) && (beamElementCoords->at(idx - 1)->m_element->Is(REST))) { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_LEFT; + beamElementCoords->at(idx)->m_partialFlags[testDur - durRef] = PARTIAL_LEFT; } else { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_RIGHT; + beamElementCoords->at(idx)->m_partialFlags[testDur - durRef] = PARTIAL_RIGHT; } } // or the previous one had no partial else if (beamElementCoords->at(noteIndexes.at(i - 1))->m_dur < (char)testDur) { // if we are at the full bar level, put it left - if (testDur == DUR_16) { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_LEFT; + if (testDur == durRef2) { + beamElementCoords->at(idx)->m_partialFlags[testDur - durRef] = PARTIAL_LEFT; } // if the previous level underneath was a partial through, put it left - else if (beamElementCoords->at(noteIndexes.at(i - 1))->m_partialFlags[testDur - 1 - DUR_8] + else if (beamElementCoords->at(noteIndexes.at(i - 1))->m_partialFlags[testDur - 1 - durRef] == PARTIAL_THROUGH) { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_LEFT; + beamElementCoords->at(idx)->m_partialFlags[testDur - durRef] = PARTIAL_LEFT; } // if the level underneath was not left (right or through), put it right - else if (beamElementCoords->at(idx)->m_partialFlags[testDur - 1 - DUR_8] != PARTIAL_LEFT) { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_RIGHT; + else if (beamElementCoords->at(idx)->m_partialFlags[testDur - 1 - durRef] != PARTIAL_LEFT) { + beamElementCoords->at(idx)->m_partialFlags[testDur - durRef] = PARTIAL_RIGHT; } // it was put left before, put it left else { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_LEFT; + beamElementCoords->at(idx)->m_partialFlags[testDur - durRef] = PARTIAL_LEFT; } } } @@ -352,18 +358,16 @@ void View::DrawBeamSegment(DeviceContext *dc, BeamSegment *beamSegment, BeamDraw } // last one idx = (int)noteIndexes.back(); - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_NONE; + beamElementCoords->at(idx)->m_partialFlags[testDur - durRef] = PARTIAL_NONE; // partial is needed if ((beamElementCoords->at(idx)->m_dur >= (char)testDur)) { // and the previous one had no partial - put it left if ((noteCount == 1) || (beamElementCoords->at(noteIndexes.at(i - 1))->m_dur < (char)testDur) || start) { - beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] = PARTIAL_LEFT; + beamElementCoords->at(idx)->m_partialFlags[testDur - durRef] = PARTIAL_LEFT; } } - barY = beamInterface->m_beamWidth * (testDur - DUR_8); - // draw them for (i = 0; i < noteCount; ++i) { int barYPos = 0; @@ -384,7 +388,7 @@ void View::DrawBeamSegment(DeviceContext *dc, BeamSegment *beamSegment, BeamDraw else { barYPos = shiftY * barY; } - if (beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] == PARTIAL_THROUGH) { + if (beamElementCoords->at(idx)->m_partialFlags[testDur - durRef] == PARTIAL_THROUGH) { // through should never be set on the last one assert(i < noteCount - 1); if (i >= noteCount - 1) continue; // assert for debug and skip otherwise @@ -393,14 +397,14 @@ void View::DrawBeamSegment(DeviceContext *dc, BeamSegment *beamSegment, BeamDraw DrawObliquePolygon(dc, beamElementCoords->at(idx)->m_x, y1, beamElementCoords->at(noteIndexes.at(i + 1))->m_x, y2, polygonHeight); } - else if (beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] == PARTIAL_RIGHT) { + else if (beamElementCoords->at(idx)->m_partialFlags[testDur - durRef] == PARTIAL_RIGHT) { y1 = beamElementCoords->at(idx)->m_yBeam + barYPos; int x2 = beamElementCoords->at(idx)->m_x + fractBeamWidth; y2 = beamSegment->m_firstNoteOrChord->m_yBeam + barYPos + beamSegment->m_beamSlope * (x2 - beamSegment->m_firstNoteOrChord->m_x); DrawObliquePolygon(dc, beamElementCoords->at(idx)->m_x, y1, x2, y2, polygonHeight); } - else if (beamElementCoords->at(idx)->m_partialFlags[testDur - DUR_8] == PARTIAL_LEFT) { + else if (beamElementCoords->at(idx)->m_partialFlags[testDur - durRef] == PARTIAL_LEFT) { y2 = beamElementCoords->at(idx)->m_yBeam + barYPos; int x1 = beamElementCoords->at(idx)->m_x - fractBeamWidth; y1 = beamSegment->m_firstNoteOrChord->m_yBeam + barYPos From 84a5cc46d40aff4fcf442120315e028708562a8b Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 18 Jan 2022 14:55:59 +0100 Subject: [PATCH 084/403] Remove scaling fret figures in guitar tablature --- src/view_tab.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/view_tab.cpp b/src/view_tab.cpp index d411bc54d82..dc3ee367230 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -83,7 +83,7 @@ void View::DrawTabNote(DeviceContext *dc, LayerElement *element, Layer *layer, S TextDrawingParams params; params.m_x = x; params.m_y = y; - params.m_pointSize = m_doc->GetDrawingLyricFont(glyphSize)->GetPointSize() * 3 / 5; + params.m_pointSize = m_doc->GetDrawingLyricFont(glyphSize)->GetPointSize(); fretTxt.SetPointSize(params.m_pointSize); dc->SetBrush(m_currentColour, AxSOLID); From 24beb9fec88a55ab6afe5f560e7cb73a31462fdb Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 18 Jan 2022 15:23:04 +0100 Subject: [PATCH 085/403] Add helper to get the staff notation size and avoid text scaling --- include/vrv/staff.h | 5 +++++ src/beam.cpp | 6 +++--- src/staff.cpp | 5 +++++ src/view_page.cpp | 3 ++- src/view_tab.cpp | 4 ++-- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/include/vrv/staff.h b/include/vrv/staff.h index df2d85cc7ba..54929b42275 100644 --- a/include/vrv/staff.h +++ b/include/vrv/staff.h @@ -91,6 +91,11 @@ class Staff : public Object, */ void AdjustDrawingStaffSize(); + /** + * Return the drawing staff size for staff notation, including for tablature staves + */ + int GetDrawingStaffNotationSize(); + /** * Check if the staff is currently visible. * Looks for the parent system and its current drawing scoreDef diff --git a/src/beam.cpp b/src/beam.cpp index 20c26d5a063..700a14cb476 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -90,7 +90,7 @@ void BeamSegment::CalcTabBeam( // Calculate the y position of the beam - this currently need to be inline with the code in View::DrawTabGrp that // draws the stems. - int glyphSize = staff->m_drawingStaffSize / TABLATURE_STAFF_RATIO; + int glyphSize = staff->GetDrawingStaffNotationSize(); beamInterface->m_fractionSize = glyphSize * 2 / 3; assert(m_beamElementCoordRefs.size() > 0); @@ -114,8 +114,8 @@ void BeamSegment::CalcTabBeam( // Adjust it further for tab.lute.french and tab.lute.italian if (staff->IsTabLuteFrench() || staff->IsTabLuteItalian()) { - beamInterface->m_beamWidthBlack /= 2; - beamInterface->m_beamWidthWhite = beamInterface->m_beamWidthWhite * 2 / 3; + beamInterface->m_beamWidthBlack = beamInterface->m_beamWidthBlack * 2 / 5; + beamInterface->m_beamWidthWhite = beamInterface->m_beamWidthWhite * 3 / 5; } beamInterface->m_beamWidth = beamInterface->m_beamWidthBlack + beamInterface->m_beamWidthWhite; diff --git a/src/staff.cpp b/src/staff.cpp index e9e4b883b3e..7ddeb69176b 100644 --- a/src/staff.cpp +++ b/src/staff.cpp @@ -187,6 +187,11 @@ void Staff::AdjustDrawingStaffSize() } } +int Staff::GetDrawingStaffNotationSize() +{ + return (this->IsTablature()) ? m_drawingStaffSize / TABLATURE_STAFF_RATIO : m_drawingStaffSize; +} + bool Staff::DrawingIsVisible() { System *system = vrv_cast(this->GetFirstAncestor(SYSTEM)); diff --git a/src/view_page.cpp b/src/view_page.cpp index b69a5cee6c0..967c5b6600c 100644 --- a/src/view_page.cpp +++ b/src/view_page.cpp @@ -413,7 +413,8 @@ void View::DrawStaffDefLabels(DeviceContext *dc, Measure *measure, StaffGrp *sta int y = staff->GetDrawingY() - (staffDef->GetLines() * m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / 2); - this->DrawLabels(dc, scoreDef, staffDef, x - space, y, abbreviations, staff->m_drawingStaffSize, 2 * space); + const int staffSize = staff->GetDrawingStaffNotationSize(); + this->DrawLabels(dc, scoreDef, staffDef, x - space, y, abbreviations, staffSize, 2 * space); } } diff --git a/src/view_tab.cpp b/src/view_tab.cpp index dc3ee367230..ec390c03fbd 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -66,7 +66,7 @@ void View::DrawTabNote(DeviceContext *dc, LayerElement *element, Layer *layer, S int x = element->GetDrawingX(); int y = element->GetDrawingY(); - int glyphSize = staff->m_drawingStaffSize / TABLATURE_STAFF_RATIO; + int glyphSize = staff->GetDrawingStaffNotationSize(); bool drawingCueSize = false; if (staff->m_drawingNotationType == NOTATIONTYPE_tab_guitar) { @@ -145,7 +145,7 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, int y = element->GetDrawingY(); int drawingDur = (tabGrp->GetDurGes() != DURATION_NONE) ? tabGrp->GetActualDurGes() : tabGrp->GetActualDur(); - int glyphSize = staff->m_drawingStaffSize / TABLATURE_STAFF_RATIO; + int glyphSize = staff->GetDrawingStaffNotationSize(); // We only need to draw the stems // Do we also need to draw the dots? From 03f493e7d037a3ee6a84deecf3748e06a116d286 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 18 Jan 2022 16:05:59 +0100 Subject: [PATCH 086/403] Adjust size and placement for guitar tablature frets --- src/view_tab.cpp | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/view_tab.cpp b/src/view_tab.cpp index ec390c03fbd..2e36934f352 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -74,26 +74,17 @@ void View::DrawTabNote(DeviceContext *dc, LayerElement *element, Layer *layer, S std::wstring fret = note->GetTabFretString(staff->m_drawingNotationType); FontInfo fretTxt; - // global styling for fret is missing - // if (!dc->UseGlobalStyling()) { fretTxt.SetFaceName("Times"); - fretTxt.SetWeight(FONTWEIGHT_bold); - //} TextDrawingParams params; params.m_x = x; params.m_y = y; - params.m_pointSize = m_doc->GetDrawingLyricFont(glyphSize)->GetPointSize(); + params.m_pointSize = m_doc->GetDrawingLyricFont(glyphSize)->GetPointSize() * 4 / 5; fretTxt.SetPointSize(params.m_pointSize); dc->SetBrush(m_currentColour, AxSOLID); dc->SetFont(&fretTxt); - // TextExtend extend; - // dc->GetTextExtent(fret, &extend, false); - // params.m_x -= (extend.m_width / 2); - - params.m_x += (m_doc->GetTextGlyphWidth(L'0', &fretTxt, drawingCueSize)); params.m_y -= (m_doc->GetTextGlyphHeight(L'0', &fretTxt, drawingCueSize) / 2); dc->StartText(ToDeviceContextX(params.m_x), ToDeviceContextY(params.m_y), HORIZONTALALIGNMENT_center); From f80399094d0257340a780726c57dcb23386fa606 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 18 Jan 2022 16:06:45 +0100 Subject: [PATCH 087/403] Update Leipzig to version 5.2.66 --- data/Leipzig.xml | 12 +++---- data/Leipzig/EBA7-luteDurationWhole.xml | 2 +- data/Leipzig/EBA8-luteDurationHalf.xml | 2 +- data/Leipzig/EBA9-luteDurationQuarter.xml | 2 +- data/Leipzig/EBAA-luteDuration8th.xml | 2 +- data/Leipzig/EBAB-luteDuration16th.xml | 2 +- data/Leipzig/EBAC-luteDuration32nd.xml | 2 +- fonts/Leipzig.svg | 43 ++++++++++++----------- 8 files changed, 34 insertions(+), 33 deletions(-) diff --git a/data/Leipzig.xml b/data/Leipzig.xml index 05998076264..0e3d521a796 100644 --- a/data/Leipzig.xml +++ b/data/Leipzig.xml @@ -359,12 +359,12 @@ - - - - - - + + + + + + diff --git a/data/Leipzig/EBA7-luteDurationWhole.xml b/data/Leipzig/EBA7-luteDurationWhole.xml index df659f911b5..cb7c7fee76b 100644 --- a/data/Leipzig/EBA7-luteDurationWhole.xml +++ b/data/Leipzig/EBA7-luteDurationWhole.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBA8-luteDurationHalf.xml b/data/Leipzig/EBA8-luteDurationHalf.xml index e0c58831861..31a0c6c9a1a 100644 --- a/data/Leipzig/EBA8-luteDurationHalf.xml +++ b/data/Leipzig/EBA8-luteDurationHalf.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBA9-luteDurationQuarter.xml b/data/Leipzig/EBA9-luteDurationQuarter.xml index 67e2edd4c84..29d4700aabc 100644 --- a/data/Leipzig/EBA9-luteDurationQuarter.xml +++ b/data/Leipzig/EBA9-luteDurationQuarter.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBAA-luteDuration8th.xml b/data/Leipzig/EBAA-luteDuration8th.xml index ac517af6788..9320a94523e 100644 --- a/data/Leipzig/EBAA-luteDuration8th.xml +++ b/data/Leipzig/EBAA-luteDuration8th.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBAB-luteDuration16th.xml b/data/Leipzig/EBAB-luteDuration16th.xml index 10baf86884f..3000b69b0b6 100644 --- a/data/Leipzig/EBAB-luteDuration16th.xml +++ b/data/Leipzig/EBAB-luteDuration16th.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBAC-luteDuration32nd.xml b/data/Leipzig/EBAC-luteDuration32nd.xml index afc87eadddd..794441ef9c4 100644 --- a/data/Leipzig/EBAC-luteDuration32nd.xml +++ b/data/Leipzig/EBAC-luteDuration32nd.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/fonts/Leipzig.svg b/fonts/Leipzig.svg index 23bfc1ee94a..abef620cf1d 100644 --- a/fonts/Leipzig.svg +++ b/fonts/Leipzig.svg @@ -2,11 +2,11 @@ -Created by FontForge 20201107 at Tue Jan 18 09:38:40 2022 +Created by FontForge 20201107 at Tue Jan 18 14:46:26 2022 By Laurent Pugin Created by Etienne Darbellay, Jean-Francois Marti, Laurent Pugin, and Klaus Rettinghaus. This font is licensed under the SIL Open Font License \(http://scripts.sil.org/OFL\). -Version 5.2.65 +Version 5.2.66 @@ -1062,30 +1062,31 @@ c-1.52019 0 -2.55487 0.151846 -3.72446 0.151846c-5.08589 0 -8.99941 4.62292 -8.9 c17.6711 24.5432 27.4372 52.9492 27.4372 81.2492c0 17.607 -2.75619 26.7594 -10.5653 40.4404c-8.59035 13.2529 -22.1772 26.5602 -40.4353 26.5602c-16.4256 0 -28.7492 -8.46116 -36.4676 -19.6099c-6.82344 -10.7226 -10.533 -19.9402 -10.533 -35.3906 c0 -14.8027 7.45053 -27.4278 16.2003 -36.1777c6.4778 -6.4778 13.0667 -9.82293 21.8002 -9.82293c9.45771 0 21.5864 4 31 4z" /> +d="M-82 763c12 4 35 8 70 14c38 6 61 10 67 12c7 2 12 2 14 2c7 0 11 -3 13 -9s3 -17 3 -33c0 -23 0 -42 -1 -58c-1 -11 -2.55285 -77.9923 -4 -201c-1 -85 2 -296 2 -335c0 -19 1 -33 1 -41v-60c1 -23 4 -41 9 -54h-60c-8 155 -23 496.965 -23 725c0 1 0 6 -1 16 +c0 4 -2 5 -5 5c-10 -1 -25 -4 -46 -11c-22 -6 -35 -10 -37 -10c-2 24 -2 37 -2 38z" /> +d="M-1 1l10 770c0.128549 8.9984 1 15 2 19c2 3 6 5 12 5c0 0 12 -1 36 -4c79 -10 136 -17 172 -24c85 -16 143 -34 173 -56c-12 -27 -21 -42 -25 -42c-1 0 -1 0 -2 1l-104 34c-67 20 -123 30 -165 30c-13 0 -25 -1 -36 -3c-3 -38 -5.13456 -104.997 -7 -202 +c-2 -104 -9 -378 -20 -529z" /> +d="M377 435c-10.2893 0 -30 5.49144 -30 14v2c4 12 6 22 6 30c0 14 -5 24 -15 30c-37 17 -81 33 -132 47c-58 17 -98 26 -125 26c-2 0 -6 0 -13 -1c-2 -1 -3 -4 -3 -9c1.65723 -1.6582 2 -7.52637 2 -13v-49c0 -11 2 -20 0 -27c3 0 6 1 9 1c43 0 91 -11 151 -31l99 -34 +c44 -13 66 -34 66 -72c0 -11 -3 -26 -6 -42c-2 -2 -4 -3 -6 -3c-4.08008 0 -23.2266 5 -26 5c1 8 4 23 4 29c0 14 -2 24 -8 27c-12 7 -46 18 -102 35c-68 20 -121 31 -159 31c-11 0 -23 -1 -29 -2c-5 -36 -3.61719 -80.0146 -6 -138c-3 -73 -8 -270 -10 -291h-44l8 740 +c0.0216185 1.99971 1 12 3 32c0 6 4 9 11 9c3 0 12 -1 27 -3c160 -22 267 -54 321 -95c8 -21 13 -44 13 -68c0 -22 -6 -39 -15 -50c0 0 -27 10.6258 -27 16c3 15 5 28 5 37c0 21 -9 38 -30 50c-24 15 -69 29 -133 44l-117 12l3 -88h12c35 0 90 -13 164 -39 +c81 -29 129 -54 142 -75c3 -6 3 -13 3 -21c0 -11.5061 -9.94969 -66 -13 -66z" /> +d="M0 0l8 740v36c0 6 3 9 8 9l35 -5l80 -9c37 -5 72 -13 107 -25c46 -15 90 -36 132 -63c8 -21 13 -44 13 -68c0 -22 -6 -39 -15 -50c-2 1 -8 4 -19 9c-5 3 -8 5 -8 7c3 15 5 28 5 37c0 21 -9 38 -30 50c-24 15 -69 29 -133 44l-117 12l3 -88h12c35 0 90 -13 164 -39 +c81 -29 129 -54 142 -75c3 -6 3 -13 3 -21s-1 -20 -4 -34c-5 -21 -9 -32 -9 -32c-6 0 -11 1 -16 3s-9 4 -11 6s-3 4 -3 5v2c4 12 6 22 6 30c0 14 -5 24 -15 30c-37 17 -81 33 -132 47c-58 17 -102 26 -129 26c-2 0 -6 0 -13 -1c-2 -1 -4.63296 -62.9761 -9 -187 +c-5 -142 -8 -371 -11 -396h-44z" /> +d="M392 226v-3c0 -10 -4 -44 -9 -45c-4 0 -28 9 -31 9c1 8 5 25 5 31c0 14 -2 23 -8 27c-13 8 -47 27 -102 43c-68 20 -121 24 -159 24c-8 0 -17 -1 -27 -3c-1 -21 -9.38086 -128.922 -11 -166l-6 -144l-44 1l8 740c0.0429688 4.0127 0 8 0 13c0 0 -1 23 -1 24c0 6 3 9 12 9 +s31 -3 63 -10l87 -17c73 -14 153 -38 200 -73c9 -21 14 -42 14 -63c0 -19 -6 -35 -15 -46c-5 3 -27 10 -27 16c0 10 4 20 4 27c0 22 -12 38 -34 50c-20 11 -62 20 -128 38l-117 16l1 -82h15c37 0 90 -13 160 -38c80 -29 127 -55 139 -76c3 -6 4 -12 4 -19 +c0 -11 -13 -55 -14 -62c-8 2 -30 9 -30 16c0 13 2 29 5 38c0 8 -2 13 -7 17c-4 4 -13 9 -27 13c-54 24 -162 60 -229 60h-11c-6 0 -8 -1 -8 -7c0 -14 1 -38 1 -50c0 -10 0 -18 -2 -25h10c44 0 98 -11 160 -36l105 -43c30 -11 45 -26 45 -51c0 -9 -4 -28 -11 -58h-1 +c-7 0 -25 9 -29 9c2 10 4 26 5 35c0 8 -2 13 -6 16c-15 9 -48 21 -99 39c-68 23 -120 34 -156 34c-11 0 -19 -1 -24 -2v-17v-65v-5c4 0 9 1 13 1c43 0 93 -10 151 -28l99 -33c44.2412 -16.0879 67 -40 67 -79z" /> +d="M52 538v-54v-6h10c41 0 90 -10 150 -32l103 -37c45 -12 66 -35 66 -73c0 -9 -2 -31 -5 -50c-2 -2 -4 -2 -6 -2c-4 0 -22 11 -27 11c1 9 3 26 3 32c0 14 -3 22 -8 25c-15 9 -52 21 -105 38c-68 22 -119 34 -158 34c-12 0 -20 -1 -24 -2l-1 -67c3 0 5 -7 7 -7 +c44 0 97 -1 158 -25l101 -40c44 -14 67 -41 67 -79c0 -10 -3 -24 -6 -42c-3 -2 -5 -2 -7 -2c-4 0 -22 12 -25 12c1 8 3 16 3 22c0 14 -2 23 -8 26c-15 9 -50 21 -104 39c-71 23 -126 35 -163 35c-7 0 -16 4 -25 2c-1 -105 -2 -281 -4 -297l-44 1l3 826 +c0.0762817 21.0029 -2 27 13 27c1 0 2 -1 3 -1c70 -8 138 -17 200 -34c66 -18 115 -40 148 -65c7 -18 11 -34 11 -48c0 -19 -5 -35 -15 -47c-5 2 -28.7328 9.03846 -28 16c2 19 6 32 6 36c0 16 -10 28 -31 37c-17 7 -61 18 -131 35l-115 11l-1 -64c4 0 8 1 12 1 +c36 0 91 -12 164 -36c81 -27 128 -52 141 -73c3 -7 4 -14 4 -21c0 -8 -11 -65 -13 -65c-10 0 -30 5 -30 13v3c4 11 6 20 6 29c0 14 -5 25 -15 31c-59 26 -191 73 -260 73c-13 0 -14 1 -14 -8c0 -2 1 -7 2 -14c0 -6 -3 -14 -2 -19c1.76465 -8.8252 2 -18 -1 -29h9 +c44 0 96 -13 163 -40l117 -50c26.8054 -11.4553 40 -25 40 -47c-2 -16 -5 -45 -8 -63c-2 -2 -4 -2 -6 -2c-9 0 -19 12 -26 12v40c-1 6 -3 11 -6 13c-19 11 -54 26 -105 44c-70 26 -124 39 -162 39c-9 0 -16 -1 -21 -2c-1 -7 0 -14 0 -20z" /> (functorParams); + assert(params); + + // stop all previously held notes + for (auto &held : params->m_heldNotes) { + if (held.m_pitch > 0) { + params->m_midiFile->addNoteOff(params->m_midiTrack, held.m_stopTime * params->m_midiFile->getTPQ(), + params->m_midiChannel, held.m_pitch); + } + } + + params->m_heldNotes.clear(); + + return FUNCTOR_CONTINUE; +} + } // namespace vrv diff --git a/src/staff.cpp b/src/staff.cpp index 08b1857bf40..e9e4b883b3e 100644 --- a/src/staff.cpp +++ b/src/staff.cpp @@ -33,8 +33,6 @@ #include "vrv.h" #include "zone.h" -#include "MidiFile.h" - namespace vrv { //---------------------------------------------------------------------------- @@ -718,22 +716,4 @@ int Staff::GenerateMIDI(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } -int Staff::GenerateMIDIEnd(FunctorParams *functorParams) -{ - GenerateMIDIParams *params = vrv_params_cast(functorParams); - assert(params); - - // stop all previously held notes - for (auto &held : params->m_heldNotes) { - if (held.m_pitch > 0) { - params->m_midiFile->addNoteOff(params->m_midiTrack, held.m_stopTime * params->m_midiFile->getTPQ(), - params->m_midiChannel, held.m_pitch); - } - } - - params->m_heldNotes.clear(); - - return FUNCTOR_CONTINUE; -} - } // namespace vrv From 5474ee9f406318f4772fc3e62e2d8335f9037ddf Mon Sep 17 00:00:00 2001 From: David Bauer Date: Wed, 19 Jan 2022 13:18:53 +0100 Subject: [PATCH 090/403] Apply to find ancestor staff --- include/vrv/layerelement.h | 2 +- src/arpeg.cpp | 9 +++---- src/artic.cpp | 14 +++-------- src/beam.cpp | 10 +++----- src/chord.cpp | 9 +++---- src/clef.cpp | 6 ++--- src/editortoolkit_neume.cpp | 15 ++++-------- src/elementpart.cpp | 3 +-- src/ftrem.cpp | 3 +-- src/horizontalaligner.cpp | 4 +--- src/iopae.cpp | 3 +-- src/layer.cpp | 3 +-- src/layerelement.cpp | 42 ++++++++++++--------------------- src/ligature.cpp | 3 +-- src/mrest.cpp | 3 +-- src/note.cpp | 47 ++++++++++++------------------------- src/rest.cpp | 13 +++------- src/slur.cpp | 10 ++++---- src/tie.cpp | 4 ++-- src/timeinterface.cpp | 10 ++++---- src/tuplet.cpp | 8 +++---- src/verse.cpp | 4 ++-- src/view_control.cpp | 3 +-- src/view_page.cpp | 2 +- src/view_slur.cpp | 7 +++--- 25 files changed, 81 insertions(+), 156 deletions(-) diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index 6c52f85a487..cd825acbe79 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -185,7 +185,7 @@ class LayerElement : public Object, /** * Find the ancestor or cross staff */ - Staff *FindStaff(StaffSearch strategy); + Staff *FindStaff(StaffSearch strategy, bool assertExistence = true) const; /** * Look for a cross or a a parent LayerElement (note, chord, rest) with a cross staff. diff --git a/src/arpeg.cpp b/src/arpeg.cpp index 2efcb51bbb5..d6ba14beef4 100644 --- a/src/arpeg.cpp +++ b/src/arpeg.cpp @@ -226,13 +226,10 @@ int Arpeg::AdjustArpeg(FunctorParams *functorParams) // We should have call DrawArpeg before assert(this->GetCurrentFloatingPositioner()); - Staff *topStaff = vrv_cast(topNote->GetFirstAncestor(STAFF)); - assert(topStaff); + Staff *topStaff = topNote->FindStaff(ANCESTOR_ONLY); + Staff *bottomStaff = bottomNote->FindStaff(ANCESTOR_ONLY); - Staff *bottomStaff = vrv_cast(bottomNote->GetFirstAncestor(STAFF)); - assert(bottomStaff); - - Staff *crossStaff = GetCrossStaff(); + Staff *crossStaff = this->GetCrossStaff(); const int staffN = (crossStaff != NULL) ? crossStaff->GetN() : topStaff->GetN(); int minTopLeft, maxTopRight; diff --git a/src/artic.cpp b/src/artic.cpp index beb8100594b..5cd1b1dfa6d 100644 --- a/src/artic.cpp +++ b/src/artic.cpp @@ -399,17 +399,10 @@ int Artic::AdjustArtic(FunctorParams *functorParams) int yIn, yOut, yRel; - // Get the parent or cross-staff / layer - - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); - - if (m_crossStaff) { - staff = m_crossStaff; - } - + Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); Beam *beam = dynamic_cast(GetFirstAncestor(BEAM)); int staffYBottom = -params->m_doc->GetDrawingStaffSize(staff->m_drawingStaffSize); + // Avoid in artic to be in legder lines if (this->GetDrawingPlace() == STAFFREL_above) { yIn = std::max( @@ -550,8 +543,7 @@ int Artic::CalculateHorizontalShift(Doc *doc, LayerElement *parent, data_STEMDIR switch (artic) { case ARTICULATION_stacc: case ARTICULATION_stacciss: { - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); const int stemWidth = doc->GetDrawingStemWidth(staff->m_drawingStaffSize); if ((stemDir == STEMDIRECTION_up) && (m_drawingPlace == STAFFREL_above)) { shift += shift - stemWidth / 2; diff --git a/src/beam.cpp b/src/beam.cpp index 866078356fb..757b36a97b2 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1292,9 +1292,7 @@ void Beam::FilterList(ArrayOfObjects *childList) } } - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); - Staff *beamStaff = staff; + Staff *beamStaff = this->FindStaff(ANCESTOR_ONLY); /* if (this->HasBeamWith()) { Measure *measure = vrv_cast(this->GetFirstAncestor(MEASURE)); @@ -1518,8 +1516,7 @@ int Beam::CalcLayerOverlap(Doc *doc, Object *beam, int directionBias, int y1, in auto collidingElementsList = parentLayer->GetLayerElementsForTimeSpanOf(this, true); if (collidingElementsList.empty()) return 0; - Staff *staff = vrv_cast(GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); int leftMargin = 0; int rightMargin = 0; @@ -1596,8 +1593,7 @@ int Beam::AdjustBeams(FunctorParams *functorParams) const int overlapMargin = std::max(leftMargin * params->m_directionBias, rightMargin * params->m_directionBias); if (overlapMargin >= params->m_overlapMargin) { - Staff *staff = vrv_cast(GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); const int staffOffset = params->m_doc->GetDrawingUnit(staff->m_drawingStaffSize); params->m_overlapMargin = (overlapMargin + staffOffset) * params->m_directionBias; } diff --git a/src/chord.cpp b/src/chord.cpp index 22fb033ac14..54da06946a3 100644 --- a/src/chord.cpp +++ b/src/chord.cpp @@ -610,8 +610,7 @@ int Chord::CalcArtic(FunctorParams *functorParams) params->m_parent = this; params->m_stemDir = this->GetDrawingStemDir(); - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); Layer *layer = vrv_cast(this->GetFirstAncestor(LAYER)); assert(layer); @@ -681,8 +680,7 @@ int Chord::CalcStem(FunctorParams *functorParams) Stem *stem = this->GetDrawingStem(); assert(stem); - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); Layer *layer = vrv_cast(this->GetFirstAncestor(LAYER)); assert(layer); @@ -944,8 +942,7 @@ int Chord::AdjustCrossStaffContent(FunctorParams *functorParams) } // Reposition the stem - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); Staff *rootStaff = (stem->GetDrawingStemDir() == STEMDIRECTION_up) ? extremalStaves.back() : extremalStaves.front(); stem->SetDrawingYRel(stem->GetDrawingYRel() + getShift(staff) - getShift(rootStaff)); diff --git a/src/clef.cpp b/src/clef.cpp index 8c3c3e9caeb..f296da27b6f 100644 --- a/src/clef.cpp +++ b/src/clef.cpp @@ -184,8 +184,7 @@ int Clef::AdjustBeams(FunctorParams *functorParams) assert(params); if (!params->m_beam) return FUNCTOR_SIBLINGS; - Staff *staff = vrv_cast(GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); auto currentShapeIter = topToMiddleProportions.find(GetShape()); if (currentShapeIter == topToMiddleProportions.end()) return FUNCTOR_CONTINUE; @@ -235,8 +234,7 @@ int Clef::AdjustClefChanges(FunctorParams *functorParams) assert(params->m_aligner); - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); // Create ad comparison object for each type / @n std::vector ns; diff --git a/src/editortoolkit_neume.cpp b/src/editortoolkit_neume.cpp index 2860b9ea08b..6e0a39ea39e 100644 --- a/src/editortoolkit_neume.cpp +++ b/src/editortoolkit_neume.cpp @@ -2194,8 +2194,7 @@ bool EditorToolkitNeume::ChangeGroup(std::string elementId, std::string contour) int initialLrx = firstChild->GetZone()->GetLrx(); int initialLry = firstChild->GetZone()->GetLry(); - Staff *staff = vrv_cast(el->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = el->FindStaff(ANCESTOR_ONLY); Facsimile *facsimile = m_doc->GetFacsimile(); const int noteHeight = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / 2); @@ -2294,8 +2293,7 @@ bool EditorToolkitNeume::ToggleLigature(std::vector elementIds, std int ligLrx = firstNc->GetZone()->GetLrx(); int ligLry = firstNc->GetZone()->GetLry(); - Staff *staff = vrv_cast(firstNc->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = firstNc->FindStaff(ANCESTOR_ONLY); const int noteHeight = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / 2); const int noteWidth = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / 1.4); @@ -2782,8 +2780,7 @@ bool EditorToolkitNeume::AdjustPitchFromPosition(Object *obj, Clef *clef) if (obj->Is(CUSTOS)) { Custos *custos = dynamic_cast(obj); - Staff *staff = vrv_cast(custos->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = custos->FindStaff(ANCESTOR_ONLY); // Check interfaces if ((custos->GetPitchInterface() == NULL) || (custos->GetFacsimileInterface() == NULL)) { @@ -2843,8 +2840,7 @@ bool EditorToolkitNeume::AdjustPitchFromPosition(Object *obj, Clef *clef) else if (obj->Is(SYLLABLE)) { Syllable *syl = dynamic_cast(obj); - Staff *staff = vrv_cast(syl->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = syl->FindStaff(ANCESTOR_ONLY); ListOfObjects pitchedChildren; InterfaceComparison ic(INTERFACE_PITCH); @@ -2921,9 +2917,8 @@ bool EditorToolkitNeume::AdjustClefLineFromPosition(Clef *clef, Staff *staff) assert(clef); if (staff == NULL) { - staff = dynamic_cast(clef->GetFirstAncestor(STAFF)); + staff = clef->FindStaff(ANCESTOR_ONLY); } - assert(staff); if (!clef->HasFacs() || !staff->HasFacs()) { return false; diff --git a/src/elementpart.cpp b/src/elementpart.cpp index 2d4d8c82d32..f13af9d2068 100644 --- a/src/elementpart.cpp +++ b/src/elementpart.cpp @@ -307,8 +307,7 @@ bool Stem::IsSupportedChild(Object *child) int Stem::CompareToElementPosition(Doc *doc, LayerElement *otherElement, int margin) { - Staff *staff = vrv_cast(GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); // check if there is an overlap on the left or on the right and displace stem's parent correspondingly const int right = HorizontalLeftOverlap(otherElement, doc, margin, 0); diff --git a/src/ftrem.cpp b/src/ftrem.cpp index 8b23825fec2..abd3e82ff70 100644 --- a/src/ftrem.cpp +++ b/src/ftrem.cpp @@ -101,8 +101,7 @@ void FTrem::FilterList(ArrayOfObjects *childList) ++iter; } - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); this->InitCoords(childList, staff, BEAMPLACE_NONE); this->InitCue(false); diff --git a/src/horizontalaligner.cpp b/src/horizontalaligner.cpp index c2aceeb0e8b..25b1774ff91 100644 --- a/src/horizontalaligner.cpp +++ b/src/horizontalaligner.cpp @@ -1163,9 +1163,7 @@ int Alignment::AdjustDotsEnd(FunctorParams *functorParams) // otherwise they should be kept separate for (auto dot : params->m_dots) { // A third staff size will be used as required margin - const Staff *staff - = vrv_cast(dot->m_crossStaff ? dot->m_crossStaff : dot->GetFirstAncestor(STAFF)); - assert(staff); + const Staff *staff = dot->FindStaff(RESOLVE_CROSSSTAFF); const int staffSize = staff->m_drawingStaffSize; const int thirdUnit = params->m_doc->GetDrawingUnit(staffSize) / 3; diff --git a/src/iopae.cpp b/src/iopae.cpp index 5a5f14ac267..2cd73976dba 100644 --- a/src/iopae.cpp +++ b/src/iopae.cpp @@ -498,8 +498,7 @@ void PAEOutput::WriteTuplet(Tuplet *tuplet) { assert(tuplet); - Staff *staff = vrv_cast(tuplet->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = tuplet->FindStaff(ANCESTOR_ONLY); double content = tuplet->GetContentAlignmentDuration(NULL, NULL, true, staff->m_drawingNotationType); // content = DUR_MAX / 2^(dur - 2) diff --git a/src/layer.cpp b/src/layer.cpp index dd49cf7da61..96e31e5328c 100644 --- a/src/layer.cpp +++ b/src/layer.cpp @@ -282,8 +282,7 @@ data_STEMDIRECTION Layer::GetDrawingStemDir(const ArrayOfBeamElementCoords *coor assert(alignmentLast); // We are ignoring cross-staff situation here because this should not be called if we have one - Staff *staff = vrv_cast(first->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = first->FindStaff(ANCESTOR_ONLY); double time = alignmentFirst->GetTime(); double duration = alignmentLast->GetTime() - time + last->GetAlignmentDuration(); diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 111f11457ee..0a9260f61d8 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -242,7 +242,7 @@ int LayerElement::GetOriginalLayerN() return layerN; } -Staff *LayerElement::FindStaff(const StaffSearch strategy) +Staff *LayerElement::FindStaff(const StaffSearch strategy, const bool assertExistence) const { Staff *staff = NULL; if (strategy == RESOLVE_CROSSSTAFF) { @@ -250,7 +250,7 @@ Staff *LayerElement::FindStaff(const StaffSearch strategy) staff = this->GetCrossStaff(layer); } if (!staff) staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + if (assertExistence) assert(staff); return staff; } @@ -274,8 +274,7 @@ data_STAFFREL_basic LayerElement::GetCrossStaffRel() { if (!m_crossStaff) return STAFFREL_basic_NONE; - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); return (m_crossStaff->GetN() < staff->GetN()) ? STAFFREL_basic_above : STAFFREL_basic_below; } @@ -575,9 +574,8 @@ int LayerElement::GetDrawingRadius(Doc *doc, bool isInLigature) wchar_t code = 0; int dur = DUR_4; - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); bool isMensuralDur = false; - assert(staff); if (this->Is(NOTE)) { Note *note = vrv_cast(this); assert(note); @@ -830,7 +828,7 @@ MapOfDotLocs LayerElement::CalcOptimalDotLocations() return {}; } - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); const int layerCount = staff->GetChildCount(LAYER); // Calculate primary/secondary dot locations @@ -1104,9 +1102,7 @@ int LayerElement::AlignHorizontally(FunctorParams *functorParams) m_alignment = note->GetAlignment(); } else if (this->Is(SYL)) { - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); - + Staff *staff = this->FindStaff(ANCESTOR_ONLY); if (staff->m_drawingNotationType == NOTATIONTYPE_neume) { type = ALIGNMENT_DEFAULT; } @@ -1158,8 +1154,7 @@ int LayerElement::AlignHorizontally(FunctorParams *functorParams) else { assert(this->IsGraceNote()); if (this->Is(CHORD) || (this->Is(NOTE) && !chordParent)) { - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); int graceAlignerId = params->m_doc->GetOptions()->m_graceRhythmAlign.GetValue() ? 0 : staff->GetN(); GraceAligner *graceAligner = m_alignment->GetGraceAligner(graceAlignerId); // We know that this is a note or a chord - we stack them and they will be added at the end of the layer @@ -1186,8 +1181,7 @@ int LayerElement::SetAlignmentPitchPos(FunctorParams *functorParams) if (this->IsScoreDefElement()) return FUNCTOR_SIBLINGS; LayerElement *layerElementY = this; - Staff *staffY = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staffY); + Staff *staffY = this->FindStaff(ANCESTOR_ONLY); Layer *layerY = vrv_cast(this->GetFirstAncestor(LAYER)); assert(layerY); @@ -1285,8 +1279,7 @@ int LayerElement::SetAlignmentPitchPos(FunctorParams *functorParams) // Automatically calculate rest position else { // set default location to the middle of the staff - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); loc = staff->m_drawingLines - 1; if (loc % 2 != 0) --loc; if (staff->m_drawingLines > 1) loc += 2; @@ -1314,8 +1307,7 @@ int LayerElement::SetAlignmentPitchPos(FunctorParams *functorParams) // Automatically calculate rest position else { // set default location to the middle of the staff - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); loc = staff->m_drawingLines - 1; if ((rest->GetDur() < DUR_4) && (loc % 2 != 0)) --loc; // Adjust special cases @@ -1467,8 +1459,7 @@ int LayerElement::AdjustBeams(FunctorParams *functorParams) if (accid->GetFunc() == accidLog_FUNC_edit) return FUNCTOR_CONTINUE; } - Staff *staff = vrv_cast(GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); // check if top/bottom of the element overlaps with beam coordinates int leftMargin = 0, rightMargin = 0; @@ -1579,8 +1570,7 @@ std::pair LayerElement::CalcElementHorizontalOverlap(Doc *doc, const std::vector &otherElements, bool areDotsAdjusted, bool isChordElement, bool isLowerElement, bool unison) { - Staff *staff = vrv_cast(GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); bool isInUnison = false; int shift = 0; @@ -1888,7 +1878,7 @@ int LayerElement::AdjustXPos(FunctorParams *functorParams) overlap = std::max(overlap, element->GetSelfRight() - this->GetSelfLeft() + margin); } else if (this->Is(ACCID) && element->Is(NOTE)) { - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); const int staffTop = staff->GetDrawingY(); const int staffBottom = staffTop - params->m_doc->GetDrawingStaffSize(params->m_staffSize); int verticalMargin = 0; @@ -2070,8 +2060,7 @@ int LayerElement::PrepareCrossStaff(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } - Staff *parentStaff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(parentStaff); + Staff *parentStaff = this->FindStaff(ANCESTOR_ONLY); // Check if we have a cross-staff to itself... if (m_crossStaff == parentStaff) { LogWarning("The cross staff reference '%d' for element '%s' seems to be identical to the parent staff", @@ -2349,8 +2338,7 @@ int LayerElement::FindSpannedLayerElements(FunctorParams *functorParams) // Skip if neither parent staff nor cross staff matches the given staff number if (!params->m_staffNs.empty()) { - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); if (params->m_staffNs.find(staff->GetN()) == params->m_staffNs.end()) { Layer *layer = NULL; staff = this->GetCrossStaff(layer); diff --git a/src/ligature.cpp b/src/ligature.cpp index 8664fb0939a..86cd7984ea2 100644 --- a/src/ligature.cpp +++ b/src/ligature.cpp @@ -136,8 +136,7 @@ int Ligature::CalcLigatureNotePos(FunctorParams *functorParams) m_drawingShapes.clear(); Note *lastNote = dynamic_cast(this->GetList(this)->back()); - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); const ArrayOfObjects *notes = this->GetList(this); assert(notes); diff --git a/src/mrest.cpp b/src/mrest.cpp index 9617260d0a6..a969bf1197e 100644 --- a/src/mrest.cpp +++ b/src/mrest.cpp @@ -90,8 +90,7 @@ int MRest::ResetHorizontalAlignment(FunctorParams *functorParams) int MRest::GetOptimalLayerLocation(Staff *staff, Layer *layer, int defaultLocation) { if (!layer) return defaultLocation; - Staff *parentStaff = vrv_cast(GetFirstAncestor(STAFF)); - assert(parentStaff); + Staff *parentStaff = this->FindStaff(ANCESTOR_ONLY); // handle rest positioning for 2 layers. 3 layers and more are much more complex to solve if (parentStaff->GetChildCount(LAYER) != 2) return defaultLocation; diff --git a/src/note.cpp b/src/note.cpp index d29d4c622fc..6f236848cca 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -211,8 +211,7 @@ Accid *Note::GetDrawingAccid() bool Note::HasLedgerLines(int &linesAbove, int &linesBelow, Staff *staff) { if (!staff) { - staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + staff = this->FindStaff(ANCESTOR_ONLY); } linesAbove = (this->GetDrawingLoc() - staff->m_drawingLines * 2 + 2) / 2; @@ -456,8 +455,7 @@ wchar_t Note::GetMensuralNoteheadGlyph() const return 0; } - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); bool mensural_black = (staff->m_drawingNotationType == NOTATIONTYPE_mensural_black); wchar_t code = 0; @@ -620,8 +618,7 @@ void Note::CalcMIDIPitch(int shift) } else if (this->HasTabCourse()) { // tablature - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); if (staff->m_drawingTuning) { m_MIDIPitch = staff->m_drawingTuning->CalcPitchNumber( this->GetTabCourse(), this->GetTabFret(), staff->m_drawingNotationType); @@ -865,8 +862,7 @@ int Note::CalcArtic(FunctorParams *functorParams) params->m_parent = this; params->m_stemDir = this->GetDrawingStemDir(); - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); Layer *layer = vrv_cast(this->GetFirstAncestor(LAYER)); assert(layer); @@ -934,8 +930,7 @@ int Note::CalcStem(FunctorParams *functorParams) Stem *stem = this->GetDrawingStem(); assert(stem); - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); Layer *layer = vrv_cast(this->GetFirstAncestor(LAYER)); assert(layer); @@ -987,8 +982,8 @@ int Note::CalcChordNoteHeads(FunctorParams *functorParams) FunctorDocParams *params = vrv_params_cast(functorParams); assert(params); - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); + const int staffSize = staff->m_drawingStaffSize; bool mixedCue = false; if (Chord *chord = this->IsChordTone(); chord != NULL) { @@ -998,10 +993,6 @@ int Note::CalcChordNoteHeads(FunctorParams *functorParams) // Nothing to do for notes that are not in a cluster and without cue mixing if (!m_cluster && !mixedCue) return FUNCTOR_SIBLINGS; - if (m_crossStaff) staff = m_crossStaff; - - int staffSize = staff->m_drawingStaffSize; - int diameter = 2 * this->GetDrawingRadius(params->m_doc); // If chord consists partially of cue notes we may have to shift the noteheads @@ -1097,13 +1088,9 @@ int Note::CalcDots(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); - - if (m_crossStaff) staff = m_crossStaff; - - bool drawingCueSize = this->GetDrawingCueSize(); - int staffSize = staff->m_drawingStaffSize; + Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); + const int staffSize = staff->m_drawingStaffSize; + const bool drawingCueSize = this->GetDrawingCueSize(); Dots *dots = NULL; Chord *chord = this->IsChordTone(); @@ -1165,19 +1152,15 @@ int Note::CalcLedgerLines(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); - if (!this->IsVisible()) { return FUNCTOR_SIBLINGS; } - if (m_crossStaff) staff = m_crossStaff; - - bool drawingCueSize = this->GetDrawingCueSize(); - int staffSize = staff->m_drawingStaffSize; - int staffX = staff->GetDrawingX(); - int radius = GetDrawingRadius(params->m_doc); + Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); + const int staffSize = staff->m_drawingStaffSize; + const int staffX = staff->GetDrawingX(); + const bool drawingCueSize = this->GetDrawingCueSize(); + const int radius = this->GetDrawingRadius(params->m_doc); /************** Ledger lines: **************/ diff --git a/src/rest.cpp b/src/rest.cpp index 95cbef4f7a6..30792c475e9 100644 --- a/src/rest.cpp +++ b/src/rest.cpp @@ -521,8 +521,7 @@ int Rest::AdjustBeams(FunctorParams *functorParams) // Adjustment should be an even number, so that the rest is positioned properly const int overlapMargin = std::min(leftMargin, rightMargin); if (overlapMargin < 0) { - Staff *staff = vrv_cast(GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); if ((!HasOloc() || !HasPloc()) && !HasLoc()) { const int unit = params->m_doc->GetDrawingUnit(staff->m_drawingStaffSize); const int locAdjust = (params->m_directionBias * (overlapMargin - 2 * unit + 1) / unit); @@ -608,11 +607,7 @@ int Rest::CalcDots(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); - - if (m_crossStaff) staff = m_crossStaff; - + Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); const bool drawingCueSize = this->GetDrawingCueSize(); const int staffSize = staff->m_drawingStaffSize; @@ -676,9 +671,7 @@ int Rest::Transpose(FunctorParams *functorParams) if ((!HasOloc() || !HasPloc()) && !HasLoc()) return FUNCTOR_SIBLINGS; // Find whether current layer is top, middle (either one if multiple) or bottom - Staff *parentStaff = vrv_cast(GetFirstAncestor(STAFF)); - assert(parentStaff); - + Staff *parentStaff = this->FindStaff(ANCESTOR_ONLY); Layer *parentLayer = vrv_cast(GetFirstAncestor(LAYER)); assert(parentLayer); diff --git a/src/slur.cpp b/src/slur.cpp index 9dba6d151e5..c65ebb97e93 100644 --- a/src/slur.cpp +++ b/src/slur.cpp @@ -137,8 +137,8 @@ Staff *Slur::GetBoundaryCrossStaff() } else { // Check if the two elements are in different staves (but themselves not cross-staff) - Staff *startStaff = vrv_cast(start->GetFirstAncestor(STAFF)); - Staff *endStaff = vrv_cast(end->GetFirstAncestor(STAFF)); + Staff *startStaff = start->FindStaff(ANCESTOR_ONLY, false); + Staff *endStaff = end->FindStaff(ANCESTOR_ONLY, false); if (startStaff && endStaff && (startStaff->GetN() != endStaff->GetN())) { return endStaff; } @@ -163,10 +163,8 @@ std::vector Slur::CollectSpannedElements(Staff *staff, int xMin, std::set staffNumbers; staffNumbers.emplace(staff->GetN()); - Staff *startStaff = this->GetStart()->m_crossStaff ? this->GetStart()->m_crossStaff - : vrv_cast(this->GetStart()->GetFirstAncestor(STAFF)); - Staff *endStaff = this->GetEnd()->m_crossStaff ? this->GetEnd()->m_crossStaff - : vrv_cast(this->GetEnd()->GetFirstAncestor(STAFF)); + Staff *startStaff = this->GetStart()->FindStaff(RESOLVE_CROSSSTAFF, false); + Staff *endStaff = this->GetEnd()->FindStaff(RESOLVE_CROSSSTAFF, false); if (startStaff && (startStaff != staff)) { staffNumbers.emplace(startStaff->GetN()); } diff --git a/src/tie.cpp b/src/tie.cpp index 9f648f82a50..ca5f01d97ac 100644 --- a/src/tie.cpp +++ b/src/tie.cpp @@ -394,7 +394,7 @@ void Tie::CalculateXPosition(Doc *doc, Staff *staff, Chord *startParentChord, Ch } // endPoint Staff *endStaff = staff; - if (endParentChord) endStaff = vrv_cast(endParentChord->GetFirstAncestor(STAFF)); + if (endParentChord) endStaff = endParentChord->FindStaff(ANCESTOR_ONLY); if (endParentChord && endParentChord->HasAdjacentNotesInStaff(endStaff)) { endPoint.x = this->CalculateAdjacentChordXOffset( doc, endStaff, endParentChord, endNote, drawingCurveDir, endPoint.x, false); @@ -454,7 +454,7 @@ void Tie::CalculateXPosition(Doc *doc, Staff *staff, Chord *startParentChord, Ch if (!isShortTie) { // endPoint Staff *endStaff = staff; - if (endParentChord) endStaff = vrv_cast(endParentChord->GetFirstAncestor(STAFF)); + if (endParentChord) endStaff = endParentChord->FindStaff(ANCESTOR_ONLY); if (endParentChord && endParentChord->HasAdjacentNotesInStaff(endStaff)) { endPoint.x = this->CalculateAdjacentChordXOffset( doc, endStaff, endParentChord, endNote, drawingCurveDir, endPoint.x, false); diff --git a/src/timeinterface.cpp b/src/timeinterface.cpp index f77ed3eb21a..835b69b84bd 100644 --- a/src/timeinterface.cpp +++ b/src/timeinterface.cpp @@ -97,7 +97,7 @@ bool TimePointInterface::IsOnStaff(int n) return false; } else if (m_start) { - Staff *staff = dynamic_cast(m_start->GetFirstAncestor(STAFF)); + Staff *staff = m_start->FindStaff(ANCESTOR_ONLY, false); if (staff && (staff->GetN() == n)) return true; } return false; @@ -129,8 +129,8 @@ std::vector TimePointInterface::GetTstampStaves(Measure *measure, Objec } } else if (m_start && !m_start->Is(TIMESTAMP_ATTR)) { - Staff *staff = dynamic_cast(m_start->GetFirstAncestor(STAFF)); - if (staff) staffList.push_back(staff->GetN()); + Staff *staff = m_start->FindStaff(ANCESTOR_ONLY); + staffList.push_back(staff->GetN()); } else if (measure->GetChildCount(STAFF) == 1) { // If we have no @staff or startid but only one staff child assume it is the first one (@n1 is assumed) @@ -285,10 +285,10 @@ void TimeSpanningInterface::GetCrossStaffOverflows( // No cross-staff endpoints, check if the slur itself crosses staves if (!startStaff) { - startStaff = dynamic_cast(this->GetStart()->GetFirstAncestor(STAFF)); + startStaff = this->GetStart()->FindStaff(ANCESTOR_ONLY, false); } if (!endStaff) { - endStaff = dynamic_cast(this->GetEnd()->GetFirstAncestor(STAFF)); + endStaff = this->GetEnd()->FindStaff(ANCESTOR_ONLY, false); } // This happens with slurs starting or ending with a timestamp diff --git a/src/tuplet.cpp b/src/tuplet.cpp index 18942c027bf..2442d17c9d6 100644 --- a/src/tuplet.cpp +++ b/src/tuplet.cpp @@ -320,8 +320,7 @@ void Tuplet::CalculateTupletNumCrossStaff(LayerElement *layerElement) return; }; - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); // Find if there is a mix of cross-staff and non-cross-staff elements in the tuplet ListOfObjects descendants; ClassIdsComparison comparison({ CHORD, NOTE, REST }); @@ -644,9 +643,8 @@ int Tuplet::AdjustTupletsY(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); - assert(staff); - int staffSize = staff->m_drawingStaffSize; + Staff *staff = this->FindStaff(ANCESTOR_ONLY); + const int staffSize = staff->m_drawingStaffSize; assert(m_drawingBracketPos != STAFFREL_basic_NONE); diff --git a/src/verse.cpp b/src/verse.cpp index 8dd6b93c56a..56946b76fdf 100644 --- a/src/verse.cpp +++ b/src/verse.cpp @@ -238,9 +238,9 @@ int Verse::PrepareProcessingLists(FunctorParams *functorParams) assert(params); // StaffN_LayerN_VerseN_t *tree = vrv_cast((*params).at(0)); - Staff *staff = vrv_cast(this->GetFirstAncestor(STAFF)); + Staff *staff = this->FindStaff(ANCESTOR_ONLY); Layer *layer = vrv_cast(this->GetFirstAncestor(LAYER)); - assert(staff && layer); + assert(layer); params->m_verseTree.child[staff->GetN()].child[layer->GetN()].child[this->GetN()]; // Alternate solution with StaffN_LayerN_VerseN_t diff --git a/src/view_control.cpp b/src/view_control.cpp index 7ac6663fd99..85733bdf254 100644 --- a/src/view_control.cpp +++ b/src/view_control.cpp @@ -1336,8 +1336,7 @@ void View::DrawArpeg(DeviceContext *dc, Arpeg *arpeg, Measure *measure, System * const int bottom = bottomNote->GetDrawingY(); // We arbitrarily look at the top note - Staff *staff = vrv_cast(topNote->GetFirstAncestor(STAFF)); - assert(staff); + Staff *staff = topNote->FindStaff(ANCESTOR_ONLY); const bool drawingCueSize = topNote->GetDrawingCueSize(); // We are going to have only one FloatingPositioner - staff will be the top note one diff --git a/src/view_page.cpp b/src/view_page.cpp index 9e5cbb34582..45fb59368bf 100644 --- a/src/view_page.cpp +++ b/src/view_page.cpp @@ -834,7 +834,7 @@ void View::DrawBarLine( assert(dc); assert(barLine); - Staff *staff = dynamic_cast(barLine->GetFirstAncestor(STAFF)); + Staff *staff = barLine->FindStaff(ANCESTOR_ONLY, false); const int staffSize = (staff) ? staff->m_drawingStaffSize : 100; const int x = barLine->GetDrawingX(); diff --git a/src/view_slur.cpp b/src/view_slur.cpp index 2c0f2afe454..d280f91dffa 100644 --- a/src/view_slur.cpp +++ b/src/view_slur.cpp @@ -182,10 +182,9 @@ float View::CalcInitialSlur( const std::vector elements = slur->CollectSpannedElements(staff, bezier.p1.x, bezier.p2.x, curve->GetSpanningType()); - Staff *startStaff = slur->GetStart()->m_crossStaff ? slur->GetStart()->m_crossStaff - : vrv_cast(slur->GetStart()->GetFirstAncestor(STAFF)); - Staff *endStaff = slur->GetEnd()->m_crossStaff ? slur->GetEnd()->m_crossStaff - : vrv_cast(slur->GetEnd()->GetFirstAncestor(STAFF)); + Staff *startStaff = slur->GetStart()->FindStaff(RESOLVE_CROSSSTAFF, false); + Staff *endStaff = slur->GetEnd()->FindStaff(RESOLVE_CROSSSTAFF, false); + curve->ClearSpannedElements(); for (auto element : elements) { From b7fef937c2b492316bb56dbcc65d703e87e39a1d Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 19 Jan 2022 14:49:52 +0200 Subject: [PATCH 091/403] Fix beam slope being too far impacted by the duration - changed code to check for another unit of margin for 16th and shorter notes in the beams. Stems are already taking duration into account, so adding extra margin based on duration led to wrong calculation of the beam slope --- src/beam.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/beam.cpp b/src/beam.cpp index 64d635e1cb1..a66f253bd8c 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -834,8 +834,8 @@ void BeamSegment::CalcAdjustSlope(Staff *staff, Doc *doc, BeamDrawingInterface * break; } // Here we should look at duration too because longer values in the middle could actually be OK as they are - else if ((coord != m_lastNoteOrChord) || (coord != m_firstNoteOrChord)) { - const int durLen = len - (coord->m_dur - DUR_8) * beamInterface->m_beamWidthBlack; + else if (((coord != m_lastNoteOrChord) || (coord != m_firstNoteOrChord)) && (coord->m_dur > DUR_8)) { + const int durLen = len - unit; if (durLen < refLen) { lengthen = true; break; From 789621d0c2370c5137fc1442ff5360b1d4bcd372 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 20 Jan 2022 09:36:02 +0100 Subject: [PATCH 092/403] Fix for whole note collision --- src/layerelement.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layerelement.cpp b/src/layerelement.cpp index da534e6cd49..f83c76e9511 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -1714,7 +1714,7 @@ std::pair LayerElement::CalcElementHorizontalOverlap(Doc *doc, else if (this->Is(NOTE)) { Note *currentNote = vrv_cast(this); assert(currentNote); - if ((currentNote->GetDrawingDur() == DUR_1) && otherElements.at(i)->Is(STEM)) { + if ((currentNote->GetDrawingDur() == DUR_1) && otherElements.at(i)->Is(STEM) && (shift == 0)) { const int horizontalMargin = doc->GetDrawingStemWidth(staff->m_drawingStaffSize); Stem *stem = vrv_cast(otherElements.at(i)); data_STEMDIRECTION stemDir = stem->GetDrawingStemDir(); From 5bc7b066f4c95dec652a1a3823b24bddae9c6204 Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 20 Jan 2022 14:09:20 +0200 Subject: [PATCH 093/403] Fix for the stem length on beams with mixed duration - changed code to take the shortest note stem length as uniform in beams with multiple notes on the same location (e.g. horizontal beams) --- include/vrv/beam.h | 2 +- src/beam.cpp | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 2f639023885..e6137d7f9f2 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -259,7 +259,7 @@ class BeamElementCoord { int m_x; int m_yBeam; // y value of stem top position - int m_dur; // drawing duration + short m_dur; // drawing duration int m_breaksec; int m_overlapMargin; int m_maxShortening; // maximum allowed shortening in half units diff --git a/src/beam.cpp b/src/beam.cpp index a66f253bd8c..c9680947598 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -267,8 +267,8 @@ bool BeamSegment::NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterfa { const int unit = doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); // find shortest duration for above/below beams for the sake of calculating overlap with additional beams - int topShortestDur = DUR_8; - int bottomShortestDur = DUR_8; + short topShortestDur = DUR_8; + short bottomShortestDur = DUR_8; std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), [&](BeamElementCoord *coord) { if (coord->m_partialFlagPlace == BEAMPLACE_above) { topShortestDur = std::max(topShortestDur, coord->m_dur); @@ -1058,14 +1058,17 @@ void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool is } } + short minDuration = DUR_4; for (auto coord : m_beamElementCoordRefs) { - const int coordStemLength = coord->CalculateStemLength(staff, stemDir, isHorizontal); if (!coord->m_closestNote) continue; // if location matches, or if current elements duration is shorter than 8th. This ensures that beams with // partial beams will not be shorted when lowest/highest note is 8th and can be shortened - if ((coord->m_closestNote->GetDrawingLoc() == relevantNoteLoc) - || (!isHorizontal && (coord->m_dur > DUR_8) && (std::abs(m_uniformStemLength) < 13))) - m_uniformStemLength = coordStemLength; + if ((coord->m_dur > minDuration) + && ((coord->m_closestNote->GetDrawingLoc() == relevantNoteLoc) + || (!isHorizontal && (std::abs(m_uniformStemLength) < 13)))) { + m_uniformStemLength = coord->CalculateStemLength(staff, stemDir, isHorizontal); + minDuration = coord->m_dur; + } } // make adjustments for the grace notes length for (auto coord : m_beamElementCoordRefs) { From cc33e882c209441aea0521ed0baeb5c46ae16030 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 21 Jan 2022 10:21:13 +0100 Subject: [PATCH 094/403] Do not show Accid in tablature * It is not very clear if they should be given at all. However, the current MusciXML importer does add them to the MEI data --- src/view_element.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/view_element.cpp b/src/view_element.cpp index ef50e7ca2b5..70c1eec9573 100644 --- a/src/view_element.cpp +++ b/src/view_element.cpp @@ -240,7 +240,7 @@ void View::DrawAccid(DeviceContext *dc, LayerElement *element, Layer *layer, Sta // This can happen with accid within note with only accid.ges // We still create an graphic in the output - if (!accid->HasAccid()) { + if (!accid->HasAccid() || staff->IsTablature()) { dc->StartGraphic(element, "", element->GetUuid()); accid->SetEmptyBB(); dc->EndGraphic(element, this); From 27a929b06c38db19506e72c38e83ce5886b4fa3f Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 21 Jan 2022 10:22:05 +0100 Subject: [PATCH 095/403] Do not draw lute tablature glyph for guitar tablature --- src/view_tab.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/view_tab.cpp b/src/view_tab.cpp index 2e36934f352..1136c4eb9a2 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -135,15 +135,18 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, int x = element->GetDrawingX(); int y = element->GetDrawingY(); - int drawingDur = (tabGrp->GetDurGes() != DURATION_NONE) ? tabGrp->GetActualDurGes() : tabGrp->GetActualDur(); - int glyphSize = staff->GetDrawingStaffNotationSize(); - + const int drawingDur = (tabGrp->GetDurGes() != DURATION_NONE) ? tabGrp->GetActualDurGes() : tabGrp->GetActualDur(); + const int glyphSize = staff->GetDrawingStaffNotationSize(); + const int halfStemWidth = m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) / 2; + // We only need to draw the stems // Do we also need to draw the dots? if (tabGrp->IsInBeam()) { const int height = m_doc->GetGlyphHeight(SMUFL_EBA8_luteDurationHalf, glyphSize, true); - DrawFilledRectangle(dc, x - m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) / 2, y, - x + m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) / 2, y + height); + DrawFilledRectangle(dc, x - halfStemWidth, y, x + halfStemWidth, y + height); + } + else if (staff->m_drawingNotationType == NOTATIONTYPE_tab_guitar) { + } else { int symc = 0; From 3711c06846c3ebd6f1a6a1cb34c2a36d4835b2b4 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 21 Jan 2022 10:25:42 +0100 Subject: [PATCH 096/403] Clang formatting --- src/view_tab.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/view_tab.cpp b/src/view_tab.cpp index 1136c4eb9a2..0e8a7072992 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -137,8 +137,8 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, const int drawingDur = (tabGrp->GetDurGes() != DURATION_NONE) ? tabGrp->GetActualDurGes() : tabGrp->GetActualDur(); const int glyphSize = staff->GetDrawingStaffNotationSize(); - const int halfStemWidth = m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) / 2; - + const int halfStemWidth = m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) / 2; + // We only need to draw the stems // Do we also need to draw the dots? if (tabGrp->IsInBeam()) { @@ -146,7 +146,6 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, DrawFilledRectangle(dc, x - halfStemWidth, y, x + halfStemWidth, y + height); } else if (staff->m_drawingNotationType == NOTATIONTYPE_tab_guitar) { - } else { int symc = 0; From 53efab83827570f845bb0a90bc72b01c48f4e2fa Mon Sep 17 00:00:00 2001 From: Monceber Date: Fri, 21 Jan 2022 13:16:55 +0200 Subject: [PATCH 097/403] Revert type change --- include/vrv/beam.h | 2 +- src/beam.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index e6137d7f9f2..2f639023885 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -259,7 +259,7 @@ class BeamElementCoord { int m_x; int m_yBeam; // y value of stem top position - short m_dur; // drawing duration + int m_dur; // drawing duration int m_breaksec; int m_overlapMargin; int m_maxShortening; // maximum allowed shortening in half units diff --git a/src/beam.cpp b/src/beam.cpp index c9680947598..4d938e21898 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -267,8 +267,8 @@ bool BeamSegment::NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterfa { const int unit = doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); // find shortest duration for above/below beams for the sake of calculating overlap with additional beams - short topShortestDur = DUR_8; - short bottomShortestDur = DUR_8; + int topShortestDur = DUR_8; + int bottomShortestDur = DUR_8; std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), [&](BeamElementCoord *coord) { if (coord->m_partialFlagPlace == BEAMPLACE_above) { topShortestDur = std::max(topShortestDur, coord->m_dur); From 246e5381c3bbc4dbc0bcbaae58db3cfdd6cabacc Mon Sep 17 00:00:00 2001 From: David Bauer Date: Fri, 21 Jan 2022 14:13:22 +0100 Subject: [PATCH 098/403] Fix order check for grace note slurs --- include/vrv/view.h | 7 ++++++- src/view_control.cpp | 39 +++++++++++++++++++++++++++++++-------- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/include/vrv/view.h b/include/vrv/view.h index 7213268b7a2..f70a64785ae 100644 --- a/include/vrv/view.h +++ b/include/vrv/view.h @@ -407,7 +407,7 @@ class View { */ ///@{ void DrawControlElement(DeviceContext *dc, ControlElement *element, Measure *measure, System *system); - void DrawTimeSpanningElement(DeviceContext *dc, Object *object, System *system); + void DrawTimeSpanningElement(DeviceContext *dc, Object *element, System *system); void DrawArpeg(DeviceContext *dc, Arpeg *arpeg, Measure *measure, System *system); void DrawArpegEnclosing(DeviceContext *dc, Arpeg *arpeg, Staff *staff, wchar_t startGlyph, wchar_t fillGlyph, wchar_t endGlyph, int x, int y, int height, bool cueSize); @@ -602,6 +602,11 @@ class View { void DrawBeamSegment(DeviceContext *dc, BeamSegment *segment, BeamDrawingInterface *beamInterface, Layer *layer, Staff *staff, Measure *measure); + /** + * Internal methods for drawing time spanning elements + */ + bool HasValidTimeSpanningOrder(DeviceContext *dc, Object *element, LayerElement *start, LayerElement *end) const; + public: /** Document */ Doc *m_doc; diff --git a/src/view_control.cpp b/src/view_control.cpp index 7ac6663fd99..2497f775b8b 100644 --- a/src/view_control.cpp +++ b/src/view_control.cpp @@ -186,14 +186,8 @@ void View::DrawTimeSpanningElement(DeviceContext *dc, Object *element, System *s end = nextInterface->GetStart(); } } - if (!start || !end) return; - if (!interface->IsOrdered(start, end) && !element->Is(SYL)) { - // To avoid showing the same warning multiple times, display a warning only during actual drawing - if (!dc->Is(BBOX_DEVICE_CONTEXT) && (m_currentPage == vrv_cast(start->GetFirstAncestor(PAGE)))) { - LogWarning("%s '%s' is ignored, since start '%s' does not occur temporally before end '%s'.", - element->GetClassName().c_str(), element->GetUuid().c_str(), start->GetUuid().c_str(), - end->GetUuid().c_str()); - } + + if (!this->HasValidTimeSpanningOrder(dc, element, start, end)) { return; } @@ -386,6 +380,35 @@ void View::DrawTimeSpanningElement(DeviceContext *dc, Object *element, System *s } } +bool View::HasValidTimeSpanningOrder(DeviceContext *dc, Object *element, LayerElement *start, LayerElement *end) const +{ + if (!start || !end) return false; + + TimeSpanningInterface *interface = element->GetTimeSpanningInterface(); + if (interface && !interface->IsOrdered(start, end)) { + // Handle exceptional cases + if (element->Is(SLUR)) { + if (start->GetAlignment() == end->GetAlignment()) { + if (start->IsGraceNote() || end->IsGraceNote()) { + return true; + } + } + } + else if (element->Is(SYL)) { + return true; + } + // To avoid showing the same warning multiple times, display a warning only during actual drawing + if (!dc->Is(BBOX_DEVICE_CONTEXT) && (m_currentPage == vrv_cast(start->GetFirstAncestor(PAGE)))) { + LogWarning("%s '%s' is ignored, since start '%s' does not occur temporally before end '%s'.", + element->GetClassName().c_str(), element->GetUuid().c_str(), start->GetUuid().c_str(), + end->GetUuid().c_str()); + } + return false; + } + + return true; +} + void View::DrawBracketSpan( DeviceContext *dc, BracketSpan *bracketSpan, int x1, int x2, Staff *staff, char spanningType, Object *graphic) { From d0579e4952432738c2f0002dc1b65ba4b9ea92c6 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Fri, 21 Jan 2022 15:46:13 +0100 Subject: [PATCH 099/403] add missing mensural clefs --- data/Bravura.xml | 4 ++++ data/Bravura/E907-mensuralCclefPetrucciPosLowest.xml | 1 + data/Bravura/E908-mensuralCclefPetrucciPosLow.xml | 1 + data/Bravura/E90A-mensuralCclefPetrucciPosHigh.xml | 1 + data/Bravura/E90B-mensuralCclefPetrucciPosHighest.xml | 1 + data/Leipzig.xml | 4 ++++ data/Leipzig/E907-mensuralCclefPetrucciPosLowest.xml | 1 + data/Leipzig/E908-mensuralCclefPetrucciPosLow.xml | 1 + data/Leipzig/E90A-mensuralCclefPetrucciPosHigh.xml | 1 + data/Leipzig/E90B-mensuralCclefPetrucciPosHighest.xml | 1 + fonts/supported.xsl | 8 ++++---- 11 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 data/Bravura/E907-mensuralCclefPetrucciPosLowest.xml create mode 100644 data/Bravura/E908-mensuralCclefPetrucciPosLow.xml create mode 100644 data/Bravura/E90A-mensuralCclefPetrucciPosHigh.xml create mode 100644 data/Bravura/E90B-mensuralCclefPetrucciPosHighest.xml create mode 100644 data/Leipzig/E907-mensuralCclefPetrucciPosLowest.xml create mode 100644 data/Leipzig/E908-mensuralCclefPetrucciPosLow.xml create mode 100644 data/Leipzig/E90A-mensuralCclefPetrucciPosHigh.xml create mode 100644 data/Leipzig/E90B-mensuralCclefPetrucciPosHighest.xml diff --git a/data/Bravura.xml b/data/Bravura.xml index bd2e5d3e6b4..6e510c50175 100644 --- a/data/Bravura.xml +++ b/data/Bravura.xml @@ -575,7 +575,11 @@ + + + + diff --git a/data/Bravura/E907-mensuralCclefPetrucciPosLowest.xml b/data/Bravura/E907-mensuralCclefPetrucciPosLowest.xml new file mode 100644 index 00000000000..35ba3368a75 --- /dev/null +++ b/data/Bravura/E907-mensuralCclefPetrucciPosLowest.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E908-mensuralCclefPetrucciPosLow.xml b/data/Bravura/E908-mensuralCclefPetrucciPosLow.xml new file mode 100644 index 00000000000..8cbc78dd7ed --- /dev/null +++ b/data/Bravura/E908-mensuralCclefPetrucciPosLow.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E90A-mensuralCclefPetrucciPosHigh.xml b/data/Bravura/E90A-mensuralCclefPetrucciPosHigh.xml new file mode 100644 index 00000000000..863c0b64ecb --- /dev/null +++ b/data/Bravura/E90A-mensuralCclefPetrucciPosHigh.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E90B-mensuralCclefPetrucciPosHighest.xml b/data/Bravura/E90B-mensuralCclefPetrucciPosHighest.xml new file mode 100644 index 00000000000..84bd301c826 --- /dev/null +++ b/data/Bravura/E90B-mensuralCclefPetrucciPosHighest.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig.xml b/data/Leipzig.xml index 0e3d521a796..a5bdc56d21e 100644 --- a/data/Leipzig.xml +++ b/data/Leipzig.xml @@ -542,6 +542,10 @@ + + + + diff --git a/data/Leipzig/E907-mensuralCclefPetrucciPosLowest.xml b/data/Leipzig/E907-mensuralCclefPetrucciPosLowest.xml new file mode 100644 index 00000000000..96f8f5dbcfe --- /dev/null +++ b/data/Leipzig/E907-mensuralCclefPetrucciPosLowest.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E908-mensuralCclefPetrucciPosLow.xml b/data/Leipzig/E908-mensuralCclefPetrucciPosLow.xml new file mode 100644 index 00000000000..9d679cc50a9 --- /dev/null +++ b/data/Leipzig/E908-mensuralCclefPetrucciPosLow.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E90A-mensuralCclefPetrucciPosHigh.xml b/data/Leipzig/E90A-mensuralCclefPetrucciPosHigh.xml new file mode 100644 index 00000000000..3c74dbf9732 --- /dev/null +++ b/data/Leipzig/E90A-mensuralCclefPetrucciPosHigh.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E90B-mensuralCclefPetrucciPosHighest.xml b/data/Leipzig/E90B-mensuralCclefPetrucciPosHighest.xml new file mode 100644 index 00000000000..cb707a3af09 --- /dev/null +++ b/data/Leipzig/E90B-mensuralCclefPetrucciPosHighest.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fonts/supported.xsl b/fonts/supported.xsl index 9f9661917f4..db3075ef785 100644 --- a/fonts/supported.xsl +++ b/fonts/supported.xsl @@ -2160,11 +2160,11 @@ - - + + - - + + U+E90F U+E900 From 1fa1dc5a7daf0f6465c3f0282809f9b9683c4a47 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Fri, 21 Jan 2022 15:46:56 +0100 Subject: [PATCH 100/403] draw proper c clefs --- include/vrv/smufl.h | 6 +++++- src/clef.cpp | 8 ++++++++ src/smufl.cpp | 6 +++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/include/vrv/smufl.h b/include/vrv/smufl.h index 711723e68a9..26d2a4a3227 100644 --- a/include/vrv/smufl.h +++ b/include/vrv/smufl.h @@ -334,7 +334,11 @@ enum { SMUFL_E902_chantFclef = 0xE902, SMUFL_E904_mensuralFclefPetrucci = 0xE904, SMUFL_E906_chantCclef = 0xE906, + SMUFL_E907_mensuralCclefPetrucciPosLowest = 0xE907, + SMUFL_E908_mensuralCclefPetrucciPosLow = 0xE908, SMUFL_E909_mensuralCclefPetrucciPosMiddle = 0xE909, + SMUFL_E90A_mensuralCclefPetrucciPosHigh = 0xE90A, + SMUFL_E90B_mensuralCclefPetrucciPosHighest = 0xE90B, SMUFL_E910_mensuralProlation1 = 0xE910, SMUFL_E911_mensuralProlation2 = 0xE911, SMUFL_E912_mensuralProlation3 = 0xE912, @@ -436,7 +440,7 @@ enum { }; /** The number of glyphs for verification **/ -#define SMUFL_COUNT 411 +#define SMUFL_COUNT 415 } // namespace vrv diff --git a/src/clef.cpp b/src/clef.cpp index 6b8d0974eae..820501dc1d7 100644 --- a/src/clef.cpp +++ b/src/clef.cpp @@ -118,6 +118,14 @@ wchar_t Clef::GetClefGlyph(const data_NOTATIONTYPE notationtype) const switch (GetShape()) { case CLEFSHAPE_G: return SMUFL_E901_mensuralGclefPetrucci; break; case CLEFSHAPE_F: return SMUFL_E904_mensuralFclefPetrucci; break; + case CLEFSHAPE_C: + switch (GetLine()) { + case 1: return SMUFL_E907_mensuralCclefPetrucciPosLowest; break; + case 2: return SMUFL_E908_mensuralCclefPetrucciPosLow; break; + case 3: return SMUFL_E909_mensuralCclefPetrucciPosMiddle; break; + case 4: return SMUFL_E90A_mensuralCclefPetrucciPosHigh; break; + case 5: return SMUFL_E90B_mensuralCclefPetrucciPosHighest; break; + } default: return SMUFL_E909_mensuralCclefPetrucciPosMiddle; break; } case NOTATIONTYPE_mensural_black: diff --git a/src/smufl.cpp b/src/smufl.cpp index 6c22f0a67d6..8a1a8efd2ce 100644 --- a/src/smufl.cpp +++ b/src/smufl.cpp @@ -335,7 +335,11 @@ const std::map Resources::s_smuflNames = { { "chantFclef", SMUFL_E902_chantFclef }, { "mensuralFclefPetrucci", SMUFL_E904_mensuralFclefPetrucci }, { "chantCclef", SMUFL_E906_chantCclef }, + { "mensuralCclefPetrucciPosLowest", SMUFL_E907_mensuralCclefPetrucciPosLowest }, + { "mensuralCclefPetrucciPosLow", SMUFL_E908_mensuralCclefPetrucciPosLow }, { "mensuralCclefPetrucciPosMiddle", SMUFL_E909_mensuralCclefPetrucciPosMiddle }, + { "mensuralCclefPetrucciPosHigh", SMUFL_E90A_mensuralCclefPetrucciPosHigh }, + { "mensuralCclefPetrucciPosHighest", SMUFL_E90B_mensuralCclefPetrucciPosHighest }, { "mensuralProlation1", SMUFL_E910_mensuralProlation1 }, { "mensuralProlation2", SMUFL_E911_mensuralProlation2 }, { "mensuralProlation3", SMUFL_E912_mensuralProlation3 }, @@ -437,6 +441,6 @@ const std::map Resources::s_smuflNames = { }; /** The number of glyphs for verification **/ -// 411 +// 415 } // namespace vrv From e6eef8d0cc545c5a517bfd7c307059886272eebf Mon Sep 17 00:00:00 2001 From: David Bauer Date: Fri, 21 Jan 2022 15:59:50 +0100 Subject: [PATCH 101/403] Renaming --- include/vrv/layerelement.h | 4 ++-- src/accid.cpp | 2 +- src/arpeg.cpp | 4 ++-- src/artic.cpp | 4 ++-- src/beam.cpp | 6 +++--- src/chord.cpp | 12 +++++------ src/clef.cpp | 4 ++-- src/editortoolkit_neume.cpp | 10 +++++----- src/elementpart.cpp | 2 +- src/ftrem.cpp | 2 +- src/horizontalaligner.cpp | 4 ++-- src/iopae.cpp | 2 +- src/layer.cpp | 6 +++--- src/layerelement.cpp | 40 ++++++++++++++++++------------------- src/ligature.cpp | 2 +- src/mrest.cpp | 2 +- src/note.cpp | 18 ++++++++--------- src/rest.cpp | 6 +++--- src/slur.cpp | 10 +++++----- src/tie.cpp | 4 ++-- src/timeinterface.cpp | 8 ++++---- src/tuplet.cpp | 4 ++-- src/verse.cpp | 2 +- src/view_control.cpp | 2 +- src/view_page.cpp | 2 +- src/view_slur.cpp | 4 ++-- 26 files changed, 83 insertions(+), 83 deletions(-) diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index cd825acbe79..590843fec21 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -183,9 +183,9 @@ class LayerElement : public Object, Alignment *GetAlignment() const { return m_alignment; } /** - * Find the ancestor or cross staff + * Get the ancestor or cross staff */ - Staff *FindStaff(StaffSearch strategy, bool assertExistence = true) const; + Staff *GetAncestorStaff(StaffSearch strategy = ANCESTOR_ONLY, bool assertExistence = true) const; /** * Look for a cross or a a parent LayerElement (note, chord, rest) with a cross staff. diff --git a/src/accid.cpp b/src/accid.cpp index 3999d5b26a1..c03038170a0 100644 --- a/src/accid.cpp +++ b/src/accid.cpp @@ -121,7 +121,7 @@ std::wstring Accid::GetSymbolStr(const data_NOTATIONTYPE notationType) const void Accid::AdjustToLedgerLines(Doc *doc, LayerElement *element, int staffSize) { - Staff *staff = element->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = element->GetAncestorStaff(RESOLVE_CROSSSTAFF); Chord *chord = vrv_cast(this->GetFirstAncestor(CHORD)); if (element->Is(NOTE) && chord && chord->HasAdjacentNotesInStaff(staff)) { diff --git a/src/arpeg.cpp b/src/arpeg.cpp index d6ba14beef4..198143019ee 100644 --- a/src/arpeg.cpp +++ b/src/arpeg.cpp @@ -226,8 +226,8 @@ int Arpeg::AdjustArpeg(FunctorParams *functorParams) // We should have call DrawArpeg before assert(this->GetCurrentFloatingPositioner()); - Staff *topStaff = topNote->FindStaff(ANCESTOR_ONLY); - Staff *bottomStaff = bottomNote->FindStaff(ANCESTOR_ONLY); + Staff *topStaff = topNote->GetAncestorStaff(); + Staff *bottomStaff = bottomNote->GetAncestorStaff(); Staff *crossStaff = this->GetCrossStaff(); const int staffN = (crossStaff != NULL) ? crossStaff->GetN() : topStaff->GetN(); diff --git a/src/artic.cpp b/src/artic.cpp index 5cd1b1dfa6d..68e6f25596a 100644 --- a/src/artic.cpp +++ b/src/artic.cpp @@ -399,7 +399,7 @@ int Artic::AdjustArtic(FunctorParams *functorParams) int yIn, yOut, yRel; - Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); Beam *beam = dynamic_cast(GetFirstAncestor(BEAM)); int staffYBottom = -params->m_doc->GetDrawingStaffSize(staff->m_drawingStaffSize); @@ -543,7 +543,7 @@ int Artic::CalculateHorizontalShift(Doc *doc, LayerElement *parent, data_STEMDIR switch (artic) { case ARTICULATION_stacc: case ARTICULATION_stacciss: { - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); const int stemWidth = doc->GetDrawingStemWidth(staff->m_drawingStaffSize); if ((stemDir == STEMDIRECTION_up) && (m_drawingPlace == STAFFREL_above)) { shift += shift - stemWidth / 2; diff --git a/src/beam.cpp b/src/beam.cpp index 757b36a97b2..3072d8d1813 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1292,7 +1292,7 @@ void Beam::FilterList(ArrayOfObjects *childList) } } - Staff *beamStaff = this->FindStaff(ANCESTOR_ONLY); + Staff *beamStaff = this->GetAncestorStaff(); /* if (this->HasBeamWith()) { Measure *measure = vrv_cast(this->GetFirstAncestor(MEASURE)); @@ -1516,7 +1516,7 @@ int Beam::CalcLayerOverlap(Doc *doc, Object *beam, int directionBias, int y1, in auto collidingElementsList = parentLayer->GetLayerElementsForTimeSpanOf(this, true); if (collidingElementsList.empty()) return 0; - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); int leftMargin = 0; int rightMargin = 0; @@ -1593,7 +1593,7 @@ int Beam::AdjustBeams(FunctorParams *functorParams) const int overlapMargin = std::max(leftMargin * params->m_directionBias, rightMargin * params->m_directionBias); if (overlapMargin >= params->m_overlapMargin) { - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); const int staffOffset = params->m_doc->GetDrawingUnit(staff->m_drawingStaffSize); params->m_overlapMargin = (overlapMargin + staffOffset) * params->m_directionBias; } diff --git a/src/chord.cpp b/src/chord.cpp index 54da06946a3..5cfbf77d476 100644 --- a/src/chord.cpp +++ b/src/chord.cpp @@ -535,7 +535,7 @@ std::list Chord::GetAdjacentNotesList(Staff *staff, int loc) Note *note = vrv_cast(obj); assert(note); - Staff *noteStaff = note->FindStaff(RESOLVE_CROSSSTAFF); + Staff *noteStaff = note->GetAncestorStaff(RESOLVE_CROSSSTAFF); if (noteStaff != staff) continue; const int locDiff = note->GetDrawingLoc() - loc; @@ -610,7 +610,7 @@ int Chord::CalcArtic(FunctorParams *functorParams) params->m_parent = this; params->m_stemDir = this->GetDrawingStemDir(); - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); Layer *layer = vrv_cast(this->GetFirstAncestor(LAYER)); assert(layer); @@ -680,7 +680,7 @@ int Chord::CalcStem(FunctorParams *functorParams) Stem *stem = this->GetDrawingStem(); assert(stem); - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); Layer *layer = vrv_cast(this->GetFirstAncestor(LAYER)); assert(layer); @@ -742,7 +742,7 @@ MapOfNoteLocs Chord::CalcNoteLocations(NotePredicate predicate) if (predicate && !predicate(note)) continue; - Staff *staff = note->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = note->GetAncestorStaff(RESOLVE_CROSSSTAFF); noteLocations[staff].insert(note->GetDrawingLoc()); } @@ -910,7 +910,7 @@ int Chord::AdjustCrossStaffContent(FunctorParams *functorParams) // Check if chord spreads across several staves std::list extremalStaves; for (Note *note : { this->GetTopNote(), this->GetBottomNote() }) { - Staff *staff = note->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = note->GetAncestorStaff(RESOLVE_CROSSSTAFF); extremalStaves.push_back(staff); } assert(extremalStaves.size() == 2); @@ -942,7 +942,7 @@ int Chord::AdjustCrossStaffContent(FunctorParams *functorParams) } // Reposition the stem - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); Staff *rootStaff = (stem->GetDrawingStemDir() == STEMDIRECTION_up) ? extremalStaves.back() : extremalStaves.front(); stem->SetDrawingYRel(stem->GetDrawingYRel() + getShift(staff) - getShift(rootStaff)); diff --git a/src/clef.cpp b/src/clef.cpp index f296da27b6f..ff3b39e6843 100644 --- a/src/clef.cpp +++ b/src/clef.cpp @@ -184,7 +184,7 @@ int Clef::AdjustBeams(FunctorParams *functorParams) assert(params); if (!params->m_beam) return FUNCTOR_SIBLINGS; - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); auto currentShapeIter = topToMiddleProportions.find(GetShape()); if (currentShapeIter == topToMiddleProportions.end()) return FUNCTOR_CONTINUE; @@ -234,7 +234,7 @@ int Clef::AdjustClefChanges(FunctorParams *functorParams) assert(params->m_aligner); - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); // Create ad comparison object for each type / @n std::vector ns; diff --git a/src/editortoolkit_neume.cpp b/src/editortoolkit_neume.cpp index 6e0a39ea39e..d6af7dab5e1 100644 --- a/src/editortoolkit_neume.cpp +++ b/src/editortoolkit_neume.cpp @@ -2194,7 +2194,7 @@ bool EditorToolkitNeume::ChangeGroup(std::string elementId, std::string contour) int initialLrx = firstChild->GetZone()->GetLrx(); int initialLry = firstChild->GetZone()->GetLry(); - Staff *staff = el->FindStaff(ANCESTOR_ONLY); + Staff *staff = el->GetAncestorStaff(); Facsimile *facsimile = m_doc->GetFacsimile(); const int noteHeight = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / 2); @@ -2293,7 +2293,7 @@ bool EditorToolkitNeume::ToggleLigature(std::vector elementIds, std int ligLrx = firstNc->GetZone()->GetLrx(); int ligLry = firstNc->GetZone()->GetLry(); - Staff *staff = firstNc->FindStaff(ANCESTOR_ONLY); + Staff *staff = firstNc->GetAncestorStaff(); const int noteHeight = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / 2); const int noteWidth = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / 1.4); @@ -2780,7 +2780,7 @@ bool EditorToolkitNeume::AdjustPitchFromPosition(Object *obj, Clef *clef) if (obj->Is(CUSTOS)) { Custos *custos = dynamic_cast(obj); - Staff *staff = custos->FindStaff(ANCESTOR_ONLY); + Staff *staff = custos->GetAncestorStaff(); // Check interfaces if ((custos->GetPitchInterface() == NULL) || (custos->GetFacsimileInterface() == NULL)) { @@ -2840,7 +2840,7 @@ bool EditorToolkitNeume::AdjustPitchFromPosition(Object *obj, Clef *clef) else if (obj->Is(SYLLABLE)) { Syllable *syl = dynamic_cast(obj); - Staff *staff = syl->FindStaff(ANCESTOR_ONLY); + Staff *staff = syl->GetAncestorStaff(); ListOfObjects pitchedChildren; InterfaceComparison ic(INTERFACE_PITCH); @@ -2917,7 +2917,7 @@ bool EditorToolkitNeume::AdjustClefLineFromPosition(Clef *clef, Staff *staff) assert(clef); if (staff == NULL) { - staff = clef->FindStaff(ANCESTOR_ONLY); + staff = clef->GetAncestorStaff(); } if (!clef->HasFacs() || !staff->HasFacs()) { diff --git a/src/elementpart.cpp b/src/elementpart.cpp index f13af9d2068..eae9adc3c15 100644 --- a/src/elementpart.cpp +++ b/src/elementpart.cpp @@ -307,7 +307,7 @@ bool Stem::IsSupportedChild(Object *child) int Stem::CompareToElementPosition(Doc *doc, LayerElement *otherElement, int margin) { - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); // check if there is an overlap on the left or on the right and displace stem's parent correspondingly const int right = HorizontalLeftOverlap(otherElement, doc, margin, 0); diff --git a/src/ftrem.cpp b/src/ftrem.cpp index abd3e82ff70..a0456a64516 100644 --- a/src/ftrem.cpp +++ b/src/ftrem.cpp @@ -101,7 +101,7 @@ void FTrem::FilterList(ArrayOfObjects *childList) ++iter; } - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); this->InitCoords(childList, staff, BEAMPLACE_NONE); this->InitCue(false); diff --git a/src/horizontalaligner.cpp b/src/horizontalaligner.cpp index 25b1774ff91..5a30fd054f0 100644 --- a/src/horizontalaligner.cpp +++ b/src/horizontalaligner.cpp @@ -1163,7 +1163,7 @@ int Alignment::AdjustDotsEnd(FunctorParams *functorParams) // otherwise they should be kept separate for (auto dot : params->m_dots) { // A third staff size will be used as required margin - const Staff *staff = dot->FindStaff(RESOLVE_CROSSSTAFF); + const Staff *staff = dot->GetAncestorStaff(RESOLVE_CROSSSTAFF); const int staffSize = staff->m_drawingStaffSize; const int thirdUnit = params->m_doc->GetDrawingUnit(staffSize) / 3; @@ -1337,7 +1337,7 @@ int AlignmentReference::AdjustLayersEnd(FunctorParams *functorParams) // Determine staff if (params->m_current.empty()) return FUNCTOR_CONTINUE; LayerElement *firstElem = params->m_current.at(0); - Staff *staff = firstElem->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = firstElem->GetAncestorStaff(RESOLVE_CROSSSTAFF); const int extension = params->m_doc->GetDrawingLedgerLineExtension(staff->m_drawingStaffSize, firstElem->GetDrawingCueSize()); diff --git a/src/iopae.cpp b/src/iopae.cpp index 2cd73976dba..d143b2e8ccd 100644 --- a/src/iopae.cpp +++ b/src/iopae.cpp @@ -498,7 +498,7 @@ void PAEOutput::WriteTuplet(Tuplet *tuplet) { assert(tuplet); - Staff *staff = tuplet->FindStaff(ANCESTOR_ONLY); + Staff *staff = tuplet->GetAncestorStaff(); double content = tuplet->GetContentAlignmentDuration(NULL, NULL, true, staff->m_drawingNotationType); // content = DUR_MAX / 2^(dur - 2) diff --git a/src/layer.cpp b/src/layer.cpp index 96e31e5328c..cac1aef623a 100644 --- a/src/layer.cpp +++ b/src/layer.cpp @@ -282,7 +282,7 @@ data_STEMDIRECTION Layer::GetDrawingStemDir(const ArrayOfBeamElementCoords *coor assert(alignmentLast); // We are ignoring cross-staff situation here because this should not be called if we have one - Staff *staff = first->FindStaff(ANCESTOR_ONLY); + Staff *staff = first->GetAncestorStaff(); double time = alignmentFirst->GetTime(); double duration = alignmentLast->GetTime() - time + last->GetAlignmentDuration(); @@ -306,7 +306,7 @@ std::set Layer::GetLayersNForTimeSpanOf(LayerElement *element) Alignment *alignment = element->GetAlignment(); assert(alignment); - Staff *staff = element->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = element->GetAncestorStaff(RESOLVE_CROSSSTAFF); return this->GetLayersNInTimeSpan(alignment->GetTime(), element->GetAlignmentDuration(), measure, staff->GetN()); } @@ -374,7 +374,7 @@ ListOfObjects Layer::GetLayerElementsForTimeSpanOf(LayerElement *element, bool e return {}; } - Staff *staff = element->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = element->GetAncestorStaff(RESOLVE_CROSSSTAFF); return GetLayerElementsInTimeSpan(time, duration, measure, staff->GetN(), excludeCurrent); } diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 0a9260f61d8..8ee8c03fcb6 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -242,7 +242,7 @@ int LayerElement::GetOriginalLayerN() return layerN; } -Staff *LayerElement::FindStaff(const StaffSearch strategy, const bool assertExistence) const +Staff *LayerElement::GetAncestorStaff(const StaffSearch strategy, const bool assertExistence) const { Staff *staff = NULL; if (strategy == RESOLVE_CROSSSTAFF) { @@ -274,14 +274,14 @@ data_STAFFREL_basic LayerElement::GetCrossStaffRel() { if (!m_crossStaff) return STAFFREL_basic_NONE; - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); return (m_crossStaff->GetN() < staff->GetN()) ? STAFFREL_basic_above : STAFFREL_basic_below; } void LayerElement::GetOverflowStaffAlignments(StaffAlignment *&above, StaffAlignment *&below) { - Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); // By default use the alignment of the staff above = staff->GetAlignment(); @@ -574,7 +574,7 @@ int LayerElement::GetDrawingRadius(Doc *doc, bool isInLigature) wchar_t code = 0; int dur = DUR_4; - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); bool isMensuralDur = false; if (this->Is(NOTE)) { Note *note = vrv_cast(this); @@ -828,7 +828,7 @@ MapOfDotLocs LayerElement::CalcOptimalDotLocations() return {}; } - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); const int layerCount = staff->GetChildCount(LAYER); // Calculate primary/secondary dot locations @@ -1102,7 +1102,7 @@ int LayerElement::AlignHorizontally(FunctorParams *functorParams) m_alignment = note->GetAlignment(); } else if (this->Is(SYL)) { - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); if (staff->m_drawingNotationType == NOTATIONTYPE_neume) { type = ALIGNMENT_DEFAULT; } @@ -1154,7 +1154,7 @@ int LayerElement::AlignHorizontally(FunctorParams *functorParams) else { assert(this->IsGraceNote()); if (this->Is(CHORD) || (this->Is(NOTE) && !chordParent)) { - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); int graceAlignerId = params->m_doc->GetOptions()->m_graceRhythmAlign.GetValue() ? 0 : staff->GetN(); GraceAligner *graceAligner = m_alignment->GetGraceAligner(graceAlignerId); // We know that this is a note or a chord - we stack them and they will be added at the end of the layer @@ -1181,7 +1181,7 @@ int LayerElement::SetAlignmentPitchPos(FunctorParams *functorParams) if (this->IsScoreDefElement()) return FUNCTOR_SIBLINGS; LayerElement *layerElementY = this; - Staff *staffY = this->FindStaff(ANCESTOR_ONLY); + Staff *staffY = this->GetAncestorStaff(); Layer *layerY = vrv_cast(this->GetFirstAncestor(LAYER)); assert(layerY); @@ -1279,7 +1279,7 @@ int LayerElement::SetAlignmentPitchPos(FunctorParams *functorParams) // Automatically calculate rest position else { // set default location to the middle of the staff - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); loc = staff->m_drawingLines - 1; if (loc % 2 != 0) --loc; if (staff->m_drawingLines > 1) loc += 2; @@ -1307,7 +1307,7 @@ int LayerElement::SetAlignmentPitchPos(FunctorParams *functorParams) // Automatically calculate rest position else { // set default location to the middle of the staff - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); loc = staff->m_drawingLines - 1; if ((rest->GetDur() < DUR_4) && (loc % 2 != 0)) --loc; // Adjust special cases @@ -1459,7 +1459,7 @@ int LayerElement::AdjustBeams(FunctorParams *functorParams) if (accid->GetFunc() == accidLog_FUNC_edit) return FUNCTOR_CONTINUE; } - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); // check if top/bottom of the element overlaps with beam coordinates int leftMargin = 0, rightMargin = 0; @@ -1570,7 +1570,7 @@ std::pair LayerElement::CalcElementHorizontalOverlap(Doc *doc, const std::vector &otherElements, bool areDotsAdjusted, bool isChordElement, bool isLowerElement, bool unison) { - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); bool isInUnison = false; int shift = 0; @@ -1878,7 +1878,7 @@ int LayerElement::AdjustXPos(FunctorParams *functorParams) overlap = std::max(overlap, element->GetSelfRight() - this->GetSelfLeft() + margin); } else if (this->Is(ACCID) && element->Is(NOTE)) { - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); const int staffTop = staff->GetDrawingY(); const int staffBottom = staffTop - params->m_doc->GetDrawingStaffSize(params->m_staffSize); int verticalMargin = 0; @@ -2060,7 +2060,7 @@ int LayerElement::PrepareCrossStaff(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } - Staff *parentStaff = this->FindStaff(ANCESTOR_ONLY); + Staff *parentStaff = this->GetAncestorStaff(); // Check if we have a cross-staff to itself... if (m_crossStaff == parentStaff) { LogWarning("The cross staff reference '%d' for element '%s' seems to be identical to the parent staff", @@ -2338,7 +2338,7 @@ int LayerElement::FindSpannedLayerElements(FunctorParams *functorParams) // Skip if neither parent staff nor cross staff matches the given staff number if (!params->m_staffNs.empty()) { - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); if (params->m_staffNs.find(staff->GetN()) == params->m_staffNs.end()) { Layer *layer = NULL; staff = this->GetCrossStaff(layer); @@ -2359,15 +2359,15 @@ int LayerElement::FindSpannedLayerElements(FunctorParams *functorParams) // Skip elements aligned at start/end, but on a different staff if ((this->GetAlignment() == start->GetAlignment()) && !start->Is(TIMESTAMP_ATTR)) { - Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); - Staff *startStaff = start->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *startStaff = start->GetAncestorStaff(RESOLVE_CROSSSTAFF); if (staff->GetN() != startStaff->GetN()) { return FUNCTOR_CONTINUE; } } if ((this->GetAlignment() == end->GetAlignment()) && !end->Is(TIMESTAMP_ATTR)) { - Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); - Staff *endStaff = end->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *endStaff = end->GetAncestorStaff(RESOLVE_CROSSSTAFF); if (staff->GetN() != endStaff->GetN()) { return FUNCTOR_CONTINUE; } @@ -2554,7 +2554,7 @@ int LayerElement::PrepareDuration(FunctorParams *functorParams) durInterface->SetDurDefault(params->m_durDefault); // Check if there is a duration default for the staff if (!params->m_durDefaultForStaffN.empty()) { - Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); if (params->m_durDefaultForStaffN.count(staff->GetN()) > 0) { durInterface->SetDurDefault(params->m_durDefaultForStaffN.at(staff->GetN())); } diff --git a/src/ligature.cpp b/src/ligature.cpp index 86cd7984ea2..0fa19aee46c 100644 --- a/src/ligature.cpp +++ b/src/ligature.cpp @@ -136,7 +136,7 @@ int Ligature::CalcLigatureNotePos(FunctorParams *functorParams) m_drawingShapes.clear(); Note *lastNote = dynamic_cast(this->GetList(this)->back()); - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); const ArrayOfObjects *notes = this->GetList(this); assert(notes); diff --git a/src/mrest.cpp b/src/mrest.cpp index a969bf1197e..5e3129ee2a7 100644 --- a/src/mrest.cpp +++ b/src/mrest.cpp @@ -90,7 +90,7 @@ int MRest::ResetHorizontalAlignment(FunctorParams *functorParams) int MRest::GetOptimalLayerLocation(Staff *staff, Layer *layer, int defaultLocation) { if (!layer) return defaultLocation; - Staff *parentStaff = this->FindStaff(ANCESTOR_ONLY); + Staff *parentStaff = this->GetAncestorStaff(); // handle rest positioning for 2 layers. 3 layers and more are much more complex to solve if (parentStaff->GetChildCount(LAYER) != 2) return defaultLocation; diff --git a/src/note.cpp b/src/note.cpp index 6f236848cca..7d1d68087e0 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -211,7 +211,7 @@ Accid *Note::GetDrawingAccid() bool Note::HasLedgerLines(int &linesAbove, int &linesBelow, Staff *staff) { if (!staff) { - staff = this->FindStaff(ANCESTOR_ONLY); + staff = this->GetAncestorStaff(); } linesAbove = (this->GetDrawingLoc() - staff->m_drawingLines * 2 + 2) / 2; @@ -455,7 +455,7 @@ wchar_t Note::GetMensuralNoteheadGlyph() const return 0; } - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); bool mensural_black = (staff->m_drawingNotationType == NOTATIONTYPE_mensural_black); wchar_t code = 0; @@ -618,7 +618,7 @@ void Note::CalcMIDIPitch(int shift) } else if (this->HasTabCourse()) { // tablature - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); if (staff->m_drawingTuning) { m_MIDIPitch = staff->m_drawingTuning->CalcPitchNumber( this->GetTabCourse(), this->GetTabFret(), staff->m_drawingNotationType); @@ -862,7 +862,7 @@ int Note::CalcArtic(FunctorParams *functorParams) params->m_parent = this; params->m_stemDir = this->GetDrawingStemDir(); - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); Layer *layer = vrv_cast(this->GetFirstAncestor(LAYER)); assert(layer); @@ -930,7 +930,7 @@ int Note::CalcStem(FunctorParams *functorParams) Stem *stem = this->GetDrawingStem(); assert(stem); - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); Layer *layer = vrv_cast(this->GetFirstAncestor(LAYER)); assert(layer); @@ -982,7 +982,7 @@ int Note::CalcChordNoteHeads(FunctorParams *functorParams) FunctorDocParams *params = vrv_params_cast(functorParams); assert(params); - Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); const int staffSize = staff->m_drawingStaffSize; bool mixedCue = false; @@ -1053,7 +1053,7 @@ MapOfNoteLocs Note::CalcNoteLocations(NotePredicate predicate) { if (predicate && !predicate(this)) return {}; - Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); MapOfNoteLocs noteLocations; noteLocations[staff] = { this->GetDrawingLoc() }; @@ -1088,7 +1088,7 @@ int Note::CalcDots(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); const int staffSize = staff->m_drawingStaffSize; const bool drawingCueSize = this->GetDrawingCueSize(); @@ -1156,7 +1156,7 @@ int Note::CalcLedgerLines(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); const int staffSize = staff->m_drawingStaffSize; const int staffX = staff->GetDrawingX(); const bool drawingCueSize = this->GetDrawingCueSize(); diff --git a/src/rest.cpp b/src/rest.cpp index 30792c475e9..d70671ce93c 100644 --- a/src/rest.cpp +++ b/src/rest.cpp @@ -521,7 +521,7 @@ int Rest::AdjustBeams(FunctorParams *functorParams) // Adjustment should be an even number, so that the rest is positioned properly const int overlapMargin = std::min(leftMargin, rightMargin); if (overlapMargin < 0) { - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); if ((!HasOloc() || !HasPloc()) && !HasLoc()) { const int unit = params->m_doc->GetDrawingUnit(staff->m_drawingStaffSize); const int locAdjust = (params->m_directionBias * (overlapMargin - 2 * unit + 1) / unit); @@ -607,7 +607,7 @@ int Rest::CalcDots(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - Staff *staff = this->FindStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); const bool drawingCueSize = this->GetDrawingCueSize(); const int staffSize = staff->m_drawingStaffSize; @@ -671,7 +671,7 @@ int Rest::Transpose(FunctorParams *functorParams) if ((!HasOloc() || !HasPloc()) && !HasLoc()) return FUNCTOR_SIBLINGS; // Find whether current layer is top, middle (either one if multiple) or bottom - Staff *parentStaff = this->FindStaff(ANCESTOR_ONLY); + Staff *parentStaff = this->GetAncestorStaff(); Layer *parentLayer = vrv_cast(GetFirstAncestor(LAYER)); assert(parentLayer); diff --git a/src/slur.cpp b/src/slur.cpp index c65ebb97e93..7abbe6181b9 100644 --- a/src/slur.cpp +++ b/src/slur.cpp @@ -137,8 +137,8 @@ Staff *Slur::GetBoundaryCrossStaff() } else { // Check if the two elements are in different staves (but themselves not cross-staff) - Staff *startStaff = start->FindStaff(ANCESTOR_ONLY, false); - Staff *endStaff = end->FindStaff(ANCESTOR_ONLY, false); + Staff *startStaff = start->GetAncestorStaff(ANCESTOR_ONLY, false); + Staff *endStaff = end->GetAncestorStaff(ANCESTOR_ONLY, false); if (startStaff && endStaff && (startStaff->GetN() != endStaff->GetN())) { return endStaff; } @@ -163,8 +163,8 @@ std::vector Slur::CollectSpannedElements(Staff *staff, int xMin, std::set staffNumbers; staffNumbers.emplace(staff->GetN()); - Staff *startStaff = this->GetStart()->FindStaff(RESOLVE_CROSSSTAFF, false); - Staff *endStaff = this->GetEnd()->FindStaff(RESOLVE_CROSSSTAFF, false); + Staff *startStaff = this->GetStart()->GetAncestorStaff(RESOLVE_CROSSSTAFF, false); + Staff *endStaff = this->GetEnd()->GetAncestorStaff(RESOLVE_CROSSSTAFF, false); if (startStaff && (startStaff != staff)) { staffNumbers.emplace(startStaff->GetN()); } @@ -273,7 +273,7 @@ Staff *Slur::CalculateExtremalStaff(Staff *staff, int xMin, int xMax, char spann // The floating curve positioner of cross staff slurs should live in the upper/lower staff alignment // corresponding to whether the slur is curved above/below auto adaptStaff = [&extremalStaff, curveDir](LayerElement *element) { - Staff *elementStaff = element->FindStaff(RESOLVE_CROSSSTAFF); + Staff *elementStaff = element->GetAncestorStaff(RESOLVE_CROSSSTAFF); if ((curveDir == curvature_CURVEDIR_above) && (elementStaff->GetN() < extremalStaff->GetN())) { extremalStaff = elementStaff; } diff --git a/src/tie.cpp b/src/tie.cpp index ca5f01d97ac..99d9a0fb713 100644 --- a/src/tie.cpp +++ b/src/tie.cpp @@ -394,7 +394,7 @@ void Tie::CalculateXPosition(Doc *doc, Staff *staff, Chord *startParentChord, Ch } // endPoint Staff *endStaff = staff; - if (endParentChord) endStaff = endParentChord->FindStaff(ANCESTOR_ONLY); + if (endParentChord) endStaff = endParentChord->GetAncestorStaff(); if (endParentChord && endParentChord->HasAdjacentNotesInStaff(endStaff)) { endPoint.x = this->CalculateAdjacentChordXOffset( doc, endStaff, endParentChord, endNote, drawingCurveDir, endPoint.x, false); @@ -454,7 +454,7 @@ void Tie::CalculateXPosition(Doc *doc, Staff *staff, Chord *startParentChord, Ch if (!isShortTie) { // endPoint Staff *endStaff = staff; - if (endParentChord) endStaff = endParentChord->FindStaff(ANCESTOR_ONLY); + if (endParentChord) endStaff = endParentChord->GetAncestorStaff(); if (endParentChord && endParentChord->HasAdjacentNotesInStaff(endStaff)) { endPoint.x = this->CalculateAdjacentChordXOffset( doc, endStaff, endParentChord, endNote, drawingCurveDir, endPoint.x, false); diff --git a/src/timeinterface.cpp b/src/timeinterface.cpp index 835b69b84bd..490b4370f9d 100644 --- a/src/timeinterface.cpp +++ b/src/timeinterface.cpp @@ -97,7 +97,7 @@ bool TimePointInterface::IsOnStaff(int n) return false; } else if (m_start) { - Staff *staff = m_start->FindStaff(ANCESTOR_ONLY, false); + Staff *staff = m_start->GetAncestorStaff(ANCESTOR_ONLY, false); if (staff && (staff->GetN() == n)) return true; } return false; @@ -129,7 +129,7 @@ std::vector TimePointInterface::GetTstampStaves(Measure *measure, Objec } } else if (m_start && !m_start->Is(TIMESTAMP_ATTR)) { - Staff *staff = m_start->FindStaff(ANCESTOR_ONLY); + Staff *staff = m_start->GetAncestorStaff(); staffList.push_back(staff->GetN()); } else if (measure->GetChildCount(STAFF) == 1) { @@ -285,10 +285,10 @@ void TimeSpanningInterface::GetCrossStaffOverflows( // No cross-staff endpoints, check if the slur itself crosses staves if (!startStaff) { - startStaff = this->GetStart()->FindStaff(ANCESTOR_ONLY, false); + startStaff = this->GetStart()->GetAncestorStaff(ANCESTOR_ONLY, false); } if (!endStaff) { - endStaff = this->GetEnd()->FindStaff(ANCESTOR_ONLY, false); + endStaff = this->GetEnd()->GetAncestorStaff(ANCESTOR_ONLY, false); } // This happens with slurs starting or ending with a timestamp diff --git a/src/tuplet.cpp b/src/tuplet.cpp index 2442d17c9d6..74e32e3dde9 100644 --- a/src/tuplet.cpp +++ b/src/tuplet.cpp @@ -320,7 +320,7 @@ void Tuplet::CalculateTupletNumCrossStaff(LayerElement *layerElement) return; }; - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); // Find if there is a mix of cross-staff and non-cross-staff elements in the tuplet ListOfObjects descendants; ClassIdsComparison comparison({ CHORD, NOTE, REST }); @@ -643,7 +643,7 @@ int Tuplet::AdjustTupletsY(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); const int staffSize = staff->m_drawingStaffSize; assert(m_drawingBracketPos != STAFFREL_basic_NONE); diff --git a/src/verse.cpp b/src/verse.cpp index 56946b76fdf..d69e6032f2d 100644 --- a/src/verse.cpp +++ b/src/verse.cpp @@ -238,7 +238,7 @@ int Verse::PrepareProcessingLists(FunctorParams *functorParams) assert(params); // StaffN_LayerN_VerseN_t *tree = vrv_cast((*params).at(0)); - Staff *staff = this->FindStaff(ANCESTOR_ONLY); + Staff *staff = this->GetAncestorStaff(); Layer *layer = vrv_cast(this->GetFirstAncestor(LAYER)); assert(layer); diff --git a/src/view_control.cpp b/src/view_control.cpp index 85733bdf254..4f58e7e33b1 100644 --- a/src/view_control.cpp +++ b/src/view_control.cpp @@ -1336,7 +1336,7 @@ void View::DrawArpeg(DeviceContext *dc, Arpeg *arpeg, Measure *measure, System * const int bottom = bottomNote->GetDrawingY(); // We arbitrarily look at the top note - Staff *staff = topNote->FindStaff(ANCESTOR_ONLY); + Staff *staff = topNote->GetAncestorStaff(); const bool drawingCueSize = topNote->GetDrawingCueSize(); // We are going to have only one FloatingPositioner - staff will be the top note one diff --git a/src/view_page.cpp b/src/view_page.cpp index 45fb59368bf..43a572e622c 100644 --- a/src/view_page.cpp +++ b/src/view_page.cpp @@ -834,7 +834,7 @@ void View::DrawBarLine( assert(dc); assert(barLine); - Staff *staff = barLine->FindStaff(ANCESTOR_ONLY, false); + Staff *staff = barLine->GetAncestorStaff(ANCESTOR_ONLY, false); const int staffSize = (staff) ? staff->m_drawingStaffSize : 100; const int x = barLine->GetDrawingX(); diff --git a/src/view_slur.cpp b/src/view_slur.cpp index d280f91dffa..07f51fed6c2 100644 --- a/src/view_slur.cpp +++ b/src/view_slur.cpp @@ -182,8 +182,8 @@ float View::CalcInitialSlur( const std::vector elements = slur->CollectSpannedElements(staff, bezier.p1.x, bezier.p2.x, curve->GetSpanningType()); - Staff *startStaff = slur->GetStart()->FindStaff(RESOLVE_CROSSSTAFF, false); - Staff *endStaff = slur->GetEnd()->FindStaff(RESOLVE_CROSSSTAFF, false); + Staff *startStaff = slur->GetStart()->GetAncestorStaff(RESOLVE_CROSSSTAFF, false); + Staff *endStaff = slur->GetEnd()->GetAncestorStaff(RESOLVE_CROSSSTAFF, false); curve->ClearSpannedElements(); for (auto element : elements) { From f19f860804bbc0eddd71bb18e8b5ed5ad79ba624 Mon Sep 17 00:00:00 2001 From: Monceber Date: Fri, 21 Jan 2022 20:42:00 +0200 Subject: [PATCH 102/403] Minor fix --- src/beam.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/beam.cpp b/src/beam.cpp index 4d938e21898..176ae7ad7d2 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1058,7 +1058,7 @@ void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool is } } - short minDuration = DUR_4; + int minDuration = DUR_4; for (auto coord : m_beamElementCoordRefs) { if (!coord->m_closestNote) continue; // if location matches, or if current elements duration is shorter than 8th. This ensures that beams with From 0d005a2a605d3c41752536a9c27449667ec69434 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 24 Jan 2022 07:41:29 +0100 Subject: [PATCH 103/403] Fix measure positioning --- src/doc.cpp | 7 +++++++ src/floatingobject.cpp | 1 + 2 files changed, 8 insertions(+) diff --git a/src/doc.cpp b/src/doc.cpp index 78c1ccc5e0f..d709df4c10e 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -859,6 +859,13 @@ void Doc::CastOffDocBase(bool useSb, bool usePb, bool smart) contentPage->LayOutHorizontally(); LogMessage("Horizontal Layout Done"); } + else { + // Adjust measure X position + AlignMeasuresParams alignMeasuresParams; + Functor alignMeasures(&Object::AlignMeasures); + Functor alignMeasuresEnd(&Object::AlignMeasuresEnd); + contentPage->Process(&alignMeasures, &alignMeasuresParams, &alignMeasuresEnd); + } System *contentSystem = vrv_cast(contentPage->DetachChild(0)); assert(contentSystem); diff --git a/src/floatingobject.cpp b/src/floatingobject.cpp index 9ae8c5505d2..61677dcb18a 100644 --- a/src/floatingobject.cpp +++ b/src/floatingobject.cpp @@ -254,6 +254,7 @@ FloatingPositioner::FloatingPositioner(FloatingObject *object, StaffAlignment *a void FloatingPositioner::ResetPositioner() { BoundingBox::ResetBoundingBox(); + ResetCachedDrawingX(); ResetCachedDrawingY(); m_objectX = NULL; From bd0ba94e55a85d63161a480f269b3cc58164618c Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 24 Jan 2022 08:31:51 +0100 Subject: [PATCH 104/403] Add cache use in DocCastOff --- src/doc.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/doc.cpp b/src/doc.cpp index f266071b504..ea245ffcbfc 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -928,7 +928,20 @@ void Doc::CastOffDocBase(bool useSb, bool usePb, bool smart) Page *unCastOffPage = this->SetDrawingPage(0); assert(unCastOffPage); - unCastOffPage->LayOutHorizontally(); + + // Check if the the horizontal layout is cached by looking at the first measure + Measure *firstMeasure = vrv_cast(unCastOffPage->FindDescendantByType(MEASURE)); + if (!firstMeasure || firstMeasure->m_cachedCastOffWidth == VRV_UNSET) { + LogDebug("Performing the horizontal layout"); + unCastOffPage->LayOutHorizontally(); + } + else { + // Adjust measure X position + AlignMeasuresParams alignMeasuresParams(this); + Functor alignMeasures(&Object::AlignMeasures); + Functor alignMeasuresEnd(&Object::AlignMeasuresEnd); + unCastOffPage->Process(&alignMeasures, &alignMeasuresParams, &alignMeasuresEnd); + } Page *castOffSinglePage = new Page(); From 08f2d7fbf56eab3f4a00489f99305ff61d11a7c0 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 24 Jan 2022 15:25:27 +0100 Subject: [PATCH 105/403] Add cache members and functors to Measure, LayerElement and Arpeg --- include/vrv/arpeg.h | 10 ++++++++ include/vrv/layerelement.h | 15 ++++++++++++ include/vrv/measure.h | 22 +++++++++++++---- include/vrv/object.h | 6 +++++ src/arpeg.cpp | 16 +++++++++++++ src/layerelement.cpp | 20 ++++++++++++++++ src/measure.cpp | 48 ++++++++++++++++++++++++-------------- 7 files changed, 115 insertions(+), 22 deletions(-) diff --git a/include/vrv/arpeg.h b/include/vrv/arpeg.h index 7dcb3d10bb2..df1a503c7b2 100644 --- a/include/vrv/arpeg.h +++ b/include/vrv/arpeg.h @@ -103,6 +103,11 @@ class Arpeg : public ControlElement, */ int ResetDrawing(FunctorParams *functorParams) override; + /** + * See Object::HorizontalLayoutCache + */ + int HorizontalLayoutCache(FunctorParams *functorParams) override; + protected: // private: @@ -116,6 +121,11 @@ class Arpeg : public ControlElement, * (See View::DrawArpeg that sets the FloatingPositioner) */ int m_drawingXRel; + + /** + * The cached value for m_darwingXRel for caching horizontal layout + */ + int m_cachedXRel; }; } // namespace vrv diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index 590843fec21..ba2a2316df2 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -411,6 +411,11 @@ class LayerElement : public Object, */ int PrepareDuration(FunctorParams *functorParams) override; + /** + * See Object::HorizontalLayoutCache + */ + int HorizontalLayoutCache(FunctorParams *functorParams) override; + protected: /** * Helper to figure whether two chords are in fully in unison based on the locations of the notes. @@ -481,12 +486,22 @@ class LayerElement : public Object, */ int m_drawingYRel; + /** + * The cached value for m_darwingYRel for caching horizontal layout + */ + int m_cachedYRel; + /** * The X drawing relative position of the object. * It is re-computed everytime the object is drawn and it is not stored in the file. */ int m_drawingXRel; + /** + * The cached value for m_darwingXRel for caching horizontal layout + */ + int m_cachedXRel; + /** * The cached drawing cue size set by PrepareDrawingCueSize */ diff --git a/include/vrv/measure.h b/include/vrv/measure.h index 66d36d17f3e..46496c56e73 100644 --- a/include/vrv/measure.h +++ b/include/vrv/measure.h @@ -467,6 +467,11 @@ class Measure : public Object, */ int PrepareTimestampsEnd(FunctorParams *functorParams) override; + /** + * See Object::HorizontalLayoutCache + */ + int HorizontalLayoutCache(FunctorParams *functorParams) override; + public: // flags for drawing measure barline based on visibility or other conditions enum BarlineDrawingFlags { @@ -490,10 +495,14 @@ class Measure : public Object, mutable MeasureAligner m_measureAligner; TimestampAligner m_timestampAligner; - - int m_cachedCastOffOverflow; - int m_cachedCastOffDrawingXRel; - int m_cachedCastOffWidth; + + /** + * @name Cached values of overflow and width for caching the horizontal layout + */ + ///@{ + int m_cachedOverflow; + int m_cachedWidth; + ///@} protected: /** @@ -502,6 +511,11 @@ class Measure : public Object, */ int m_drawingXRel; + /** + * The cached value for m_darwingXRel for caching horizontal layout + */ + int m_cachedXRel; + private: bool m_measuredMusic; diff --git a/include/vrv/object.h b/include/vrv/object.h index e6a03d3aaae..f8011e9d918 100644 --- a/include/vrv/object.h +++ b/include/vrv/object.h @@ -1257,6 +1257,12 @@ class Object : public BoundingBox { virtual int CalcOnsetOffsetEnd(FunctorParams *) { return FUNCTOR_CONTINUE; } ///@} + /** + * Cache or restore cached horizontal layout for faster layout redoing + */ + ///@{ + virtual int HorizontalLayoutCache(FunctorParams *) { return FUNCTOR_CONTINUE; } + /** * Adjust note timings based on ties */ diff --git a/src/arpeg.cpp b/src/arpeg.cpp index 198143019ee..11b388e0f92 100644 --- a/src/arpeg.cpp +++ b/src/arpeg.cpp @@ -55,6 +55,7 @@ void Arpeg::Reset() ResetEnclosingChars(); m_drawingXRel = 0; + m_cachedXRel = VRV_UNSET; } int Arpeg::GetDrawingX() const @@ -269,4 +270,19 @@ int Arpeg::ResetDrawing(FunctorParams *functorParams) return interface->InterfaceResetDrawing(functorParams, this); } +int Arpeg::HorizontalLayoutCache(FunctorParams *functorParams) +{ + HorizontalLayoutCacheParams *params = vrv_params_cast(functorParams); + assert(params); + + if (params->m_restore) { + m_drawingXRel = m_cachedXRel; + } + else { + m_cachedXRel = m_drawingXRel; + } + + return FUNCTOR_CONTINUE; +} + } // namespace vrv diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 7d23704b42a..ea2f5e20462 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -119,6 +119,9 @@ void LayerElement::Reset() m_drawingXRel = 0; m_drawingCueSize = false; + m_cachedYRel = VRV_UNSET; + m_cachedXRel = VRV_UNSET; + m_scoreDefRole = SCOREDEF_NONE; m_alignment = NULL; m_graceAlignment = NULL; @@ -2576,4 +2579,21 @@ int LayerElement::PrepareDuration(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int LayerElement::HorizontalLayoutCache(FunctorParams *functorParams) +{ + HorizontalLayoutCacheParams *params = vrv_params_cast(functorParams); + assert(params); + + if (params->m_restore) { + m_drawingXRel = m_cachedXRel; + m_drawingYRel = m_cachedYRel; + } + else { + m_cachedXRel = m_drawingXRel; + m_cachedYRel = m_drawingYRel; + } + + return FUNCTOR_CONTINUE; +} + } // namespace vrv diff --git a/src/measure.cpp b/src/measure.cpp index 5b1ca952948..345bc67fac0 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -134,10 +134,10 @@ void Measure::Reset() m_xAbs = VRV_UNSET; m_xAbs2 = VRV_UNSET; m_drawingXRel = 0; - - m_cachedCastOffOverflow = VRV_UNSET; - m_cachedCastOffDrawingXRel = VRV_UNSET; - m_cachedCastOffWidth = VRV_UNSET; + + m_cachedXRel = VRV_UNSET; + m_cachedOverflow = VRV_UNSET; + m_cachedWidth = VRV_UNSET; // by default, we have a single barLine on the right (none on the left) m_rightBarLine.SetForm(this->GetRight()); @@ -1201,17 +1201,11 @@ int Measure::CastOffSystems(FunctorParams *functorParams) { CastOffSystemsParams *params = vrv_params_cast(functorParams); assert(params); - - if (m_cachedCastOffWidth == VRV_UNSET) { - // Check if the measure has some overflowing control elements - m_cachedCastOffOverflow = this->GetDrawingOverflow(); - m_cachedCastOffWidth = this->GetWidth(); - m_cachedCastOffDrawingXRel = this->m_drawingXRel; - - } - int overflow = this->m_cachedCastOffOverflow; - int width = this->m_cachedCastOffWidth; - int drawingXRel = this->m_cachedCastOffDrawingXRel; + + const bool hasCache = (m_cachedWidth == VRV_UNSET); + int overflow = hasCache ? this->m_cachedOverflow : this->GetDrawingOverflow(); + int width = hasCache ? this->m_cachedWidth : this->GetWidth(); + int drawingXRel = this->m_drawingXRel; Object *nextMeasure = params->m_contentSystem->GetNext(this, MEASURE); const bool isLeftoverMeasure = ((NULL == nextMeasure) && params->m_doc->GetOptions()->m_breaksNoWidow.GetValue() @@ -1227,8 +1221,7 @@ int Measure::CastOffSystems(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } // Break it if necessary - else if (drawingXRel + width + params->m_currentScoreDefWidth - params->m_shift - > params->m_systemWidth) { + else if (drawingXRel + width + params->m_currentScoreDefWidth - params->m_shift > params->m_systemWidth) { params->m_currentSystem = new System(); params->m_page->AddChild(params->m_currentSystem); params->m_shift = drawingXRel; @@ -1240,7 +1233,7 @@ int Measure::CastOffSystems(FunctorParams *functorParams) if (oneOfPendingObjects->Is(MEASURE)) { Measure *firstPendingMesure = vrv_cast(oneOfPendingObjects); assert(firstPendingMesure); - params->m_shift = firstPendingMesure->m_cachedCastOffDrawingXRel; + params->m_shift = firstPendingMesure->m_cachedXRel; params->m_leftoverSystem = NULL; // it has to be first measure break; @@ -1608,4 +1601,23 @@ int Measure::CalcOnsetOffset(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int Measure::HorizontalLayoutCache(FunctorParams *functorParams) +{ + HorizontalLayoutCacheParams *params = vrv_params_cast(functorParams); + assert(params); + + if (params->m_restore) { + m_drawingXRel = m_cachedXRel; + } + else { + m_cachedWidth = this->GetWidth(); + m_cachedOverflow = this->GetDrawingOverflow(); + m_cachedXRel = m_drawingXRel; + } + if (this->GetLeftBarLine()) this->GetLeftBarLine()->HorizontalLayoutCache(functorParams); + if (this->GetRightBarLine()) this->GetRightBarLine()->HorizontalLayoutCache(functorParams); + + return FUNCTOR_CONTINUE; +} + } // namespace vrv From f3754f69ef9c5ec5cacaf33a72b6ed4a404eb930 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 24 Jan 2022 15:27:11 +0100 Subject: [PATCH 106/403] Add Page::HorizontalLayoutCache to store or restore cache --- include/vrv/page.h | 7 +++++++ src/page.cpp | 13 ++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/include/vrv/page.h b/include/vrv/page.h index 802dca23f5b..3065f47f0c9 100644 --- a/include/vrv/page.h +++ b/include/vrv/page.h @@ -99,6 +99,13 @@ class Page : public Object { */ void LayOutHorizontally(); + /** + * Layout out the measures horizontally using the cached values. + * This should be done in preparation of cast-off which it based on measure positioning. + * The content of the measures it not layout out and keeps previous relative positioning. + */ + void HorizontalLayoutCachePage(bool restore = false); + /** * Justifiy the content of the page (measures and their content) horizontally */ diff --git a/src/page.cpp b/src/page.cpp index 17e7d4e8929..6e745582217 100644 --- a/src/page.cpp +++ b/src/page.cpp @@ -254,7 +254,7 @@ void Page::LayOutHorizontally() Functor alignVerticallyEnd(&Object::AlignVerticallyEnd); AlignVerticallyParams alignVerticallyParams(doc, &alignVertically, &alignVerticallyEnd); this->Process(&alignVertically, &alignVerticallyParams, &alignVerticallyEnd); - + // Unless duration-based spacing is disabled, set the X position of each Alignment. // Does non-linear spacing based on the duration space between two Alignment objects. if (!doc->GetOptions()->m_evenNoteSpacing.GetValue()) { @@ -426,6 +426,17 @@ void Page::LayOutHorizontally() this->Process(&prepareSlurs, &prepareSlursParams); } +void Page::HorizontalLayoutCachePage(bool restore) +{ + Doc *doc = vrv_cast(GetFirstAncestor(DOC)); + assert(doc); + + HorizontalLayoutCacheParams horizontalLayoutCacheParams(doc); + horizontalLayoutCacheParams.m_restore = restore; + Functor horizontalLayoutCache(&Object::HorizontalLayoutCache); + this->Process(&horizontalLayoutCache, &horizontalLayoutCacheParams); +} + void Page::LayOutVertically() { Doc *doc = vrv_cast(GetFirstAncestor(DOC)); From e843e768034386905aa274df9a2567c7e6aeff6b Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 24 Jan 2022 15:27:24 +0100 Subject: [PATCH 107/403] Adjust Doc::CastOffBase to use cache if existing --- src/doc.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/doc.cpp b/src/doc.cpp index ea245ffcbfc..7383de4d3d3 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -931,16 +931,13 @@ void Doc::CastOffDocBase(bool useSb, bool usePb, bool smart) // Check if the the horizontal layout is cached by looking at the first measure Measure *firstMeasure = vrv_cast(unCastOffPage->FindDescendantByType(MEASURE)); - if (!firstMeasure || firstMeasure->m_cachedCastOffWidth == VRV_UNSET) { + if (!firstMeasure || firstMeasure->m_cachedWidth == VRV_UNSET) { LogDebug("Performing the horizontal layout"); unCastOffPage->LayOutHorizontally(); + unCastOffPage->HorizontalLayoutCachePage(); } else { - // Adjust measure X position - AlignMeasuresParams alignMeasuresParams(this); - Functor alignMeasures(&Object::AlignMeasures); - Functor alignMeasuresEnd(&Object::AlignMeasuresEnd); - unCastOffPage->Process(&alignMeasures, &alignMeasuresParams, &alignMeasuresEnd); + unCastOffPage->HorizontalLayoutCachePage(true); } Page *castOffSinglePage = new Page(); From e9e34ee0b02379fefe3a061c0613e145dcc3300d Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 24 Jan 2022 15:29:06 +0100 Subject: [PATCH 108/403] Adjust Object::UnCastOff functor to reset cache in Measure --- include/vrv/functorparams.h | 3 +++ include/vrv/measure.h | 5 +++++ src/measure.cpp | 14 ++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 87251d1bd05..a183bd514db 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -2452,6 +2452,7 @@ class TransposeParams : public FunctorParams { /** * member 0: a pointer to the page we are adding system to * member 1: a pointer to the system we are adding content to + * member 2: a flag indicating if we need to reset the horizontal layout cache **/ class UnCastOffParams : public FunctorParams { @@ -2460,9 +2461,11 @@ class UnCastOffParams : public FunctorParams { { m_page = page; m_currentSystem = NULL; + m_resetCache = true; } Page *m_page; System *m_currentSystem; + bool m_resetCache; }; } // namespace vrv diff --git a/include/vrv/measure.h b/include/vrv/measure.h index 46496c56e73..6177a308392 100644 --- a/include/vrv/measure.h +++ b/include/vrv/measure.h @@ -467,6 +467,11 @@ class Measure : public Object, */ int PrepareTimestampsEnd(FunctorParams *functorParams) override; + /** + * See Object::UnCastOff + */ + int UnCastOff(FunctorParams *functorParams) override; + /** * See Object::HorizontalLayoutCache */ diff --git a/src/measure.cpp b/src/measure.cpp index 345bc67fac0..9c564c66dfe 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -1601,6 +1601,20 @@ int Measure::CalcOnsetOffset(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int Measure::UnCastOff(FunctorParams *functorParams) +{ + UnCastOffParams *params = vrv_params_cast(functorParams); + assert(params); + + if (params->m_resetCache) { + m_cachedXRel = VRV_UNSET; + m_cachedWidth = VRV_UNSET; + m_cachedOverflow = VRV_UNSET; + } + + return FUNCTOR_CONTINUE; +} + int Measure::HorizontalLayoutCache(FunctorParams *functorParams) { HorizontalLayoutCacheParams *params = vrv_params_cast(functorParams); From d3d476875825cf9f41ffd7935eb138d3c093b533 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 24 Jan 2022 15:29:53 +0100 Subject: [PATCH 109/403] Add HorizontalLayoutCacheParams --- include/vrv/functorparams.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index a183bd514db..7e7c2fdef10 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -804,6 +804,7 @@ class AlignHorizontallyParams : public FunctorParams { /** * member 0: the cumulated shift * member 1: the cumulated justifiable width + * member 2: the doc **/ class AlignMeasuresParams : public FunctorParams { @@ -1540,6 +1541,26 @@ class GenerateFeaturesParams : public FunctorParams { FeatureExtractor *m_extractor; }; +//---------------------------------------------------------------------------- +// HorizontalLayoutCacheParams +//---------------------------------------------------------------------------- + +/** + * member 0: a flag indicating if the cache should be stored (default) or restored + * member 1: a pointer to the Doc + **/ + +class HorizontalLayoutCacheParams : public FunctorParams { +public: + HorizontalLayoutCacheParams(Doc *doc) + { + m_restore = false; + m_doc = doc; + } + bool m_restore; + Doc *m_doc; +}; + //---------------------------------------------------------------------------- // GenerateMIDIParams //---------------------------------------------------------------------------- From 81c91d89be5c17ab06d83e28a9e34aeb991d29bb Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 24 Jan 2022 15:30:53 +0100 Subject: [PATCH 110/403] Adjust Toolkit::RedoLayout to take and pass resetCache parameter --- include/vrv/doc.h | 2 +- include/vrv/toolkit.h | 5 ++++- src/doc.cpp | 3 ++- src/toolkit.cpp | 18 ++++++++++++++++-- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/include/vrv/doc.h b/include/vrv/doc.h index 84fdc82194e..967280b8583 100644 --- a/include/vrv/doc.h +++ b/include/vrv/doc.h @@ -296,7 +296,7 @@ class Doc : public Object { * Undo the cast off of the entire document. * The document will then contain one single page with one single system. */ - void UnCastOffDoc(); + void UnCastOffDoc(bool resetCache = true); /** * Cast off of the entire document according to the encoded data (pb and sb). diff --git a/include/vrv/toolkit.h b/include/vrv/toolkit.h index 3734f912456..26ced0cf965 100644 --- a/include/vrv/toolkit.h +++ b/include/vrv/toolkit.h @@ -570,8 +570,11 @@ class Toolkit { * * This can be called once the rendering option were changed, for example with a new page (sceen) height or a new * zoom level. + * + * @param jsonOptions A stringified JSON object with the action options + * resetCache: true or false; true by default; */ - void RedoLayout(); + void RedoLayout(const std::string &jsonOptions = ""); /** * Redo the layout of the pitch postitions of the current drawing page diff --git a/src/doc.cpp b/src/doc.cpp index 7383de4d3d3..0f62e000f4f 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -1013,13 +1013,14 @@ void Doc::CastOffDocBase(bool useSb, bool usePb, bool smart) } } -void Doc::UnCastOffDoc() +void Doc::UnCastOffDoc(bool resetCache) { Pages *pages = this->GetPages(); assert(pages); Page *unCastOffPage = new Page(); UnCastOffParams unCastOffParams(unCastOffPage); + unCastOffParams.m_resetCache = resetCache; Functor unCastOff(&Object::UnCastOff); this->Process(&unCastOff, &unCastOffParams); diff --git a/src/toolkit.cpp b/src/toolkit.cpp index 79826a07315..719202bca57 100644 --- a/src/toolkit.cpp +++ b/src/toolkit.cpp @@ -1174,8 +1174,22 @@ void Toolkit::ResetLogBuffer() logBuffer.clear(); } -void Toolkit::RedoLayout() +void Toolkit::RedoLayout(const std::string &jsonOptions) { + bool resetCache = true; + + jsonxx::Object json; + + // Read JSON options if not empty + if (!jsonOptions.empty()) { + if (!json.parse(jsonOptions)) { + LogWarning("Cannot parse JSON std::string. Using default options."); + } + else { + if (json.has("resetCache")) resetCache = json.get("resetCache"); + } + } + this->ResetLogBuffer(); if ((GetPageCount() == 0) || (m_doc.GetType() == Transcription) || (m_doc.GetType() == Facs)) { @@ -1183,7 +1197,7 @@ void Toolkit::RedoLayout() return; } - m_doc.UnCastOffDoc(); + m_doc.UnCastOffDoc(resetCache); if (m_options->m_breaks.GetValue() == BREAKS_line) { m_doc.CastOffLineDoc(); } From 92e0a09bfd66a31b20bcb7f00ebc46bf8025323a Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 24 Jan 2022 15:31:32 +0100 Subject: [PATCH 111/403] Adjust C wrapper and JS proxy --- emscripten/verovio-proxy.js | 6 +++--- tools/c_wrapper.cpp | 4 ++-- tools/c_wrapper.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/emscripten/verovio-proxy.js b/emscripten/verovio-proxy.js index 481f19b2d15..3d9f0a5d578 100644 --- a/emscripten/verovio-proxy.js +++ b/emscripten/verovio-proxy.js @@ -79,7 +79,7 @@ verovio.vrvToolkit.loadZipDataBase64 = Module.cwrap( 'vrvToolkit_loadZipDataBase verovio.vrvToolkit.loadZipDataBuffer = Module.cwrap( 'vrvToolkit_loadZipDataBuffer', 'number', ['number', 'number', 'number'] ); // void redoLayout(Toolkit *ic) -verovio.vrvToolkit.redoLayout = Module.cwrap( 'vrvToolkit_redoLayout', null, ['number'] ); +verovio.vrvToolkit.redoLayout = Module.cwrap( 'vrvToolkit_redoLayout', null, ['number', 'string'] ); // void redoPagePitchPosLayout(Toolkit *ic) verovio.vrvToolkit.redoPagePitchPosLayout = Module.cwrap( 'vrvToolkit_redoPagePitchPosLayout', null, ['number'] ); @@ -253,9 +253,9 @@ verovio.toolkit.prototype.loadZipDataBuffer = function ( data ) return res; }; -verovio.toolkit.prototype.redoLayout = function () +verovio.toolkit.prototype.redoLayout = function ( options = {} ) { - verovio.vrvToolkit.redoLayout( this.ptr ); + verovio.vrvToolkit.redoLayout( this.ptr, JSON.stringify( options ) ); } verovio.toolkit.prototype.redoPagePitchPosLayout = function () diff --git a/tools/c_wrapper.cpp b/tools/c_wrapper.cpp index 7e3e162b727..51c6bb7c702 100644 --- a/tools/c_wrapper.cpp +++ b/tools/c_wrapper.cpp @@ -229,10 +229,10 @@ const char *vrvToolkit_renderToTimemap(void *tkPtr) return tk->GetCString(); } -void vrvToolkit_redoLayout(void *tkPtr) +void vrvToolkit_redoLayout(void *tkPtr, const char *c_options) { Toolkit *tk = static_cast(tkPtr); - tk->RedoLayout(); + tk->RedoLayout(c_options); } void vrvToolkit_redoPagePitchPosLayout(void *tkPtr) diff --git a/tools/c_wrapper.h b/tools/c_wrapper.h index a5034242636..2ff5a4c6bef 100644 --- a/tools/c_wrapper.h +++ b/tools/c_wrapper.h @@ -42,7 +42,7 @@ const char *vrvToolkit_renderToMIDI(void *tkPtr, const char *c_options); const char *vrvToolkit_renderToPAE(void *tkPtr); const char *vrvToolkit_renderToSVG(void *tkPtr, int page_no, const char *c_options); const char *vrvToolkit_renderToTimemap(void *tkPtr); -void vrvToolkit_redoLayout(void *tkPtr); +void vrvToolkit_redoLayout(void *tkPtr, const char *c_options); void vrvToolkit_redoPagePitchPosLayout(void *tkPtr); const char *vrvToolkit_renderData(void *tkPtr, const char *data, const char *options); void vrvToolkit_resetXmlIdSeed(void *tkPtr, int seed); From 695af10fe19a640412b91460c91087c9a28668fe Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 24 Jan 2022 15:31:46 +0100 Subject: [PATCH 112/403] Cleanup --- include/vrv/scoredef.h | 2 +- src/system.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/include/vrv/scoredef.h b/include/vrv/scoredef.h index 5187fbe83a3..5e894be7c2b 100644 --- a/include/vrv/scoredef.h +++ b/include/vrv/scoredef.h @@ -264,7 +264,7 @@ class ScoreDef : public ScoreDefElement, public: bool m_setAsDrawing; bool m_insertScoreDef; - + int m_cacheCastOffWidth; // private: diff --git a/src/system.cpp b/src/system.cpp index 24889e0339a..f7d4ab52a41 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -1003,6 +1003,8 @@ int System::CastOffPages(FunctorParams *functorParams) currentShift += params->m_pgHead2Height + params->m_pgFoot2Height; } + // LogMessage("System: %d", this->GetHeight()); + const int systemMaxPerPage = params->m_doc->GetOptions()->m_systemMaxPerPage.GetValue(); const int childCount = params->m_currentPage->GetChildCount(); if ((systemMaxPerPage && systemMaxPerPage == childCount) From 8060d33e559e4bb8108476329273d7299cfcb673 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 24 Jan 2022 15:34:19 +0100 Subject: [PATCH 113/403] Remove unused scoreDef width cache --- include/vrv/scoredef.h | 2 -- src/scoredef.cpp | 6 +----- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/include/vrv/scoredef.h b/include/vrv/scoredef.h index 5e894be7c2b..b4e636ad155 100644 --- a/include/vrv/scoredef.h +++ b/include/vrv/scoredef.h @@ -265,8 +265,6 @@ class ScoreDef : public ScoreDefElement, bool m_setAsDrawing; bool m_insertScoreDef; - int m_cacheCastOffWidth; - // private: /** Flags for indicating whether labels need to be drawn or not */ bool m_drawLabels; diff --git a/src/scoredef.cpp b/src/scoredef.cpp index 2a2caccb74d..beab7d501c0 100644 --- a/src/scoredef.cpp +++ b/src/scoredef.cpp @@ -219,7 +219,6 @@ void ScoreDef::Reset() m_drawingWidth = 0; m_drawingLabelsWidth = 0; m_setAsDrawing = false; - m_cacheCastOffWidth = VRV_UNSET; } bool ScoreDef::IsSupportedChild(Object *child) @@ -572,10 +571,7 @@ int ScoreDef::CastOffSystems(FunctorParams *functorParams) // the initial one - for this to be corrected, we would need two parameters, one for the current initial // scoreDef and one for the current that will be the initial one at the next system // Also, the abbr label (width) changes would not be taken into account - if (m_cacheCastOffWidth == VRV_UNSET) { - m_cacheCastOffWidth = this->GetDrawingWidth() + params->m_contentSystem->GetDrawingAbbrLabelsWidth(); - } - params->m_currentScoreDefWidth = m_cacheCastOffWidth; + params->m_currentScoreDefWidth = this->GetDrawingWidth() + params->m_contentSystem->GetDrawingAbbrLabelsWidth(); return FUNCTOR_SIBLINGS; } From b45b8a7cc57b93d3caa94c0928dd4c49219ec779 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 24 Jan 2022 16:10:22 +0100 Subject: [PATCH 114/403] Make member protected and add helper for checking cache --- include/vrv/measure.h | 21 +++++++++++++-------- src/doc.cpp | 3 ++- src/measure.cpp | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/include/vrv/measure.h b/include/vrv/measure.h index 6177a308392..3f26f20ddb1 100644 --- a/include/vrv/measure.h +++ b/include/vrv/measure.h @@ -84,6 +84,11 @@ class Measure : public Object, */ void AddTimestamp(TimestampAttr *timestampAttr); + /** + * Return true if the Measure has cached values for the horizontal layout + */ + bool HasCachedHorizontalLayout() const { return (m_cachedWidth != VRV_UNSET); } + /** * Get the X drawing position */ @@ -501,14 +506,6 @@ class Measure : public Object, TimestampAligner m_timestampAligner; - /** - * @name Cached values of overflow and width for caching the horizontal layout - */ - ///@{ - int m_cachedOverflow; - int m_cachedWidth; - ///@} - protected: /** * The X relative position of the measure. @@ -521,6 +518,14 @@ class Measure : public Object, */ int m_cachedXRel; + /** + * @name Cached values of overflow and width for caching the horizontal layout + */ + ///@{ + int m_cachedOverflow; + int m_cachedWidth; + ///@} + private: bool m_measuredMusic; diff --git a/src/doc.cpp b/src/doc.cpp index 0f62e000f4f..d79ad89c604 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -930,8 +930,9 @@ void Doc::CastOffDocBase(bool useSb, bool usePb, bool smart) assert(unCastOffPage); // Check if the the horizontal layout is cached by looking at the first measure + // The cache is not set the first time, or can be reset by Doc::UnCastOffDoc Measure *firstMeasure = vrv_cast(unCastOffPage->FindDescendantByType(MEASURE)); - if (!firstMeasure || firstMeasure->m_cachedWidth == VRV_UNSET) { + if (!firstMeasure || !firstMeasure->HasCachedHorizontalLayout()) { LogDebug("Performing the horizontal layout"); unCastOffPage->LayOutHorizontally(); unCastOffPage->HorizontalLayoutCachePage(); diff --git a/src/measure.cpp b/src/measure.cpp index 9c564c66dfe..11c4f8fd905 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -1202,7 +1202,7 @@ int Measure::CastOffSystems(FunctorParams *functorParams) CastOffSystemsParams *params = vrv_params_cast(functorParams); assert(params); - const bool hasCache = (m_cachedWidth == VRV_UNSET); + const bool hasCache = this->HasCachedHorizontalLayout(); int overflow = hasCache ? this->m_cachedOverflow : this->GetDrawingOverflow(); int width = hasCache ? this->m_cachedWidth : this->GetWidth(); int drawingXRel = this->m_drawingXRel; From 6a58106de5a28fcdf2629723670f6fdf1902b330 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 24 Jan 2022 18:01:29 +0100 Subject: [PATCH 115/403] Rename RESOLVE_CROSSSTAFF to RESOLVE_CROSS_STAFF [skip-ci] --- include/vrv/layerelement.h | 2 +- src/accid.cpp | 2 +- src/artic.cpp | 2 +- src/chord.cpp | 6 +++--- src/horizontalaligner.cpp | 4 ++-- src/layer.cpp | 4 ++-- src/layerelement.cpp | 14 +++++++------- src/note.cpp | 8 ++++---- src/rest.cpp | 2 +- src/slur.cpp | 6 +++--- src/view_slur.cpp | 4 ++-- 11 files changed, 27 insertions(+), 27 deletions(-) diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index 590843fec21..94a8cc5ea7f 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -30,7 +30,7 @@ class Staff; class StaffAlignment; // Helper enums -enum StaffSearch { ANCESTOR_ONLY = 0, RESOLVE_CROSSSTAFF }; +enum StaffSearch { ANCESTOR_ONLY = 0, RESOLVE_CROSS_STAFF }; //---------------------------------------------------------------------------- // LayerElement diff --git a/src/accid.cpp b/src/accid.cpp index c03038170a0..a4e43397d63 100644 --- a/src/accid.cpp +++ b/src/accid.cpp @@ -121,7 +121,7 @@ std::wstring Accid::GetSymbolStr(const data_NOTATIONTYPE notationType) const void Accid::AdjustToLedgerLines(Doc *doc, LayerElement *element, int staffSize) { - Staff *staff = element->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = element->GetAncestorStaff(RESOLVE_CROSS_STAFF); Chord *chord = vrv_cast(this->GetFirstAncestor(CHORD)); if (element->Is(NOTE) && chord && chord->HasAdjacentNotesInStaff(staff)) { diff --git a/src/artic.cpp b/src/artic.cpp index 68e6f25596a..7e8d70f30a8 100644 --- a/src/artic.cpp +++ b/src/artic.cpp @@ -399,7 +399,7 @@ int Artic::AdjustArtic(FunctorParams *functorParams) int yIn, yOut, yRel; - Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSS_STAFF); Beam *beam = dynamic_cast(GetFirstAncestor(BEAM)); int staffYBottom = -params->m_doc->GetDrawingStaffSize(staff->m_drawingStaffSize); diff --git a/src/chord.cpp b/src/chord.cpp index 89d35b53b3a..1e6be2e691d 100644 --- a/src/chord.cpp +++ b/src/chord.cpp @@ -536,7 +536,7 @@ std::list Chord::GetAdjacentNotesList(Staff *staff, int loc) Note *note = vrv_cast(obj); assert(note); - Staff *noteStaff = note->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *noteStaff = note->GetAncestorStaff(RESOLVE_CROSS_STAFF); if (noteStaff != staff) continue; const int locDiff = note->GetDrawingLoc() - loc; @@ -743,7 +743,7 @@ MapOfNoteLocs Chord::CalcNoteLocations(NotePredicate predicate) if (predicate && !predicate(note)) continue; - Staff *staff = note->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = note->GetAncestorStaff(RESOLVE_CROSS_STAFF); noteLocations[staff].insert(note->GetDrawingLoc()); } @@ -911,7 +911,7 @@ int Chord::AdjustCrossStaffContent(FunctorParams *functorParams) // Check if chord spreads across several staves std::list extremalStaves; for (Note *note : { this->GetTopNote(), this->GetBottomNote() }) { - Staff *staff = note->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = note->GetAncestorStaff(RESOLVE_CROSS_STAFF); extremalStaves.push_back(staff); } assert(extremalStaves.size() == 2); diff --git a/src/horizontalaligner.cpp b/src/horizontalaligner.cpp index 5a30fd054f0..1e36fd692de 100644 --- a/src/horizontalaligner.cpp +++ b/src/horizontalaligner.cpp @@ -1163,7 +1163,7 @@ int Alignment::AdjustDotsEnd(FunctorParams *functorParams) // otherwise they should be kept separate for (auto dot : params->m_dots) { // A third staff size will be used as required margin - const Staff *staff = dot->GetAncestorStaff(RESOLVE_CROSSSTAFF); + const Staff *staff = dot->GetAncestorStaff(RESOLVE_CROSS_STAFF); const int staffSize = staff->m_drawingStaffSize; const int thirdUnit = params->m_doc->GetDrawingUnit(staffSize) / 3; @@ -1337,7 +1337,7 @@ int AlignmentReference::AdjustLayersEnd(FunctorParams *functorParams) // Determine staff if (params->m_current.empty()) return FUNCTOR_CONTINUE; LayerElement *firstElem = params->m_current.at(0); - Staff *staff = firstElem->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = firstElem->GetAncestorStaff(RESOLVE_CROSS_STAFF); const int extension = params->m_doc->GetDrawingLedgerLineExtension(staff->m_drawingStaffSize, firstElem->GetDrawingCueSize()); diff --git a/src/layer.cpp b/src/layer.cpp index 38142b0fb9e..f0cf7dd5da3 100644 --- a/src/layer.cpp +++ b/src/layer.cpp @@ -308,7 +308,7 @@ std::set Layer::GetLayersNForTimeSpanOf(LayerElement *element) Alignment *alignment = element->GetAlignment(); assert(alignment); - Staff *staff = element->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = element->GetAncestorStaff(RESOLVE_CROSS_STAFF); return this->GetLayersNInTimeSpan(alignment->GetTime(), element->GetAlignmentDuration(), measure, staff->GetN()); } @@ -376,7 +376,7 @@ ListOfObjects Layer::GetLayerElementsForTimeSpanOf(LayerElement *element, bool e return {}; } - Staff *staff = element->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = element->GetAncestorStaff(RESOLVE_CROSS_STAFF); return GetLayerElementsInTimeSpan(time, duration, measure, staff->GetN(), excludeCurrent); } diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 7d23704b42a..e1fdc978a16 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -245,7 +245,7 @@ int LayerElement::GetOriginalLayerN() Staff *LayerElement::GetAncestorStaff(const StaffSearch strategy, const bool assertExistence) const { Staff *staff = NULL; - if (strategy == RESOLVE_CROSSSTAFF) { + if (strategy == RESOLVE_CROSS_STAFF) { Layer *layer = NULL; staff = this->GetCrossStaff(layer); } @@ -281,7 +281,7 @@ data_STAFFREL_basic LayerElement::GetCrossStaffRel() void LayerElement::GetOverflowStaffAlignments(StaffAlignment *&above, StaffAlignment *&below) { - Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSS_STAFF); // By default use the alignment of the staff above = staff->GetAlignment(); @@ -2369,15 +2369,15 @@ int LayerElement::FindSpannedLayerElements(FunctorParams *functorParams) // Skip elements aligned at start/end, but on a different staff if ((this->GetAlignment() == start->GetAlignment()) && !start->Is(TIMESTAMP_ATTR)) { - Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); - Staff *startStaff = start->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSS_STAFF); + Staff *startStaff = start->GetAncestorStaff(RESOLVE_CROSS_STAFF); if (staff->GetN() != startStaff->GetN()) { return FUNCTOR_CONTINUE; } } if ((this->GetAlignment() == end->GetAlignment()) && !end->Is(TIMESTAMP_ATTR)) { - Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); - Staff *endStaff = end->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSS_STAFF); + Staff *endStaff = end->GetAncestorStaff(RESOLVE_CROSS_STAFF); if (staff->GetN() != endStaff->GetN()) { return FUNCTOR_CONTINUE; } @@ -2566,7 +2566,7 @@ int LayerElement::PrepareDuration(FunctorParams *functorParams) durInterface->SetDurDefault(params->m_durDefault); // Check if there is a duration default for the staff if (!params->m_durDefaultForStaffN.empty()) { - Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSS_STAFF); if (params->m_durDefaultForStaffN.count(staff->GetN()) > 0) { durInterface->SetDurDefault(params->m_durDefaultForStaffN.at(staff->GetN())); } diff --git a/src/note.cpp b/src/note.cpp index a044a3cf9f5..a1f791e82af 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -1029,7 +1029,7 @@ int Note::CalcChordNoteHeads(FunctorParams *functorParams) FunctorDocParams *params = vrv_params_cast(functorParams); assert(params); - Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSS_STAFF); const int staffSize = staff->m_drawingStaffSize; bool mixedCue = false; @@ -1100,7 +1100,7 @@ MapOfNoteLocs Note::CalcNoteLocations(NotePredicate predicate) { if (predicate && !predicate(this)) return {}; - Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSS_STAFF); MapOfNoteLocs noteLocations; noteLocations[staff] = { this->GetDrawingLoc() }; @@ -1135,7 +1135,7 @@ int Note::CalcDots(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSS_STAFF); const int staffSize = staff->m_drawingStaffSize; const bool drawingCueSize = this->GetDrawingCueSize(); @@ -1203,7 +1203,7 @@ int Note::CalcLedgerLines(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSS_STAFF); const int staffSize = staff->m_drawingStaffSize; const int staffX = staff->GetDrawingX(); const bool drawingCueSize = this->GetDrawingCueSize(); diff --git a/src/rest.cpp b/src/rest.cpp index d70671ce93c..8c997932944 100644 --- a/src/rest.cpp +++ b/src/rest.cpp @@ -607,7 +607,7 @@ int Rest::CalcDots(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - Staff *staff = this->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *staff = this->GetAncestorStaff(RESOLVE_CROSS_STAFF); const bool drawingCueSize = this->GetDrawingCueSize(); const int staffSize = staff->m_drawingStaffSize; diff --git a/src/slur.cpp b/src/slur.cpp index 138428a0c1f..5aca94d57ce 100644 --- a/src/slur.cpp +++ b/src/slur.cpp @@ -163,8 +163,8 @@ std::vector Slur::CollectSpannedElements(Staff *staff, int xMin, std::set staffNumbers; staffNumbers.emplace(staff->GetN()); - Staff *startStaff = this->GetStart()->GetAncestorStaff(RESOLVE_CROSSSTAFF, false); - Staff *endStaff = this->GetEnd()->GetAncestorStaff(RESOLVE_CROSSSTAFF, false); + Staff *startStaff = this->GetStart()->GetAncestorStaff(RESOLVE_CROSS_STAFF, false); + Staff *endStaff = this->GetEnd()->GetAncestorStaff(RESOLVE_CROSS_STAFF, false); if (startStaff && (startStaff != staff)) { staffNumbers.emplace(startStaff->GetN()); } @@ -273,7 +273,7 @@ Staff *Slur::CalculateExtremalStaff(Staff *staff, int xMin, int xMax, char spann // The floating curve positioner of cross staff slurs should live in the upper/lower staff alignment // corresponding to whether the slur is curved above/below auto adaptStaff = [&extremalStaff, curveDir](LayerElement *element) { - Staff *elementStaff = element->GetAncestorStaff(RESOLVE_CROSSSTAFF); + Staff *elementStaff = element->GetAncestorStaff(RESOLVE_CROSS_STAFF); if ((curveDir == curvature_CURVEDIR_above) && (elementStaff->GetN() < extremalStaff->GetN())) { extremalStaff = elementStaff; } diff --git a/src/view_slur.cpp b/src/view_slur.cpp index 07f51fed6c2..ecea84726d8 100644 --- a/src/view_slur.cpp +++ b/src/view_slur.cpp @@ -182,8 +182,8 @@ float View::CalcInitialSlur( const std::vector elements = slur->CollectSpannedElements(staff, bezier.p1.x, bezier.p2.x, curve->GetSpanningType()); - Staff *startStaff = slur->GetStart()->GetAncestorStaff(RESOLVE_CROSSSTAFF, false); - Staff *endStaff = slur->GetEnd()->GetAncestorStaff(RESOLVE_CROSSSTAFF, false); + Staff *startStaff = slur->GetStart()->GetAncestorStaff(RESOLVE_CROSS_STAFF, false); + Staff *endStaff = slur->GetEnd()->GetAncestorStaff(RESOLVE_CROSS_STAFF, false); curve->ClearSpannedElements(); for (auto element : elements) { From 498fb8be9a83a7903a9a5f9ab14dab99d20f717a Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 24 Jan 2022 18:39:32 +0100 Subject: [PATCH 116/403] Update changelog [skip-ci] --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cbaeed5eddc..61d9ec593fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ ## [unreleased] * Support for `beatRpt@beatdef` * Support for `scoreDef` and `staffDef` `@dur.default` (@eNote-GmBH) +* Support for MIDI output of grace notes (@eNote-GmBH) +* Improved tablature MIDI output (@paul-bayleaf) +* Preliminary support for tablature MusicXML import (@paul-bayleaf) ## [3.8.1] - 2022-01-10 * Fix bug in PAE importer for durations and for key signatures From e18bbc1b5b7a37d06b8b3e017ab75e2a4e77e509 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 25 Jan 2022 08:25:42 +0100 Subject: [PATCH 117/403] Add Note member and helpers --- include/vrv/note.h | 19 +++++++++++++++++++ src/note.cpp | 2 ++ 2 files changed, 21 insertions(+) diff --git a/include/vrv/note.h b/include/vrv/note.h index ae131487a7b..dc4230276d2 100644 --- a/include/vrv/note.h +++ b/include/vrv/note.h @@ -232,6 +232,14 @@ class Note : public LayerElement, */ int GetMIDIPitch(int shift = 0); + /** + * @name Checker and getter for a note with which the stem is shared + */ + ///@{ + bool HasStemSameasNote() const { return (m_stemSameas); } + Note *GetStemSameasNote() const { return m_stemSameas; } + ///@} + public: //----------------// // Static methods // @@ -414,6 +422,17 @@ class Note : public LayerElement, * indicate that it should not be written to MIDI output. */ double m_scoreTimeTiedDuration; + + /** + * A pointer to a note with which the note shares its stem and implementing @stem.sameas. + * The other note is always the one with the stem going outward (up or down). This means + * that the note pointing to it will have a stem linking the two notes. + * The current implementation requires the notes with the @stem.sameas to be in a lower layer. + * The note in the upper layer has no attribute. By default, stems go up but the @stem.dir + * value is supported. If the stem is going down, the upper note will have a m_stemSameas Note. + * It means that the pointing note is not necessary the note carrying the @stem.sameas. + */ + Note *m_stemSameas; }; //---------------------------------------------------------------------------- diff --git a/src/note.cpp b/src/note.cpp index a1f791e82af..d4070c8607b 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -123,6 +123,8 @@ void Note::Reset() m_realTimeOnsetMilliseconds = 0; m_realTimeOffsetMilliseconds = 0; m_scoreTimeTiedDuration = 0.0; + + m_stemSameas = NULL; } bool Note::IsSupportedChild(Object *child) From 26e871b94cb9160632c7a44f63812792a77cee72 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 25 Jan 2022 09:32:45 +0100 Subject: [PATCH 118/403] Add m_stemSameasNotes the BeamInterface --- include/vrv/drawinginterface.h | 12 ++++++++++++ src/drawinginterface.cpp | 2 ++ 2 files changed, 14 insertions(+) diff --git a/include/vrv/drawinginterface.h b/include/vrv/drawinginterface.h index dd8eca9c700..0866018c070 100644 --- a/include/vrv/drawinginterface.h +++ b/include/vrv/drawinginterface.h @@ -132,6 +132,14 @@ class BeamDrawingInterface : public ObjectListInterface { */ void ClearCoords(); + /** + * @name Setter and getter for the stemSameasNote flag + */ + ///@{ + void SetStemSameasNotes(bool stemSameasNotes) { m_stemSameAsNotes = stemSameasNotes; } + bool GetStemSameasNotes() const { return m_stemSameAsNotes; } + ///@} + protected: /** * Return the position of the element in the beam. @@ -166,6 +174,10 @@ class BeamDrawingInterface : public ObjectListInterface { * An array of coordinates for each element **/ ArrayOfBeamElementCoords m_beamElementCoords; + +private: + /** A flag indicating that we have notes with stem shared and that it should not be drawn */ + bool m_stemSameAsNotes; }; //---------------------------------------------------------------------------- diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index 141ce8a2bd7..03eec7e3a20 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -92,6 +92,8 @@ void BeamDrawingInterface::Reset() m_beamWidth = 0; m_beamWidthBlack = 0; m_beamWidthWhite = 0; + + m_stemSameAsNotes = false; } int BeamDrawingInterface::GetTotalBeamWidth() const From 24c1a72ecaf0ef3955a40633397d57bf37e11e5e Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 25 Jan 2022 10:42:42 +0100 Subject: [PATCH 119/403] Restructure code in AlignMeasures --- include/vrv/functorparams.h | 4 ++++ include/vrv/measure.h | 5 +++++ include/vrv/section.h | 5 +++++ src/measure.cpp | 17 +++++++++-------- src/scoredef.cpp | 12 ++++++------ src/section.cpp | 12 ++++++++++++ 6 files changed, 41 insertions(+), 14 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 87251d1bd05..2a6a1daa8e6 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -804,6 +804,8 @@ class AlignHorizontallyParams : public FunctorParams { /** * member 0: the cumulated shift * member 1: the cumulated justifiable width + * member 2: shift next measure due to section restart + * member 3: the doc **/ class AlignMeasuresParams : public FunctorParams { @@ -812,11 +814,13 @@ class AlignMeasuresParams : public FunctorParams { { m_shift = 0; m_justifiableWidth = 0; + m_applySectionRestartShift = false; m_doc = doc; } int m_shift; int m_justifiableWidth; + bool m_applySectionRestartShift; Doc *m_doc; }; diff --git a/include/vrv/measure.h b/include/vrv/measure.h index 03efa458ebc..ab17c80da87 100644 --- a/include/vrv/measure.h +++ b/include/vrv/measure.h @@ -203,6 +203,11 @@ class Measure : public Object, */ int GetDrawingOverflow(); + /** + * Calculates the section restart shift + */ + int GetSectionRestartShift(Doc *doc) const; + /** * @name Setter and getter of the drawing scoreDef */ diff --git a/include/vrv/section.h b/include/vrv/section.h index 604afa6a18e..85fb90fe005 100644 --- a/include/vrv/section.h +++ b/include/vrv/section.h @@ -71,6 +71,11 @@ class Section : public SystemElement, public SystemMilestoneInterface, public At */ int ResetDrawing(FunctorParams *functorParams) override; + /** + * See Object::AlignMeasures + */ + int AlignMeasures(FunctorParams *functorParams) override; + private: // public: diff --git a/src/measure.cpp b/src/measure.cpp index f6d85f533c8..ecd0cfe6b48 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -362,6 +362,11 @@ int Measure::GetDrawingOverflow() return std::max(0, overflow); } +int Measure::GetSectionRestartShift(Doc *doc) const +{ + return 5 * doc->GetDrawingDoubleUnit(100); +} + void Measure::SetDrawingScoreDef(ScoreDef *drawingScoreDef) { assert(!m_drawingScoreDef); // We should always call UnscoreDefSetCurrent before @@ -1169,16 +1174,12 @@ int Measure::AlignMeasures(FunctorParams *functorParams) AlignMeasuresParams *params = vrv_params_cast(functorParams); assert(params); - assert(this->GetParent()); - Object *object = this->GetParent()->GetPrevious(this); - if (object && object->Is(SECTION)) { - Section *section = vrv_cast
(object); - if (section && (section->GetRestart() == BOOLEAN_true)) { - params->m_shift += 5 * params->m_doc->GetDrawingDoubleUnit(100); - } + if (params->m_applySectionRestartShift) { + params->m_shift += this->GetSectionRestartShift(params->m_doc); + params->m_applySectionRestartShift = false; } - SetDrawingXRel(params->m_shift); + this->SetDrawingXRel(params->m_shift); params->m_shift += this->GetWidth(); params->m_justifiableWidth += this->GetRightBarLineXRel() - this->GetLeftBarLineXRel(); diff --git a/src/scoredef.cpp b/src/scoredef.cpp index beab7d501c0..d64a0d1e9dd 100644 --- a/src/scoredef.cpp +++ b/src/scoredef.cpp @@ -591,13 +591,13 @@ int ScoreDef::AlignMeasures(FunctorParams *functorParams) AlignMeasuresParams *params = vrv_params_cast(functorParams); assert(params); - // SetDrawingXRel(m_systemLeftMar + this->GetDrawingWidth()); params->m_shift += m_drawingLabelsWidth; - if (this->IsSectionRestart()) { - const bool hasLabel - = (NULL != this->FindDescendantByType(LABEL)) || (NULL != this->FindDescendantByType(LABELABBR)); - // Add space if we have no label/labelAbbr and no grpSym - if (!hasLabel) params->m_shift += 5 * params->m_doc->GetDrawingDoubleUnit(100); + + if (params->m_applySectionRestartShift) { + ClassIdsComparison comparison({ LABEL, LABELABBR }); + if (this->FindDescendantByComparison(&comparison)) { + params->m_applySectionRestartShift = false; + } } return FUNCTOR_CONTINUE; diff --git a/src/section.cpp b/src/section.cpp index 54e596b4468..b6efcec923f 100644 --- a/src/section.cpp +++ b/src/section.cpp @@ -126,4 +126,16 @@ int Section::ResetDrawing(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int Section::AlignMeasures(FunctorParams *functorParams) +{ + AlignMeasuresParams *params = vrv_params_cast(functorParams); + assert(params); + + if (this->GetRestart() == BOOLEAN_true) { + params->m_applySectionRestartShift = true; + } + + return FUNCTOR_CONTINUE; +} + } // namespace vrv From da1a0aab39476a2f329986d955faa4e9eee24fc9 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Tue, 25 Jan 2022 11:07:05 +0100 Subject: [PATCH 120/403] better use of pugixml --- src/iomei.cpp | 24 ++++++++++++------------ src/vrv.cpp | 26 +++++++++++++------------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/iomei.cpp b/src/iomei.cpp index fccd47cde98..4677df73a03 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -3634,27 +3634,27 @@ bool MEIInput::ReadPage(Object *parent, pugi::xml_node page) } if (page.attribute("page.height")) { - vrvPage->m_pageHeight = atoi(page.attribute("page.height").value()) * DEFINITION_FACTOR; + vrvPage->m_pageHeight = page.attribute("page.height").as_int() * DEFINITION_FACTOR; page.remove_attribute("page.height"); } if (page.attribute("page.width")) { - vrvPage->m_pageWidth = atoi(page.attribute("page.width").value()) * DEFINITION_FACTOR; + vrvPage->m_pageWidth = page.attribute("page.width").as_int() * DEFINITION_FACTOR; page.remove_attribute("page.width"); } if (page.attribute("page.botmar")) { - vrvPage->m_pageMarginBottom = atoi(page.attribute("page.botmar").value()) * DEFINITION_FACTOR; + vrvPage->m_pageMarginBottom = page.attribute("page.botmar").as_int() * DEFINITION_FACTOR; page.remove_attribute("page.botmar"); } if (page.attribute("page.leftmar")) { - vrvPage->m_pageMarginLeft = atoi(page.attribute("page.leftmar").value()) * DEFINITION_FACTOR; + vrvPage->m_pageMarginLeft = page.attribute("page.leftmar").as_int() * DEFINITION_FACTOR; page.remove_attribute("page.leftmar"); } if (page.attribute("page.rightmar")) { - vrvPage->m_pageMarginRight = atoi(page.attribute("page.rightmar").value()) * DEFINITION_FACTOR; + vrvPage->m_pageMarginRight = page.attribute("page.rightmar").as_int() * DEFINITION_FACTOR; page.remove_attribute("page.rightmar"); } if (page.attribute("page.topmar")) { - vrvPage->m_pageMarginTop = atoi(page.attribute("page.topmar").value()) * DEFINITION_FACTOR; + vrvPage->m_pageMarginTop = page.attribute("page.topmar").as_int() * DEFINITION_FACTOR; page.remove_attribute("page.topmar"); } if (page.attribute("surface")) { @@ -3662,7 +3662,7 @@ bool MEIInput::ReadPage(Object *parent, pugi::xml_node page) page.remove_attribute("surface"); } if (page.attribute("ppu")) { - vrvPage->m_PPUFactor = atof(page.attribute("ppu").value()); + vrvPage->m_PPUFactor = page.attribute("ppu").as_float(); } parent->AddChild(vrvPage); @@ -4035,15 +4035,15 @@ bool MEIInput::ReadSystem(Object *parent, pugi::xml_node system) vrvSystem->ReadTyped(system); if (system.attribute("system.leftmar")) { - vrvSystem->m_systemLeftMar = atoi(system.attribute("system.leftmar").value()); + vrvSystem->m_systemLeftMar = system.attribute("system.leftmar").as_int(); system.remove_attribute("system.leftmar"); } if (system.attribute("system.rightmar")) { - vrvSystem->m_systemRightMar = atoi(system.attribute("system.rightmar").value()); + vrvSystem->m_systemRightMar = system.attribute("system.rightmar").as_int(); system.remove_attribute("system.rightmar"); } if (system.attribute("uly") && (m_doc->GetType() == Transcription)) { - vrvSystem->m_yAbs = atoi(system.attribute("uly").value()) * DEFINITION_FACTOR; + vrvSystem->m_yAbs = system.attribute("uly").as_int() * DEFINITION_FACTOR; system.remove_attribute("uly"); } @@ -7183,10 +7183,10 @@ bool MEIInput::ReadTupletSpanAsTuplet(Measure *measure, pugi::xml_node tupletSpa // att.duration.ratio if (tupletSpan.attribute("num")) { - tuplet->SetNum(atoi(tupletSpan.attribute("num").value())); + tuplet->SetNum(tupletSpan.attribute("num").as_int()); } if (tupletSpan.attribute("numbase")) { - tuplet->SetNumbase(atoi(tupletSpan.attribute("numbase").value())); + tuplet->SetNumbase(tupletSpan.attribute("numbase").as_int()); } // att.tuplet.vis diff --git a/src/vrv.cpp b/src/vrv.cpp index 34ab399393e..ec97b2f6aad 100644 --- a/src/vrv.cpp +++ b/src/vrv.cpp @@ -213,7 +213,7 @@ bool Resources::LoadFont(const std::string &fontName) LogWarning("No units-per-em attribute in bouding box file"); return true; } - int unitsPerEm = atoi(root.attribute("units-per-em").value()); + const int unitsPerEm = root.attribute("units-per-em").as_int(); pugi::xml_node current; for (current = root.child("g"); current; current = current.next_sibling("g")) { Glyph *glyph = NULL; @@ -231,12 +231,12 @@ bool Resources::LoadFont(const std::string &fontName) } double x = 0.0, y = 0.0, width = 0.0, height = 0.0; // Not check for missing values... - if (current.attribute("x")) x = atof(current.attribute("x").value()); - if (current.attribute("y")) y = atof(current.attribute("y").value()); - if (current.attribute("w")) width = atof(current.attribute("w").value()); - if (current.attribute("h")) height = atof(current.attribute("h").value()); + if (current.attribute("x")) x = current.attribute("x").as_float(); + if (current.attribute("y")) y = current.attribute("y").as_float(); + if (current.attribute("w")) width = current.attribute("w").as_float(); + if (current.attribute("h")) height = current.attribute("h").as_float(); glyph->SetBoundingBox(x, y, width, height); - if (current.attribute("h-a-x")) glyph->SetHorizAdvX(atof(current.attribute("h-a-x").value())); + if (current.attribute("h-a-x")) glyph->SetHorizAdvX(current.attribute("h-a-x").as_float()); } if (!glyph) continue; @@ -247,7 +247,7 @@ bool Resources::LoadFont(const std::string &fontName) if (anchor.attribute("n")) { std::string name = std::string(anchor.attribute("n").value()); // No check for possible x and y missing attributes - not very safe. - glyph->SetAnchor(name, atof(anchor.attribute("x").value()), atof(anchor.attribute("y").value())); + glyph->SetAnchor(name, anchor.attribute("x").as_float(), anchor.attribute("y").as_float()); } } } @@ -273,7 +273,7 @@ bool Resources::InitTextFont(const std::string &fontName, const StyleAttributes LogWarning("No units-per-em attribute in bouding box file"); return false; } - int unitsPerEm = atoi(root.attribute("units-per-em").value()); + const int unitsPerEm = root.attribute("units-per-em").as_int(); pugi::xml_node current; if (s_textFont.count(style) == 0) { s_textFont[style] = GlyphMap{}; @@ -287,12 +287,12 @@ bool Resources::InitTextFont(const std::string &fontName, const StyleAttributes Glyph glyph(unitsPerEm); double x = 0.0, y = 0.0, width = 0.0, height = 0.0; // Not check for missing values... - if (current.attribute("x")) x = atof(current.attribute("x").value()); - if (current.attribute("y")) y = atof(current.attribute("y").value()); - if (current.attribute("w")) width = atof(current.attribute("w").value()); - if (current.attribute("h")) height = atof(current.attribute("h").value()); + if (current.attribute("x")) x = current.attribute("x").as_float(); + if (current.attribute("y")) y = current.attribute("y").as_float(); + if (current.attribute("w")) width = current.attribute("w").as_float(); + if (current.attribute("h")) height = current.attribute("h").as_float(); glyph.SetBoundingBox(x, y, width, height); - if (current.attribute("h-a-x")) glyph.SetHorizAdvX(atof(current.attribute("h-a-x").value())); + if (current.attribute("h-a-x")) glyph.SetHorizAdvX(current.attribute("h-a-x").as_float()); if (currentMap.count(code) > 0) { LogDebug("Redefining %d with %s", code, fontName.c_str()); } From 31ade00d1f9c1081c95398e78043a11e5099336d Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 25 Jan 2022 11:28:04 +0100 Subject: [PATCH 121/403] Add Note::ResolveStemSameas and call from Object::PrepareLinks --- include/vrv/functorparams.h | 8 ++++++-- include/vrv/note.h | 6 ++++++ include/vrv/vrvdef.h | 2 ++ src/doc.cpp | 2 +- src/note.cpp | 5 +++++ src/object.cpp | 8 ++++++++ 6 files changed, 28 insertions(+), 3 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 87251d1bd05..5d86915f4db 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1972,8 +1972,11 @@ class PrepareLyricsParams : public FunctorParams { //---------------------------------------------------------------------------- /** - * member 0: ArrayOfInterfaceUuidPairs holds the interface / uuid pairs to match - * member 1: bool* fillList for indicating whether the pairs have to be stacked or not + * member 0: MapOfLinkingInterfaceUuidPairs holds the interface / uuid pairs to match for links + * member 1: MapOfLinkingInterfaceUuidPairs holds the interface / uuid pairs to match for sameas + * member 2: MapOfNoteUuidPairs holds the note / uuid pairs to match for stem.sameas + * member 3: bool* fillList for indicating whether the pairs have to be stacked or not + * **/ class PrepareLinkingParams : public FunctorParams { @@ -1981,6 +1984,7 @@ class PrepareLinkingParams : public FunctorParams { PrepareLinkingParams() { m_fillList = true; } MapOfLinkingInterfaceUuidPairs m_nextUuidPairs; MapOfLinkingInterfaceUuidPairs m_sameasUuidPairs; + MapOfNoteUuidPairs m_stemSameasUuidPairs; bool m_fillList; }; diff --git a/include/vrv/note.h b/include/vrv/note.h index dc4230276d2..5374f006995 100644 --- a/include/vrv/note.h +++ b/include/vrv/note.h @@ -30,6 +30,7 @@ namespace vrv { class Accid; class Chord; class Note; +class PrepareLinkingParams; class Slur; class TabGrp; class Tie; @@ -240,6 +241,11 @@ class Note : public LayerElement, Note *GetStemSameasNote() const { return m_stemSameas; } ///@} + /** + * + */ + void ResolveStemSameas(PrepareLinkingParams *params); + public: //----------------// // Static methods // diff --git a/include/vrv/vrvdef.h b/include/vrv/vrvdef.h index d234364bbb6..9925c2123f2 100644 --- a/include/vrv/vrvdef.h +++ b/include/vrv/vrvdef.h @@ -325,6 +325,8 @@ typedef std::vector> ArrayOfIntPairs; typedef std::multimap MapOfLinkingInterfaceUuidPairs; +typedef std::map MapOfNoteUuidPairs; + typedef std::vector> ArrayOfPlistInterfaceUuidPairs; typedef std::vector ArrayOfCurveSpannedElements; diff --git a/src/doc.cpp b/src/doc.cpp index f266071b504..419d0ec3754 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -578,7 +578,7 @@ void Doc::PrepareDrawing() /************ Resolve linking (@next) ************/ - // Try to match all pointing elements using @next and @sameas + // Try to match all pointing elements using @next, @sameas and @stem.sameas PrepareLinkingParams prepareLinkingParams; Functor prepareLinking(&Object::PrepareLinking); this->Process(&prepareLinking, &prepareLinkingParams); diff --git a/src/note.cpp b/src/note.cpp index d4070c8607b..f39bf35aa9d 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -551,6 +551,11 @@ bool Note::IsVisible() const return true; } +void Note::ResolveStemSameas(PrepareLinkingParams *params) +{ + assert(params); +} + bool Note::IsEnharmonicWith(Note *note) { return (this->GetMIDIPitch() == note->GetMIDIPitch()); diff --git a/src/object.cpp b/src/object.cpp index ac34038887b..6c7eaee9dad 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -1526,6 +1526,14 @@ int Object::PrepareLinking(FunctorParams *functorParams) interface->InterfacePrepareLinking(functorParams, this); } + if (params->m_fillList && this->Is(NOTE)) { + Note *note = vrv_cast(this); + assert(note); + PrepareLinkingParams *params = vrv_params_cast(functorParams); + assert(params); + note->ResolveStemSameas(params); + } + // @next std::string uuid = this->GetUuid(); auto r1 = params->m_nextUuidPairs.equal_range(uuid); From 85b17c4ba81d7b52c822e5955acd1b4ab3c742b4 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 25 Jan 2022 11:31:50 +0100 Subject: [PATCH 122/403] Add handling to JustifyX --- include/vrv/functorparams.h | 16 ++++++++++------ include/vrv/section.h | 5 +++++ src/measure.cpp | 7 ++++++- src/scoredef.cpp | 5 ++++- src/section.cpp | 12 ++++++++++++ 5 files changed, 37 insertions(+), 8 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 2a6a1daa8e6..307c0111b8e 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1708,12 +1708,14 @@ class GetRelativeLayerElementParams : public FunctorParams { //---------------------------------------------------------------------------- /** - * member 0: the justification ratio - * member 1: the justification ratio for the measure (depends on the margin) - * member 2: the non justifiable margin - * member 3: the system full width (without system margins) - * member 4: the functor to be redirected to the MeasureAligner - * member 5: the doc + * member 0: the relative X position of the next measure + * member 1: the justification ratio + * member 2: the left barline X position + * member 3: the right barline X position + * member 4: the system full width (without system margins) + * member 5: shift next measure due to section restart + * member 6: the functor to be redirected to the MeasureAligner + * member 7: the doc **/ class JustifyXParams : public FunctorParams { @@ -1725,6 +1727,7 @@ class JustifyXParams : public FunctorParams { m_leftBarLineX = 0; m_rightBarLineX = 0; m_systemFullWidth = 0; + m_applySectionRestartShift = false; m_functor = functor; m_doc = doc; } @@ -1733,6 +1736,7 @@ class JustifyXParams : public FunctorParams { int m_leftBarLineX; int m_rightBarLineX; int m_systemFullWidth; + bool m_applySectionRestartShift; Functor *m_functor; Doc *m_doc; }; diff --git a/include/vrv/section.h b/include/vrv/section.h index 85fb90fe005..7ee489d5a98 100644 --- a/include/vrv/section.h +++ b/include/vrv/section.h @@ -76,6 +76,11 @@ class Section : public SystemElement, public SystemMilestoneInterface, public At */ int AlignMeasures(FunctorParams *functorParams) override; + /** + * See Object::JustifyX + */ + int JustifyX(FunctorParams *functorParams) override; + private: // public: diff --git a/src/measure.cpp b/src/measure.cpp index ecd0cfe6b48..a18ffca3372 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -1157,8 +1157,13 @@ int Measure::JustifyX(FunctorParams *functorParams) JustifyXParams *params = vrv_params_cast(functorParams); assert(params); + if (params->m_applySectionRestartShift) { + params->m_measureXRel += this->GetSectionRestartShift(params->m_doc); + params->m_applySectionRestartShift = false; + } + if (params->m_measureXRel > 0) { - SetDrawingXRel(params->m_measureXRel); + this->SetDrawingXRel(params->m_measureXRel); } else { params->m_measureXRel = GetDrawingXRel(); diff --git a/src/scoredef.cpp b/src/scoredef.cpp index d64a0d1e9dd..b56d3dfae68 100644 --- a/src/scoredef.cpp +++ b/src/scoredef.cpp @@ -608,7 +608,10 @@ int ScoreDef::JustifyX(FunctorParams *functorParams) JustifyXParams *params = vrv_params_cast(functorParams); assert(params); - params->m_measureXRel += m_drawingLabelsWidth; + if (m_drawingLabelsWidth > 0) { + params->m_measureXRel += m_drawingLabelsWidth; + params->m_applySectionRestartShift = false; + } return FUNCTOR_SIBLINGS; } diff --git a/src/section.cpp b/src/section.cpp index b6efcec923f..1c858716568 100644 --- a/src/section.cpp +++ b/src/section.cpp @@ -138,4 +138,16 @@ int Section::AlignMeasures(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int Section::JustifyX(FunctorParams *functorParams) +{ + JustifyXParams *params = vrv_params_cast(functorParams); + assert(params); + + if (this->GetRestart() == BOOLEAN_true) { + params->m_applySectionRestartShift = true; + } + + return FUNCTOR_CONTINUE; +} + } // namespace vrv From 3bab1be9338f2ab0e308ff031366fb7e720a776b Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 25 Jan 2022 11:58:11 +0100 Subject: [PATCH 123/403] Implement Note::ResolveStemSameas --- include/vrv/note.h | 3 ++- src/note.cpp | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/include/vrv/note.h b/include/vrv/note.h index 5374f006995..cc96ae70588 100644 --- a/include/vrv/note.h +++ b/include/vrv/note.h @@ -234,11 +234,12 @@ class Note : public LayerElement, int GetMIDIPitch(int shift = 0); /** - * @name Checker and getter for a note with which the stem is shared + * @name Checker, getter and setter for a note with which the stem is shared */ ///@{ bool HasStemSameasNote() const { return (m_stemSameas); } Note *GetStemSameasNote() const { return m_stemSameas; } + void SetStemSameasNote(Note *stemSameas) { m_stemSameas = stemSameas; } ///@} /** diff --git a/src/note.cpp b/src/note.cpp index f39bf35aa9d..f0a2f8198b3 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -554,6 +554,33 @@ bool Note::IsVisible() const void Note::ResolveStemSameas(PrepareLinkingParams *params) { assert(params); + + // First pass we fill m_stemSameasUuidPairs + if (params->m_fillList) { + if (this->HasStemSameas()) { + std::string uuidTarget = ExtractUuidFragment(this->GetStemSameas()); + params->m_stemSameasUuidPairs[uuidTarget] = this; + } + } + // Second pass we resolve links + else { + const std::string uuid = this->GetUuid(); + if (params->m_stemSameasUuidPairs.count(uuid)) { + Note *noteWithStemSameas = params->m_stemSameasUuidPairs.at(uuid); + // By default (stem up) the pointing note is the one with @stem.sameas (lower) + Note *targetNote = noteWithStemSameas; + if (this->HasStemDir() && this->GetStemDir() == STEMDIRECTION_down) { + this->SetStemSameasNote(noteWithStemSameas); + targetNote = this; + } + else { + noteWithStemSameas->SetStemSameasNote(this); + } + Beam *beam = targetNote->IsInBeam(); + if (beam) beam->SetStemSameasNotes(true); + params->m_stemSameasUuidPairs.erase(uuid); + } + } } bool Note::IsEnharmonicWith(Note *note) From ba6877ca08c88c2ca0c388f6108af0951a11f8ce Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 25 Jan 2022 13:46:46 +0100 Subject: [PATCH 124/403] Disable layer adjustment when stemSameasNote is given --- include/vrv/chord.h | 4 ++-- include/vrv/functorparams.h | 5 ++++- include/vrv/layerelement.h | 4 ++-- src/chord.cpp | 2 +- src/layerelement.cpp | 13 ++++++++++--- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/include/vrv/chord.h b/include/vrv/chord.h index 1d7fcf624ed..fd96db347c9 100644 --- a/include/vrv/chord.h +++ b/include/vrv/chord.h @@ -154,8 +154,8 @@ class Chord : public LayerElement, * Helper to adjust overlapping layers for chords * Returns the shift of the adjustment */ - int AdjustOverlappingLayers( - Doc *doc, const std::vector &otherElements, bool areDotsAdjusted, bool &isUnison) override; + int AdjustOverlappingLayers(Doc *doc, const std::vector &otherElements, bool areDotsAdjusted, + bool &isUnison, bool &stemSameas) override; /** * Helper to get list of notes that are adjacent to the specified location. diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 5d86915f4db..62b0a07872d 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -462,7 +462,8 @@ class AdjustHarmGrpsSpacingParams : public FunctorParams { * member 5: a pointer to the functor for passing it to the system aligner * member 6: a pointer to the end functor for passing it to the system aligner * member 7: flag whether element is in unison - * member 8: the total shift of the current note or chord + * member 8: flag whether element (note) has as stem same as note + * member 9: the total shift of the current note or chord **/ class AdjustLayersParams : public FunctorParams { @@ -476,6 +477,7 @@ class AdjustLayersParams : public FunctorParams { m_staffNs = staffNs; m_unison = false; m_ignoreDots = true; + m_stemSameas = false; m_accumulatedShift = 0; } std::vector m_staffNs; @@ -487,6 +489,7 @@ class AdjustLayersParams : public FunctorParams { Functor *m_functorEnd; bool m_unison; bool m_ignoreDots; + bool m_stemSameas; int m_accumulatedShift; }; diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index 94a8cc5ea7f..b38cccfc2d1 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -241,8 +241,8 @@ class LayerElement : public Object, * Helper to adjust overlapping layers for notes, chords, stems, etc. * Returns the shift of the adjustment */ - virtual int AdjustOverlappingLayers( - Doc *doc, const std::vector &otherElements, bool areDotsAdjusted, bool &isUnison); + virtual int AdjustOverlappingLayers(Doc *doc, const std::vector &otherElements, + bool areDotsAdjusted, bool &isUnison, bool &stemSameAs); /** * Calculate note horizontal overlap with elemenents from another layers. Returns overlapMargin and index of other diff --git a/src/chord.cpp b/src/chord.cpp index 1e6be2e691d..4f263882631 100644 --- a/src/chord.cpp +++ b/src/chord.cpp @@ -478,7 +478,7 @@ bool Chord::HasNoteWithDots() } int Chord::AdjustOverlappingLayers( - Doc *doc, const std::vector &otherElements, bool areDotsAdjusted, bool &isUnison) + Doc *doc, const std::vector &otherElements, bool areDotsAdjusted, bool &isUnison, bool &stemSameas) { int margin = 0; // get positions of other elements diff --git a/src/layerelement.cpp b/src/layerelement.cpp index e1fdc978a16..9ed1cbcb52c 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -1542,15 +1542,15 @@ int LayerElement::AdjustLayers(FunctorParams *functorParams) // We are processing the first layer, nothing to do yet if (params->m_previous.empty()) return FUNCTOR_SIBLINGS; - const int shift - = AdjustOverlappingLayers(params->m_doc, params->m_previous, !params->m_ignoreDots, params->m_unison); + const int shift = AdjustOverlappingLayers( + params->m_doc, params->m_previous, !params->m_ignoreDots, params->m_unison, params->m_stemSameas); params->m_accumulatedShift += shift; return FUNCTOR_SIBLINGS; } int LayerElement::AdjustOverlappingLayers( - Doc *doc, const std::vector &otherElements, bool areDotsAdjusted, bool &isUnison) + Doc *doc, const std::vector &otherElements, bool areDotsAdjusted, bool &isUnison, bool &stemSameas) { if (Is(NOTE) && GetParent()->Is(CHORD)) return 0; @@ -1558,11 +1558,18 @@ int LayerElement::AdjustOverlappingLayers( isUnison = false; return 0; } + else if (Is(STEM) && stemSameas) { + stemSameas = false; + return 0; + } auto [margin, isInUnison] = CalcElementHorizontalOverlap(doc, otherElements, areDotsAdjusted, false); if (Is(NOTE)) { isUnison = isInUnison; if (isUnison) return 0; + Note *note = vrv_cast(this); + assert(note); + stemSameas = note->HasStemSameasNote(); } if (Is({ DOTS, STEM })) { From cb18d98799cda002f9649e86eba9f3e05e7c38ea Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 25 Jan 2022 13:48:22 +0100 Subject: [PATCH 125/403] Make sure Note::ResolveStemSameas is called twice and log remaining pairs --- src/doc.cpp | 6 +++++- src/object.cpp | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/doc.cpp b/src/doc.cpp index 419d0ec3754..8fd876a87b9 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -584,7 +584,7 @@ void Doc::PrepareDrawing() this->Process(&prepareLinking, &prepareLinkingParams); // If we have some left process again backward - if (!prepareLinkingParams.m_sameasUuidPairs.empty()) { + if (!prepareLinkingParams.m_sameasUuidPairs.empty() || !prepareLinkingParams.m_stemSameasUuidPairs.empty()) { prepareLinkingParams.m_fillList = false; this->Process(&prepareLinking, &prepareLinkingParams, NULL, NULL, UNLIMITED_DEPTH, BACKWARD); } @@ -597,6 +597,10 @@ void Doc::PrepareDrawing() LogWarning( "%d element(s) with a @sameas could match the target", prepareLinkingParams.m_sameasUuidPairs.size()); } + if (!prepareLinkingParams.m_stemSameasUuidPairs.empty()) { + LogWarning("%d element(s) with a @stem.sameas could match the target", + prepareLinkingParams.m_stemSameasUuidPairs.size()); + } /************ Resolve @plist ************/ diff --git a/src/object.cpp b/src/object.cpp index 6c7eaee9dad..b822e6c60c9 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -1526,7 +1526,7 @@ int Object::PrepareLinking(FunctorParams *functorParams) interface->InterfacePrepareLinking(functorParams, this); } - if (params->m_fillList && this->Is(NOTE)) { + if (this->Is(NOTE)) { Note *note = vrv_cast(this); assert(note); PrepareLinkingParams *params = vrv_params_cast(functorParams); From 506ba016a625c43811f8a61f6c9bc2c3b66e5f34 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Tue, 25 Jan 2022 15:30:23 +0100 Subject: [PATCH 126/403] minor improvement --- src/iomusxml.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index 1ac67bda767..0a0263992ca 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -2736,17 +2736,17 @@ void MusicXmlInput::ReadMusicXmlNote( pugi::xml_node pitch = node.child("pitch"); if (pitch && !isTablature) { const std::string stepStr = pitch.child("step").text().as_string(); - const std::string alterStr = pitch.child("alter").text().as_string(); + const float alterVal = pitch.child("alter").text().as_float(); const int octaveNum = pitch.child("octave").text().as_int(); if (!stepStr.empty()) note->SetPname(ConvertStepToPitchName(stepStr)); - if (!alterStr.empty()) { + if (pitch.child("alter")) { Accid *accid = dynamic_cast(note->GetFirst(ACCID)); if (!accid) { accid = new Accid(); note->AddChild(accid); accid->IsAttribute(true); } - const data_ACCIDENTAL_GESTURAL accidGes = ConvertAlterToAccid(std::atof(alterStr.c_str())); + const data_ACCIDENTAL_GESTURAL accidGes = ConvertAlterToAccid(alterVal); if (!IsSameAccidWrittenGestural(accid->GetAccid(), accidGes)) { accid->SetAccidGes(accidGes); } @@ -3795,8 +3795,7 @@ KeySig *MusicXmlInput::ConvertKey(const pugi::xml_node &key) KeyAccid *keyAccid = new KeyAccid(); keyAccid->SetPname(ConvertStepToPitchName(keyStep.text().as_string())); if (std::strncmp(keyStep.next_sibling().name(), "key-alter", 9) == 0) { - data_ACCIDENTAL_GESTURAL accidValue - = ConvertAlterToAccid(std::atof(keyStep.next_sibling().text().as_string())); + data_ACCIDENTAL_GESTURAL accidValue = ConvertAlterToAccid(keyStep.next_sibling().text().as_float()); keyAccid->SetAccid(AreaPosInterface::AccidentalGesturalToWritten(accidValue)); if (std::strncmp(keyStep.next_sibling().next_sibling().name(), "key-accidental", 14) == 0) { keyAccid->SetAccid( @@ -4106,7 +4105,7 @@ data_PITCHNAME MusicXmlInput::ConvertStepToPitchName(const std::string &value) return result->second; } - LogWarning("MusicXML import: Unsupported pitch name '%s'", value.c_str()); + LogWarning("MusicXML import: Unsupported step value '%s'", value.c_str()); return PITCHNAME_NONE; } From 61626a5f1609b4516165a72cefa1cfa2239ff9b7 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Tue, 25 Jan 2022 15:31:28 +0100 Subject: [PATCH 127/403] don't cast to cstr --- src/iomei.cpp | 6 +++--- src/options.cpp | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/iomei.cpp b/src/iomei.cpp index 4677df73a03..f0d770ab87b 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -7399,15 +7399,15 @@ void MEIInput::UpgradeDurGesTo_4_0_0(pugi::xml_node element, DurationInterface * if (element.attribute("dur.ges")) { std::string durGes = element.attribute("dur.ges").as_string(); if (durGes.back() == 'p') { - interface->SetDurPpq(std::atoi(durGes.c_str())); + interface->SetDurPpq(std::stoi(durGes)); } else if (durGes.back() == 'r') { durGes.pop_back(); - interface->SetDurRecip(durGes.c_str()); + interface->SetDurRecip(durGes); } else if (durGes.back() == 's') { durGes.pop_back(); - interface->SetDurReal(std::atof(durGes.c_str())); + interface->SetDurReal(std::stof(durGes)); } element.remove_attribute("dur.ges"); } diff --git a/src/options.cpp b/src/options.cpp index 34071620cc3..5fb3ad9042e 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -240,7 +240,7 @@ void OptionDbl::Init(double defaultValue, double minValue, double maxValue) bool OptionDbl::SetValue(const std::string &value) { - return SetValue(atof(value.c_str())); + return SetValue(std::stof(value)); } std::string OptionDbl::GetStrValue() const @@ -303,7 +303,7 @@ bool OptionInt::SetValueDbl(double value) bool OptionInt::SetValue(const std::string &value) { - return SetValue(atoi(value.c_str())); + return SetValue(std::stoi(value)); } std::string OptionInt::GetStrValue() const From 44b3e4d438bdae82c505cfcbc26cb74316f0e1d9 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Tue, 25 Jan 2022 15:43:40 +0100 Subject: [PATCH 128/403] switch for pure python for font handling --- .gitignore | 2 - Verovio.xcodeproj/project.pbxproj | 2 +- fonts/extract-bounding-boxes.py | 256 ++++++++++++++++++++++++++ fonts/extract-glyphs-verovio-text.xsl | 39 ---- fonts/extract-glyphs.py | 128 ------------- fonts/generate-bbox.js | 112 ----------- fonts/generate-smufl-code.py | 69 ++++--- fonts/generate_all.sh | 31 +--- fonts/generate_plain_text.py | 14 ++ fonts/generate_text_font.sh | 21 +++ fonts/generate_woff.sh | 39 +--- 11 files changed, 341 insertions(+), 372 deletions(-) create mode 100644 fonts/extract-bounding-boxes.py delete mode 100644 fonts/extract-glyphs-verovio-text.xsl delete mode 100644 fonts/extract-glyphs.py delete mode 100644 fonts/generate-bbox.js create mode 100644 fonts/generate_plain_text.py create mode 100644 fonts/generate_text_font.sh diff --git a/.gitignore b/.gitignore index 659ae0e9810..d16394c1926 100644 --- a/.gitignore +++ b/.gitignore @@ -94,5 +94,3 @@ Release/ *.vcxproj* *.sln -# Fonts -fonts/tmp/ diff --git a/Verovio.xcodeproj/project.pbxproj b/Verovio.xcodeproj/project.pbxproj index 2eb88887993..b4c2e36b470 100644 --- a/Verovio.xcodeproj/project.pbxproj +++ b/Verovio.xcodeproj/project.pbxproj @@ -2208,8 +2208,8 @@ 4DA80D941A6940120089802D /* options.h */, E79ADDC626BD645B00527E4B /* runtimeclock.cpp */, E79ADDC326BD1AE900527E4B /* runtimeclock.h */, - 4D1D733B1A1D0390001E08F6 /* smufl.h */, 4D98CCDA25D26E3C00DC7A2C /* smufl.cpp */, + 4D1D733B1A1D0390001E08F6 /* smufl.h */, 8F086EBF188539540037FD8E /* toolkit.cpp */, 8F59291618854BF800FE51AD /* toolkit.h */, 4DC3B9E4239E2ABE007F185E /* transposition.cpp */, diff --git a/fonts/extract-bounding-boxes.py b/fonts/extract-bounding-boxes.py new file mode 100644 index 00000000000..9a795ddc486 --- /dev/null +++ b/fonts/extract-bounding-boxes.py @@ -0,0 +1,256 @@ +#! /usr/bin/env python3 + +import json +import os +import sys +from typing import Dict +# We can 1-to-1 replace ElementTree with lxml to support such features like +# pretty_print and retaining order of attributes during the output +# import xml.etree.ElementTree as ET +from lxml import etree as ET +from svgpathtools import Path + +# Define svg namespace +svg_ns = "http://www.w3.org/2000/svg" + +###################### +# Helper Functions # +###################### + + +def get_file_content(filepath): + """Open file in same directory as script and retrieve its content.""" + location = os.path.realpath(os.path.dirname(__file__)) + file = open(os.path.join(location, filepath), "r") + content = file.read() + file.close() + return content + + +def write_file_content(filepath, content): + """Write content to file with path relative to the script directory.""" + location = os.path.realpath(os.path.dirname(__file__)) + file = open(os.path.join(location, filepath), "w") + file.write(content) + file.close() + + +def get_svg_elements(root, tag): + """Retrieve all elements with given tag name from svg.""" + return root.findall(".//svg:" + tag, {"svg": svg_ns}) # XPath, recursive + +######################## +# Parse Fontname.svg # +######################## + + +def read_svg_font_file(font_file_name: str): + """Read SVG file which is passed as argument and retrieve information.""" + try: + font_svg_content = get_file_content(font_file_name) + except OSError: + print(f"Error opening font file {font_file_name}!") + sys.exit(1) + root = ET.fromstring(bytes(font_svg_content, encoding="utf-8")) + font_faces = get_svg_elements(root, "font-face") + if len(font_faces) != 1: + print( + f"Error: the file {font_file_name} should have a unique font-face element!") + print(f"Please check that the svg has correct namespace: {svg_ns}") + sys.exit(1) + font_family = font_faces[0].get("font-family") + units_per_em = font_faces[0].get("units-per-em") + glyphs = get_svg_elements(root, "glyph") + return (font_family, units_per_em, glyphs) + + +######################## +# Write xml glyphs # +######################## + +def write_xml_glyphs(glyphnames: Dict): + """Etracts glyphs from SVG font as specified in glyphnames.""" + rel_path = f"../data/{font_family}" + for glyph in glyphs: + glyph_code = glyph.attrib["glyph-name"][-4:] + if glyph_code not in glyphnames: + continue + root = ET.Element("symbol") + root.set("id", glyph_code) + root.set("viewBox", f"0 0 {units_per_em} {units_per_em}") + root.set("overflow", "inherit") + if "d" in glyph.attrib: + path = ET.SubElement(root, "path") + path.set("transform", "scale(1,-1)") + path.set("d", glyph.attrib["d"]) + + os.makedirs(rel_path, exist_ok=True) + file_path = f"{rel_path}/{glyph_code}.xml" + xml = ET.tostring(root, encoding="unicode") + write_file_content(file_path, xml) + +######################### +# Parse json # +######################### + + +def get_json_content(filepath: str) -> Dict: + """Retrieve dictionary with supported SMuFL codepoints and name.""" + json_content = get_file_content(filepath) + json_items = json.loads(json_content) + return json_items + +######################### +# Parse supported.xsl # +######################### + + +def get_supported_glyph_codes() -> Dict: + """Retrieve dictionary with supported SMuFL codepoints and name.""" + supported_xsl = ET.parse("supported.xsl") + glyphs = supported_xsl.findall(".//glyph") + supported_glyphs = {} + for glyph in glyphs: + supported_glyphs[glyph.attrib["glyph-code"]] = glyph.attrib["smufl-name"] + return supported_glyphs + + +######################### +# Parse font.g2n # +######################### + + +def get_text_names_to_codes(filepath: str) -> Dict: + """Retrieve dictionary mapping glyph code to SMuFL name.""" + result = {} + with open(filepath, "r") as fin: + for line in fin: + items = line.split() + # g2n file contains glyph-to-name mapping + # index 3 corresponds to glyph name, and 5 - glyph code + if len(items) == 6: + result[items[3]] = items[5] + return result + +######################### +# Extract SMUFL font # +######################### + + +def extract_smufl_font(root, metadata_file): + glyphnames = get_supported_glyph_codes() + metadata = get_json_content(metadata_file) + glyph_anchors = metadata["glyphsWithAnchors"] if "glyphsWithAnchors" in metadata else "" + + # (1) Create xml file for each glyph + write_xml_glyphs(glyphnames) + + # (2) Output bounding box svg + for glyph in glyphs: + # set glyph id + glyph_code = glyph.attrib["glyph-name"][-4:] + if glyph_code not in glyphnames: + continue + g_element = ET.SubElement(root, "g") + g_element.set("c", glyph_code) + + # set bounding box values if present + if "d" in glyph.attrib: + path = Path(glyph.attrib["d"]) + xmin, xmax, ymin, ymax = path.bbox() + g_element.set("x", str(round(xmin, 2))) + g_element.set("y", str(round(ymin, 2))) + g_element.set("w", str(round(xmax - xmin, 2))) + g_element.set("h", str(round(ymax - ymin, 2))) + else: + g_element.set("x", str(0.0)) + g_element.set("y", str(0.0)) + g_element.set("w", str(0.0)) + g_element.set("h", str(0.0)) + + # set set horiz-av-x + if "horiz-adv-x" in glyph.attrib: + g_element.set("h-a-x", glyph.get("horiz-adv-x")) + if not float(g_element.get("w")): + g_element.set("w", glyph.get("horiz-adv-x")) + + # add glyph anchors if present for current glyph + current_glyphname = glyphnames[glyph_code] if glyph_code in glyphnames else "" + if current_glyphname: + g_element.set("n", current_glyphname) + if current_glyphname in glyph_anchors: + for key, value in glyph_anchors[current_glyphname].items(): + a_element = ET.SubElement(g_element, "a") + a_element.set("n", key) + a_element.set("x", str(round(value[0], 2))) + a_element.set("y", str(round(value[1], 2))) + + return root + +######################### +# Extract text font # +######################### + + +def extract_text_font(root, metadata_file): + glyphcodes = get_text_names_to_codes(metadata_file) + # (2) Output bounding box svg + for glyph in glyphs: + if glyph.attrib["glyph-name"] not in glyphcodes: + continue + # set glyph id + g_element = ET.SubElement(root, "g") + name = glyph.attrib["glyph-name"] + glyph_code = glyphcodes[name] + #glyph_code = name.split("uni")[-1] + g_element.set("c", glyph_code) + g_element.set("n", name) + + # set bounding box values if present + if "d" in glyph.attrib: + path = Path(glyph.attrib["d"]) + xmin, xmax, ymin, ymax = path.bbox() + g_element.set("x", str(round(xmin, 2))) + g_element.set("y", str(round(ymin, 2))) + g_element.set("w", str(round(xmax - xmin, 2))) + g_element.set("h", str(round(ymax - ymin, 2))) + else: + g_element.set("x", str(0.0)) + g_element.set("y", str(0.0)) + g_element.set("w", str(0.0)) + g_element.set("h", str(0.0)) + + # set set horiz-av-x + horiz_adv_x = glyph.attrib["horiz-adv-x"] if "horiz-adv-x" in glyph.attrib else "" + if horiz_adv_x: + g_element.set("h-a-x", horiz_adv_x) + + return root + +################## +# Main program # +################## + + +if __name__ == "__main__": + # (1) Parse files + font_file = os.sys.argv[1] + metadata_file = os.sys.argv[2] + (font_family, units_per_em, glyphs) = read_svg_font_file(font_file) + + root = ET.Element("bounding-boxes") + root.set("font-family", font_family) + root.set("units-per-em", units_per_em) + + if metadata_file.endswith(".json"): + root = extract_smufl_font(root, metadata_file) + elif metadata_file.endswith(".g2n"): + root = extract_text_font(root, metadata_file) + + # (2) Combine resulting content and output to the file + xml_output_content = "\n" + xml_output_content += ET.tostring(root, + encoding="unicode", pretty_print=True) + + output_file = os.sys.argv[3] + write_file_content(output_file, xml_output_content) diff --git a/fonts/extract-glyphs-verovio-text.xsl b/fonts/extract-glyphs-verovio-text.xsl deleted file mode 100644 index b834520aa23..00000000000 --- a/fonts/extract-glyphs-verovio-text.xsl +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/fonts/extract-glyphs.py b/fonts/extract-glyphs.py deleted file mode 100644 index 8df28c83991..00000000000 --- a/fonts/extract-glyphs.py +++ /dev/null @@ -1,128 +0,0 @@ -#! /usr/bin/env python3 - -import os -import sys -import xml.etree.ElementTree as ET - -# Define svg namespace -svg_ns = 'http://www.w3.org/2000/svg' - -###################### -# Helper Functions # -###################### - - -def get_file_content(filepath): - """Open file in same directory as script and retrieve its content.""" - location = os.path.realpath(os.path.dirname(__file__)) - file = open(os.path.join(location, filepath), 'r') - content = file.read() - file.close() - return content - - -def write_file_content(filepath, content): - """Write content to file with path relative to the script directory.""" - location = os.path.realpath(os.path.dirname(__file__)) - file = open(os.path.join(location, filepath), 'w') - file.write(content) - file.close() - - -def get_elements(xml, tag): - """Retrieve all elements with given tag name from xml.""" - root = ET.fromstring(bytes(xml, encoding='utf-8')) - return root.findall('.//' + tag) # XPath, recursive - - -def get_svg_elements(root, tag): - """Retrieve all elements with given tag name from svg.""" - return root.findall('.//svg:' + tag, {'svg': svg_ns}) # XPath, recursive - -######################### -# Parse supported.xsl # -######################### - - -def get_supported_glyph_codes(): - """Retrieve dictionary mapping glyph code to SMuFL name.""" - xml = get_file_content('supported.xsl') - glyphs = get_elements(xml, 'glyph') - result = {} - for glyph in glyphs: - result[glyph.attrib['glyph-code']] = glyph.attrib['smufl-name'] - return result - -######################## -# Parse Fontname.svg # -######################## - - -def read_svg_file(): - """Read svg file which is passed as argument and retrieve information.""" - font_file_name = os.sys.argv[1] - try: - font_svg_content = get_file_content(font_file_name) - except OSError: - print(f"Error opening font file {font_file_name}!") - sys.exit(1) - root = ET.fromstring(bytes(font_svg_content, encoding='utf-8')) - font_faces = get_svg_elements(root, "font-face") - if len(font_faces) != 1: - print(f"Error: the file {font_file_name} should have a unique font-face element!") - print(f"Please check that the svg has correct namespace: {svg_ns}") - sys.exit(1) - font_family = font_faces[0].get("font-family") - units_per_em = font_faces[0].get("units-per-em") - glyphs = get_svg_elements(root, "glyph") - return (font_family, units_per_em, glyphs) - -################## -# Main program # -################## - - -if __name__ == '__main__': - # (1) Parse files - supported_glyph_codes = get_supported_glyph_codes() - (font_family, units_per_em, glyphs) = read_svg_file() - rel_path = f'../data/{font_family}' - - # (2) Create xml file for each glyph - for glyph in glyphs: - name = glyph.attrib['glyph-name'] - glyph_code = name.split('uni')[-1] - if glyph_code in supported_glyph_codes: - root = ET.Element('symbol') - root.set('id', glyph_code) - root.set('viewBox', f"0 0 {units_per_em} {units_per_em}") - root.set('overflow', 'inherit') - path = ET.SubElement(root, 'path') - path.set('transform', 'scale(1,-1)') - if 'd' in glyph.attrib: - path.set('d', glyph.attrib['d']) - os.makedirs(rel_path, exist_ok=True) - file_path = f'{rel_path}/{glyph_code}-{supported_glyph_codes[glyph_code]}.xml' - xml = ET.tostring(root, encoding='unicode') - write_file_content(file_path, xml) - - # (3) Output bounding box svg - root = ET.Element('svg') - root.set('xmlns', svg_ns) - root.set('version', '1.1') - root.set('font-family', font_family) - fontface = ET.SubElement(root, 'font-face') - fontface.set('units-per-em', units_per_em) - for glyph in glyphs: - name = glyph.attrib['glyph-name'] - glyph_code = name.split('uni')[-1] - if glyph_code in supported_glyph_codes: - path = ET.SubElement(root, 'path') - path.set('name', supported_glyph_codes[glyph_code]) - path.set('id', glyph_code) - horiz_adv_x = glyph.attrib['horiz-adv-x'] if 'horiz-adv-x' in glyph.attrib else '' - path.set('horiz-adv-x', horiz_adv_x) - path.set('transform', 'scale(1,-1)') - if 'd' in glyph.attrib: - path.set('d', glyph.attrib['d']) - print(ET.tostring(root, encoding='unicode')) diff --git a/fonts/generate-bbox.js b/fonts/generate-bbox.js deleted file mode 100644 index 487fb89a9cb..00000000000 --- a/fonts/generate-bbox.js +++ /dev/null @@ -1,112 +0,0 @@ -var system = require("system"); -var fs = require("fs"); - -if (system.args.length !== 4) { - console.log("Usage: generate-bbox.js svg_input_file bbox_output_file "); - phantom.exit(1); -} - -var address = system.args[1]; -var output = system.args[2]; -var metadata = system.args[3]; - -var content = JSON.parse(fs.read(metadata)); -var glyphAnchors; -if (content.hasOwnProperty("glyphsWithAnchors")) { - glyphAnchors = content["glyphsWithAnchors"]; -} - -var page = require("webpage").create(); - - -function serialize(glyphAnchors) { - - var items = document.documentElement.getElementsByTagName("path"); - var bb = null; - var getScreenBBoxImpl = null; - var svgns = "http://www.w3.org/2000/svg"; - var unitsPerEm = document.documentElement.getElementsByTagName("font-face")[0].getAttribute("units-per-em"); - - function getScreenBBox(e) { - if (e.getScreenBBox) { - return e.getScreenBBox(); - } else if (getScreenBBoxImpl) { - return getScreenBBoxImpl(e); - } - } - - var impl = "\n"; - impl += "\n"; - - var i; - for (i = 0; i < items.length; i++) { - var item = items[i]; - impl += "\t"; - }); - impl += "\n\t
\n"; - } - else { - impl += "/>\n"; - } - } - else { - impl += "/>\n"; - } - } - - impl += "\n"; - - return impl; -} - -function extract() { - return function (status) { - if (status !== "success") { - console.log("Failed to open the page."); - } - else { - var code = page.evaluate(serialize, glyphAnchors); - //console.log(code); - try { - // We write the impl to the file... - fs.write(output, code, "w"); - } catch(e) { - console.log(e); - } - // ... and log the header - //console.log(code[1]); - } - phantom.exit(); - }; -} - -page.open("file://" + fs.absolute(address), extract()); diff --git a/fonts/generate-smufl-code.py b/fonts/generate-smufl-code.py index 0d669bca318..fcf2f5b9129 100644 --- a/fonts/generate-smufl-code.py +++ b/fonts/generate-smufl-code.py @@ -2,10 +2,11 @@ import os import xml.etree.ElementTree as ET +from typing import Dict # Define file output paths -smufl_h_path = '../include/vrv/smufl.h' -smufl_cpp_path = '../src/smufl.cpp' +SMUFL_HEADER = "../include/vrv/smufl.h" +SMUFL_SOURCE = '../src/smufl.cpp' ###################### # Helper Functions # @@ -16,7 +17,7 @@ def get_file_content(filepath): location = os.path.realpath(os.path.dirname(__file__)) - file = open(os.path.join(location, filepath), 'r') + file = open(os.path.join(location, filepath), "r") content = file.read() file.close() return content @@ -26,17 +27,10 @@ def get_file_content(filepath): def write_file_content(filepath, content): location = os.path.realpath(os.path.dirname(__file__)) - file = open(os.path.join(location, filepath), 'w') + file = open(os.path.join(location, filepath), "w") file.write(content) file.close() -# Retrieve all elements with given tag name from xml - - -def get_elements(xml, tag): - root = ET.fromstring(bytes(xml, encoding='utf-8')) - return root.findall('.//' + tag) # XPath, recursive - ######################### # Parse supported.xsl # ######################### @@ -44,44 +38,47 @@ def get_elements(xml, tag): # Retrieve dictionary mapping glyph code to smufl name -def get_supported_glyph_codes(): - xml = get_file_content('supported.xsl') - glyphs = get_elements(xml, 'glyph') - result = {} +def get_supported_glyph_codes() -> Dict: + """Retrieve dictionary with supported SMuFL codepoints and name.""" + supported_xsl = ET.parse("supported.xsl") + glyphs = supported_xsl.findall(".//glyph") + supported_glyphs = {} for glyph in glyphs: - result[glyph.attrib["glyph-code"]] = glyph.attrib["smufl-name"] - return result + supported_glyphs[glyph.attrib["glyph-code"] + ] = glyph.attrib["smufl-name"] + return supported_glyphs ################## # Main program # ################## -if __name__ == '__main__': +if __name__ == "__main__": smufl_names = get_supported_glyph_codes() # (1) Create header file - smufl_h_content = get_file_content('smufl.h.inc') + '\n' - smufl_h_content += 'enum {\n' + smufl_h_content = get_file_content("smufl.h.inc") + "\n" + smufl_h_content += "enum {\n" for glyph_code in smufl_names: # SMUFL_E000_brace = 0xE000, - smufl_h_content += ' ' * 4 + f"SMUFL_{glyph_code}_{smufl_names[glyph_code]} = 0x{glyph_code}," + '\n' - smufl_h_content += '};\n\n' - smufl_h_content += '/** The number of glyphs for verification **/\n' - smufl_h_content += f"#define SMUFL_COUNT {len(smufl_names)}" + '\n\n' - smufl_h_content += '} // namespace vrv\n\n' - smufl_h_content += '#endif\n' - write_file_content(smufl_h_path, smufl_h_content) + smufl_h_content += " " * 4 + \ + f"SMUFL_{glyph_code}_{smufl_names[glyph_code]} = 0x{glyph_code}," + "\n" + smufl_h_content += "};\n\n" + smufl_h_content += "/** The number of glyphs for verification **/\n" + smufl_h_content += f"#define SMUFL_COUNT {len(smufl_names)}" + "\n\n" + smufl_h_content += "} // namespace vrv\n\n" + smufl_h_content += "#endif\n" + write_file_content(SMUFL_HEADER, smufl_h_content) # (2) Create cpp file - smufl_cpp_content = get_file_content('smufl.cpp.inc') + '\n' - smufl_cpp_content += 'const std::map Resources::s_smuflNames = {\n' + smufl_cpp_content = get_file_content("smufl.cpp.inc") + "\n" + smufl_cpp_content += "const std::map Resources::s_smuflNames = {\n" for glyph_code in smufl_names: # { "brace", SMUFL_E000_brace }, - smufl_cpp_content += ' ' * 4 + \ - f"{{ \"{smufl_names[glyph_code]}\", SMUFL_{glyph_code}_{smufl_names[glyph_code]} }}," + '\n' - smufl_cpp_content += '};\n\n' - smufl_cpp_content += '/** The number of glyphs for verification **/\n' - smufl_cpp_content += f"// {len(smufl_names)}" + '\n\n' - smufl_cpp_content += '} // namespace vrv\n' - write_file_content(smufl_cpp_path, smufl_cpp_content) + smufl_cpp_content += " " * 4 + \ + f"{{ \"{smufl_names[glyph_code]}\", SMUFL_{glyph_code}_{smufl_names[glyph_code]} }}," + "\n" + smufl_cpp_content += "};\n\n" + smufl_cpp_content += "/** The number of glyphs for verification **/\n" + smufl_cpp_content += f"// {len(smufl_names)}" + "\n\n" + smufl_cpp_content += "} // namespace vrv\n" + write_file_content(SMUFL_SOURCE, smufl_cpp_content) \ No newline at end of file diff --git a/fonts/generate_all.sh b/fonts/generate_all.sh index e5f3fa3674e..2c960d9d38c 100755 --- a/fonts/generate_all.sh +++ b/fonts/generate_all.sh @@ -1,37 +1,22 @@ -#!/bin/zsh +# Requires python +# Requires svgpathtools and lxml python libraries (install with 'pip3 install %name%') -# Requires phantomjs and python - -if [ ! -e tmp ]; then - mkdir tmp -fi - -if ! command -v phantomjs >/dev/null 2>&1 ; then - echo >&2 "Phantomjs is required. Aborting."; - exit 1; -fi - -echo "Generating C++ header and implementation file ..." +echo "Generating C++ header file ..." python3 generate-smufl-code.py echo "Generating Bravura files ..." -python3 extract-glyphs.py Bravura.svg > tmp/Bravura-bounding-boxes.svg -phantomjs generate-bbox.js tmp/Bravura-bounding-boxes.svg ../data/Bravura.xml json/bravura_metadata.json +python3 extract-bounding-boxes.py Bravura.svg json/bravura_metadata.json ../data/Bravura.xml echo "Generating Leipzig files ..." -python3 extract-glyphs.py Leipzig.svg > tmp/Leipzig-bounding-boxes.svg -phantomjs generate-bbox.js tmp/Leipzig-bounding-boxes.svg ../data/Leipzig.xml json/leipzig_metadata.json +python3 extract-bounding-boxes.py Leipzig.svg json/leipzig_metadata.json ../data/Leipzig.xml echo "Generating Gootville files ..." -python3 extract-glyphs.py Gootville.svg > tmp/Gootville-bounding-boxes.svg -phantomjs generate-bbox.js tmp/Gootville-bounding-boxes.svg ../data/Gootville.xml json/gootville-1.2_metadata.json +python3 extract-bounding-boxes.py Gootville.svg json/gootville-1.2_metadata.json ../data/Gootville.xml echo "Generating Petaluma files ..." -python3 extract-glyphs.py Petaluma.svg > tmp/Petaluma-bounding-boxes.svg -phantomjs generate-bbox.js tmp/Petaluma-bounding-boxes.svg ../data/Petaluma.xml json/petaluma_metadata.json +python3 extract-bounding-boxes.py Petaluma.svg json/petaluma_metadata.json ../data/Petaluma.xml echo "Generating Leland files ..." -python3 extract-glyphs.py Leland.svg > tmp/Leland-bounding-boxes.svg -phantomjs generate-bbox.js tmp/Leland-bounding-boxes.svg ../data/Leland.xml json/leland_metadata.json +python3 extract-bounding-boxes.py Leland.svg json/leland_metadata.json ../data/Leland.xml echo "Done!" diff --git a/fonts/generate_plain_text.py b/fonts/generate_plain_text.py new file mode 100644 index 00000000000..9955afbf359 --- /dev/null +++ b/fonts/generate_plain_text.py @@ -0,0 +1,14 @@ +#!/usr/bin/python +import os +import fontforge + +fontFileName = os.sys.argv[1] +path = fontFileName +try: + font = fontforge.open(path) + font.generate(os.path.splitext(fontFileName)[0] + ".svg") + font.generate(os.path.splitext(fontFileName)[0] + ".otf", "", "glyph-map-file") + +except EnvironmentError: + print("Error opening font file %s!" % fontFileName) + os.sys.exit(1) \ No newline at end of file diff --git a/fonts/generate_text_font.sh b/fonts/generate_text_font.sh new file mode 100644 index 00000000000..2a2362269b6 --- /dev/null +++ b/fonts/generate_text_font.sh @@ -0,0 +1,21 @@ +# This script generates XML file with bounding boxes for the plain font +# One input argument (font name) is expected when running this script + +scriptdir=$(dirname "$0") +fontfile="${1%.*}" + +if [ -z "$1" ] + then + echo "Font name is expected as an argument" + exit 1 +fi + +echo "Generating metadata for $fontfile font" + +# generate SVG and G2N files for the text font +fontforge generate_plain_text.py "$1" +# generate XML file with bounding boxes for the text font +python3 extract-bounding-boxes.py "$fontfile".svg "$fontfile".g2n ../data/text/"$fontfile".xml + + +echo "Done!" \ No newline at end of file diff --git a/fonts/generate_woff.sh b/fonts/generate_woff.sh index 36c16342bd0..8e83f239fc4 100755 --- a/fonts/generate_woff.sh +++ b/fonts/generate_woff.sh @@ -2,48 +2,25 @@ font="VerovioText-1.0.sfd" -shopt -s expand_aliases -[[ -f ~/.bash_profile ]] && source ~/.bash_profile - -# Requires saxon9ee and phantomjs -# saxon9ee can be aliased from Oxygen in ~/.bash_profile -# alias saxon9ee="java -jar /Applications/oxygen/lib/saxon9ee.jar" - -if [ ! -e tmp ]; then - mkdir tmp -fi - -if ! command -v saxon9ee >/dev/null 2>&1 ; then - echo >&2 "Saxon9ee is required. Aborting."; - exit 1; -fi - -if ! command -v phantomjs >/dev/null 2>&1 ; then - echo >&2 "Phantomjs is required. Aborting."; - exit 1; -fi +# Generate bounding boxes for the VerovioText and move to ../data/text +echo "Generating bounding-box file ..." +./generate_text_font $font -#./generate_ff.sh $1 +# Generate woff.xml fontforge generate_ff.py $font -# base64 +# base64 and ouput woff font woffFont=${font%.sfd}.woff w=$(base64 $woffFont) -# output cat woff-1.txt > woff.xml echo $w >> woff.xml cat woff-2.txt >> woff.xml +# move woff to data folder mv woff.xml ../data -# base64 +# base64 and output ttf font ttfFont=${font%.sfd}.ttf t=$(base64 $ttfFont) -echo "var vrvTTF = \"$t\";" > vrv-ttf.js - -svgFont=${font%.sfd}.svg -baseFont=${font%.sfd} -echo "Generating bounding-box file ..." -saxon9ee $svgFont extract-glyphs-verovio-text.xsl > tmp/${baseFont}-bounding-boxes.svg -phantomjs generate-bbox.js tmp/${baseFont}-bounding-boxes.svg ../data/text/${baseFont}.xml json/verovio-text.json +echo "var vrvTTF = \"$t\";" > vrv-ttf.js \ No newline at end of file From c72db2f8a373bfe6401de2733eb9ed37d08fe972 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Tue, 25 Jan 2022 15:48:05 +0100 Subject: [PATCH 129/403] make script executable --- fonts/generate_text_font.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 fonts/generate_text_font.sh diff --git a/fonts/generate_text_font.sh b/fonts/generate_text_font.sh old mode 100644 new mode 100755 From 53e8751e9538263f75300bb3d2063a4cc812f5c6 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Tue, 25 Jan 2022 16:08:28 +0100 Subject: [PATCH 130/403] change quotation marks --- fonts/generate-smufl-code.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fonts/generate-smufl-code.py b/fonts/generate-smufl-code.py index fcf2f5b9129..0b64868d8c9 100644 --- a/fonts/generate-smufl-code.py +++ b/fonts/generate-smufl-code.py @@ -6,7 +6,7 @@ # Define file output paths SMUFL_HEADER = "../include/vrv/smufl.h" -SMUFL_SOURCE = '../src/smufl.cpp' +SMUFL_SOURCE = "../src/smufl.cpp" ###################### # Helper Functions # @@ -81,4 +81,4 @@ def get_supported_glyph_codes() -> Dict: smufl_cpp_content += "/** The number of glyphs for verification **/\n" smufl_cpp_content += f"// {len(smufl_names)}" + "\n\n" smufl_cpp_content += "} // namespace vrv\n" - write_file_content(SMUFL_SOURCE, smufl_cpp_content) \ No newline at end of file + write_file_content(SMUFL_SOURCE, smufl_cpp_content) From 58664ec6dcffd1589ab9b7b6b68c1c9fbc761688 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 25 Jan 2022 16:09:56 +0100 Subject: [PATCH 131/403] Move m_stemSameAsNotes from BeamDrawingInterface to Beam --- include/vrv/beam.h | 12 +++++++++++- include/vrv/drawinginterface.h | 11 +---------- src/beam.cpp | 2 ++ src/drawinginterface.cpp | 2 -- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 2f639023885..8accf201ea4 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -174,6 +174,14 @@ class Beam : public LayerElement, */ bool IsTabBeam(); + /** + * @name Setter and getter for the stemSameasNote flag + */ + ///@{ + void SetStemSameasNotes(bool stemSameasNotes) { m_stemSameAsNotes = stemSameasNotes; } + bool GetStemSameasNotes() const { return m_stemSameAsNotes; } + ///@} + //----------// // Functors // //----------// @@ -212,7 +220,9 @@ class Beam : public LayerElement, int CalcLayerOverlap(Doc *doc, Object *beam, int directionBias, int y1, int y2); private: - // + /** A flag indicating that we have notes with stem shared and that it should not be drawn */ + bool m_stemSameAsNotes; + public: /** */ BeamSegment m_beamSegment; diff --git a/include/vrv/drawinginterface.h b/include/vrv/drawinginterface.h index 0866018c070..2e8ad957ba8 100644 --- a/include/vrv/drawinginterface.h +++ b/include/vrv/drawinginterface.h @@ -132,14 +132,6 @@ class BeamDrawingInterface : public ObjectListInterface { */ void ClearCoords(); - /** - * @name Setter and getter for the stemSameasNote flag - */ - ///@{ - void SetStemSameasNotes(bool stemSameasNotes) { m_stemSameAsNotes = stemSameasNotes; } - bool GetStemSameasNotes() const { return m_stemSameAsNotes; } - ///@} - protected: /** * Return the position of the element in the beam. @@ -176,8 +168,7 @@ class BeamDrawingInterface : public ObjectListInterface { ArrayOfBeamElementCoords m_beamElementCoords; private: - /** A flag indicating that we have notes with stem shared and that it should not be drawn */ - bool m_stemSameAsNotes; + // }; //---------------------------------------------------------------------------- diff --git a/src/beam.cpp b/src/beam.cpp index d938278394d..f7be74bc5cf 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1214,6 +1214,8 @@ void Beam::Reset() ResetBeamRend(); ResetColor(); ResetCue(); + + m_stemSameAsNotes = false; } bool Beam::IsSupportedChild(Object *child) diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index 03eec7e3a20..141ce8a2bd7 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -92,8 +92,6 @@ void BeamDrawingInterface::Reset() m_beamWidth = 0; m_beamWidthBlack = 0; m_beamWidthWhite = 0; - - m_stemSameAsNotes = false; } int BeamDrawingInterface::GetTotalBeamWidth() const From 47376f5f5906d92249b3bb89cd505b1ad8f66187 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 25 Jan 2022 16:11:19 +0100 Subject: [PATCH 132/403] Set drawing stem for notes with stemSameasNote --- include/vrv/functorparams.h | 11 +++++++---- src/beam.cpp | 2 +- src/chord.cpp | 1 + src/elementpart.cpp | 20 ++++++++++++-------- src/note.cpp | 18 ++++++++++++++---- 5 files changed, 35 insertions(+), 17 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 62b0a07872d..38981cf7a69 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1052,10 +1052,11 @@ class CalcOnsetOffsetParams : public FunctorParams { * member 1: the vertical center of the staff * member 2: the actual duration of the chord / note * member 3: the flag for grace notes (stem is not extended) - * member 4: the current staff (to avoid additional lookup) - * member 5: the current layer (ditto) - * member 6: the chord or note to which the stem belongs - * member 7: the doc + * member 4: the flag for stem.sameas notes + * member 5: the current staff (to avoid additional lookup) + * member 6: the current layer (ditto) + * member 7: the chord or note to which the stem belongs + * member 8: the doc **/ class CalcStemParams : public FunctorParams { @@ -1066,6 +1067,7 @@ class CalcStemParams : public FunctorParams { m_verticalCenter = 0; m_dur = DUR_1; m_isGraceNote = false; + m_stemSameas = false; m_staff = NULL; m_layer = NULL; m_interface = NULL; @@ -1075,6 +1077,7 @@ class CalcStemParams : public FunctorParams { int m_verticalCenter; int m_dur; bool m_isGraceNote; + bool m_stemSameas; Staff *m_staff; Layer *m_layer; StemmedDrawingInterface *m_interface; diff --git a/src/beam.cpp b/src/beam.cpp index f7be74bc5cf..ab3705aea85 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1667,7 +1667,7 @@ int Beam::CalcStem(FunctorParams *functorParams) CalcStemParams *params = vrv_params_cast(functorParams); assert(params); - if (this->IsTabBeam()) return FUNCTOR_CONTINUE; + if (this->IsTabBeam() || this->GetStemSameasNotes()) return FUNCTOR_CONTINUE; const ArrayOfObjects *beamChildren = this->GetList(this); diff --git a/src/chord.cpp b/src/chord.cpp index 4f263882631..c5fd0f9ccde 100644 --- a/src/chord.cpp +++ b/src/chord.cpp @@ -696,6 +696,7 @@ int Chord::CalcStem(FunctorParams *functorParams) params->m_interface = this; params->m_dur = this->GetActualDur(); params->m_isGraceNote = this->IsGraceNote(); + params->m_stemSameas = false; /************ Set the direction ************/ diff --git a/src/elementpart.cpp b/src/elementpart.cpp index eae9adc3c15..b294486817d 100644 --- a/src/elementpart.cpp +++ b/src/elementpart.cpp @@ -487,7 +487,8 @@ int Stem::CalcStem(FunctorParams *functorParams) if (this->HasStemLen()) { baseStem = this->GetStemLen() * -params->m_doc->GetDrawingUnit(staffSize); } - else { + // Do not adjust the baseStem for stem sameas notes (its length is in m_chordStemLength) + else if (!params->m_stemSameas) { int thirdUnit = params->m_doc->GetDrawingUnit(staffSize) / 3; const data_STEMDIRECTION stemDir = params->m_interface->GetDrawingStemDir(); baseStem = -(params->m_interface->CalcStemLenInThirdUnits(params->m_staff, stemDir) * thirdUnit); @@ -496,7 +497,7 @@ int Stem::CalcStem(FunctorParams *functorParams) // Even if a stem length is given we add the length of the chord content (however only if not 0) // Also, the given stem length is understood as being measured from the center of the note. // This means that it will be adjusted according to the note head (see below - if (!this->HasStemLen() || (this->GetStemLen() != 0)) { + if (!params->m_staff || !this->HasStemLen() || (this->GetStemLen() != 0)) { Point p; if (this->GetDrawingStemDir() == STEMDIRECTION_up) { if (this->GetStemPos() == STEMPOSITION_left) { @@ -507,7 +508,8 @@ int Stem::CalcStem(FunctorParams *functorParams) p = params->m_interface->GetStemUpSE(params->m_doc, staffSize, drawingCueSize); p.x -= stemShift; } - this->SetDrawingStemLen(baseStem + params->m_chordStemLength + p.y); + const int stemShotening = (params->m_stemSameas) ? 0 : p.y; + this->SetDrawingStemLen(baseStem + params->m_chordStemLength + stemShotening); } else { if (this->GetStemPos() == STEMPOSITION_right) { @@ -518,7 +520,8 @@ int Stem::CalcStem(FunctorParams *functorParams) p = params->m_interface->GetStemDownNW(params->m_doc, staffSize, drawingCueSize); p.x += stemShift; } - this->SetDrawingStemLen(-(baseStem + params->m_chordStemLength - p.y)); + const int stemShotening = (params->m_stemSameas) ? 0 : p.y; + this->SetDrawingStemLen(-(baseStem + params->m_chordStemLength - stemShotening)); } this->SetDrawingYRel(this->GetDrawingYRel() + p.y); this->SetDrawingXRel(p.x); @@ -541,7 +544,8 @@ int Stem::CalcStem(FunctorParams *functorParams) } Flag *flag = NULL; - if (params->m_dur > DUR_4) { + // There is never a flag with stem sameas notes or with a duration longer than 8th notes + if (!params->m_stemSameas && params->m_dur > DUR_4) { flag = vrv_cast(this->GetFirst(FLAG)); assert(flag); flag->m_drawingNbFlags = params->m_dur - DUR_4; @@ -570,9 +574,9 @@ int Stem::CalcStem(FunctorParams *functorParams) flag->SetDrawingYRel(-this->GetDrawingStemLen()); } - // Do not adjust the length if given in the encoding - however, the stem will be extend with the SMuFL - // extension from 32th - this can be improved - if (this->HasStemLen()) { + // Do not adjust the length with stem sameas notes or if given in the encoding + // however, the stem will be extend with the SMuFL extension from 32th - this can be improved + if (params->m_stemSameas || this->HasStemLen()) { if ((this->GetStemLen() == 0) && flag) flag->m_drawingNbFlags = 0; return FUNCTOR_CONTINUE; } diff --git a/src/note.cpp b/src/note.cpp index f0a2f8198b3..4a2221cfd27 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -990,8 +990,8 @@ int Note::CalcStem(FunctorParams *functorParams) } // Stems have been calculated previously in Beam or fTrem - siblings because flags do not need to - // be processed either - if (this->IsInBeam() || this->IsInFTrem()) { + // be processed either - except when there is a stemSameasNote + if ((this->IsInBeam() || this->IsInFTrem()) && !this->HasStemSameasNote()) { return FUNCTOR_SIBLINGS; } @@ -1026,6 +1026,7 @@ int Note::CalcStem(FunctorParams *functorParams) params->m_interface = this; params->m_dur = this->GetActualDur(); params->m_isGraceNote = this->IsGraceNote(); + params->m_stemSameas = this->HasStemSameasNote(); int staffSize = staff->m_drawingStaffSize; @@ -1037,7 +1038,11 @@ int Note::CalcStem(FunctorParams *functorParams) data_STEMDIRECTION layerStemDir; data_STEMDIRECTION stemDir = STEMDIRECTION_NONE; - if (stem->HasStemDir()) { + if (this->HasStemSameasNote()) { + // for stem same as notes, the direction is up if the note also carries the @stem.sameas attribute (default) + stemDir = (this->HasStemSameas()) ? STEMDIRECTION_up : STEMDIRECTION_down; + } + else if (stem->HasStemDir()) { stemDir = stem->GetStemDir(); } else if (this->IsGraceNote()) { @@ -1055,6 +1060,11 @@ int Note::CalcStem(FunctorParams *functorParams) // Make sure the relative position of the stem is the same stem->SetDrawingYRel(0); + // Use the params->m_chordStemLength for the length of the stem beetween the notes + if (this->HasStemSameasNote()) { + params->m_chordStemLength = this->GetDrawingY() - this->GetStemSameasNote()->GetDrawingY(); + } + return FUNCTOR_CONTINUE; } @@ -1293,7 +1303,7 @@ int Note::PrepareLayerElementParts(FunctorParams *functorParams) } if ((this->GetActualDur() > DUR_4) && !this->IsInBeam() && !this->IsInFTrem() && !this->IsChordTone() - && !this->IsMensuralDur()) { + && !this->IsMensuralDur() && !this->HasStemSameasNote()) { // We should have a stem at this stage assert(currentStem); if (!currentFlag) { From 6ee17e508d22a8bbc7e6bed63d0296cb47142115 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 25 Jan 2022 16:11:49 +0100 Subject: [PATCH 133/403] Remove old code --- src/ftrem.cpp | 52 --------------------------------------------------- 1 file changed, 52 deletions(-) diff --git a/src/ftrem.cpp b/src/ftrem.cpp index a0456a64516..dec5979218c 100644 --- a/src/ftrem.cpp +++ b/src/ftrem.cpp @@ -107,58 +107,6 @@ void FTrem::FilterList(ArrayOfObjects *childList) this->InitCue(false); } -/* -void FTrem::InitCoords(ArrayOfObjects *childList) -{ - ClearCoords(); - - if (childList->empty()) { - return; - } - - BeamElementCoord *firstElement = new BeamElementCoord; - BeamElementCoord *secondElement = new BeamElementCoord; - - m_beamElementCoords.push_back(firstElement); - m_beamElementCoords.push_back(secondElement); - - // current point to the first Note in the layed out layer - firstElement->m_element = dynamic_cast(childList->front()); - // fTrem list should contain only DurationInterface objects - assert(firstElement->m_element->GetDurationInterface()); - // current point to the first Note in the layed out layer - secondElement->m_element = dynamic_cast(childList->back()); - // fTrem list should contain only DurationInterface objects - assert(secondElement->m_element->GetDurationInterface()); - // Should we assert this at the beginning? - if (firstElement->m_element == secondElement->m_element) { - return; - } - - m_changingDur = false; - m_beamHasChord = false; - m_hasMultipleStemDir = false; - m_cueSize = false; - // adjust beam->m_drawingParams.m_shortestDur depending on the number of slashes - m_shortestDur = std::max(DUR_8, DUR_1 + this->GetBeams()); - m_stemDir = STEMDIRECTION_NONE; - - if (firstElement->m_element->Is(CHORD)) { - m_beamHasChord = true; - } - if (secondElement->m_element->Is(CHORD)) { - m_beamHasChord = true; - } - - // For now look at the stemDir only on the first note - assert(dynamic_cast(firstElement->m_element)); - m_stemDir = (dynamic_cast(firstElement->m_element))->GetStemDir(); - - // We look only at the first note for checking if cue-sized. Somehow arbitrarily - m_cueSize = firstElement->m_element->GetDrawingCueSize(); - } - */ - //---------------------------------------------------------------------------- // Functors methods //---------------------------------------------------------------------------- From d3402a6c6bbd619f691d7b0100e71d43cc8e8103 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 25 Jan 2022 16:12:30 +0100 Subject: [PATCH 134/403] Skip beam drawing when notes with stemSameasNotes --- src/view_beam.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/view_beam.cpp b/src/view_beam.cpp index 1fa5aa5f03d..08195e76810 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -42,6 +42,7 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf assert(beam); const bool isTabBeam = beam->IsTabBeam(); + const bool hasStemSameas = beam->GetStemSameasNotes(); /******************************************************************/ // initialization @@ -61,7 +62,7 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf if (isTabBeam) { beam->m_beamSegment.CalcTabBeam(layer, beam->m_beamStaff, m_doc, beam, beam->GetPlace()); } - else { + else if (!hasStemSameas) { beam->m_beamSegment.CalcBeam(layer, beam->m_beamStaff, m_doc, beam, beam->GetPlace()); } @@ -78,7 +79,7 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf /******************************************************************/ // Draw the beamSegment - DrawBeamSegment(dc, &beam->m_beamSegment, beam, layer, staff, measure); + if (!hasStemSameas) DrawBeamSegment(dc, &beam->m_beamSegment, beam, layer, staff, measure); dc->EndGraphic(element, this); } From 9ff9a7434aa71ba5f57fcf73dc1b339ddd34ef13 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Tue, 25 Jan 2022 16:26:43 +0100 Subject: [PATCH 135/403] follow PEP585 --- fonts/extract-bounding-boxes.py | 17 ++++++++--------- fonts/generate-smufl-code.py | 5 ++--- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/fonts/extract-bounding-boxes.py b/fonts/extract-bounding-boxes.py index 9a795ddc486..cca9412631c 100644 --- a/fonts/extract-bounding-boxes.py +++ b/fonts/extract-bounding-boxes.py @@ -3,7 +3,6 @@ import json import os import sys -from typing import Dict # We can 1-to-1 replace ElementTree with lxml to support such features like # pretty_print and retaining order of attributes during the output # import xml.etree.ElementTree as ET @@ -11,14 +10,14 @@ from svgpathtools import Path # Define svg namespace -svg_ns = "http://www.w3.org/2000/svg" +SVG_NS = "http://www.w3.org/2000/svg" ###################### # Helper Functions # ###################### -def get_file_content(filepath): +def get_file_content(filepath) -> str: """Open file in same directory as script and retrieve its content.""" location = os.path.realpath(os.path.dirname(__file__)) file = open(os.path.join(location, filepath), "r") @@ -37,7 +36,7 @@ def write_file_content(filepath, content): def get_svg_elements(root, tag): """Retrieve all elements with given tag name from svg.""" - return root.findall(".//svg:" + tag, {"svg": svg_ns}) # XPath, recursive + return root.findall(".//svg:" + tag, {"svg": SVG_NS}) # XPath, recursive ######################## # Parse Fontname.svg # @@ -56,7 +55,7 @@ def read_svg_font_file(font_file_name: str): if len(font_faces) != 1: print( f"Error: the file {font_file_name} should have a unique font-face element!") - print(f"Please check that the svg has correct namespace: {svg_ns}") + print(f"Please check that the svg has correct namespace: {SVG_NS}") sys.exit(1) font_family = font_faces[0].get("font-family") units_per_em = font_faces[0].get("units-per-em") @@ -68,7 +67,7 @@ def read_svg_font_file(font_file_name: str): # Write xml glyphs # ######################## -def write_xml_glyphs(glyphnames: Dict): +def write_xml_glyphs(glyphnames: dict): """Etracts glyphs from SVG font as specified in glyphnames.""" rel_path = f"../data/{font_family}" for glyph in glyphs: @@ -94,7 +93,7 @@ def write_xml_glyphs(glyphnames: Dict): ######################### -def get_json_content(filepath: str) -> Dict: +def get_json_content(filepath: str) -> dict: """Retrieve dictionary with supported SMuFL codepoints and name.""" json_content = get_file_content(filepath) json_items = json.loads(json_content) @@ -105,7 +104,7 @@ def get_json_content(filepath: str) -> Dict: ######################### -def get_supported_glyph_codes() -> Dict: +def get_supported_glyph_codes() -> dict: """Retrieve dictionary with supported SMuFL codepoints and name.""" supported_xsl = ET.parse("supported.xsl") glyphs = supported_xsl.findall(".//glyph") @@ -120,7 +119,7 @@ def get_supported_glyph_codes() -> Dict: ######################### -def get_text_names_to_codes(filepath: str) -> Dict: +def get_text_names_to_codes(filepath: str) -> dict: """Retrieve dictionary mapping glyph code to SMuFL name.""" result = {} with open(filepath, "r") as fin: diff --git a/fonts/generate-smufl-code.py b/fonts/generate-smufl-code.py index 0b64868d8c9..f26f212fae3 100644 --- a/fonts/generate-smufl-code.py +++ b/fonts/generate-smufl-code.py @@ -2,7 +2,6 @@ import os import xml.etree.ElementTree as ET -from typing import Dict # Define file output paths SMUFL_HEADER = "../include/vrv/smufl.h" @@ -15,7 +14,7 @@ # Open file in same directory as script and retrieve its content -def get_file_content(filepath): +def get_file_content(filepath) -> str: location = os.path.realpath(os.path.dirname(__file__)) file = open(os.path.join(location, filepath), "r") content = file.read() @@ -38,7 +37,7 @@ def write_file_content(filepath, content): # Retrieve dictionary mapping glyph code to smufl name -def get_supported_glyph_codes() -> Dict: +def get_supported_glyph_codes() -> dict: """Retrieve dictionary with supported SMuFL codepoints and name.""" supported_xsl = ET.parse("supported.xsl") glyphs = supported_xsl.findall(".//glyph") From e226ec47d0f4f3e0e539ae3936d0ae1e2f5c999d Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 25 Jan 2022 16:35:09 +0100 Subject: [PATCH 136/403] Fix stem length for stem down cases and add comment --- include/vrv/note.h | 5 ++++- src/note.cpp | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/include/vrv/note.h b/include/vrv/note.h index cc96ae70588..cb11ad6f7bd 100644 --- a/include/vrv/note.h +++ b/include/vrv/note.h @@ -243,7 +243,10 @@ class Note : public LayerElement, ///@} /** - * + * Resovle @stem.sameas links by instanciating Note::m_stemSameas (*Note). + * Called twice from Object::PrepareLinks. Once to fill uuid / note pairs, + * and once to resolve the link. The direction of the link depends on the + * stem direction and not on the presence of the @stem.sameas */ void ResolveStemSameas(PrepareLinkingParams *params); diff --git a/src/note.cpp b/src/note.cpp index 4a2221cfd27..44a655655f9 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -1062,7 +1062,7 @@ int Note::CalcStem(FunctorParams *functorParams) // Use the params->m_chordStemLength for the length of the stem beetween the notes if (this->HasStemSameasNote()) { - params->m_chordStemLength = this->GetDrawingY() - this->GetStemSameasNote()->GetDrawingY(); + params->m_chordStemLength = -std::abs(this->GetDrawingY() - this->GetStemSameasNote()->GetDrawingY()); } return FUNCTOR_CONTINUE; From d3409f6d1f191087fc36a0ff524f788025f7f160 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 25 Jan 2022 16:39:16 +0100 Subject: [PATCH 137/403] ResetDrawing for beams and notes --- src/beam.cpp | 1 + src/note.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/beam.cpp b/src/beam.cpp index ab3705aea85..93aef952975 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1694,6 +1694,7 @@ int Beam::ResetDrawing(FunctorParams *functorParams) LayerElement::ResetDrawing(functorParams); m_beamSegment.Reset(); + m_stemSameAsNotes = false; // We want the list of the ObjectListInterface to be re-generated this->Modify(); diff --git a/src/note.cpp b/src/note.cpp index 44a655655f9..cb9afe7954c 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -1370,6 +1370,7 @@ int Note::ResetDrawing(FunctorParams *functorParams) m_drawingLoc = 0; m_flippedNotehead = false; + m_stemSameas = NULL; return FUNCTOR_CONTINUE; } From c84aad1af066beabccbe2043aa4c5e8318b597ce Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 25 Jan 2022 18:06:56 +0100 Subject: [PATCH 138/403] Preserve xml:id of notes references with `@stem.sameas` --- src/object.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/object.cpp b/src/object.cpp index b822e6c60c9..f708fff7246 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -1464,6 +1464,19 @@ int Object::FindAllReferencedObjects(FunctorParams *functorParams) if (interface->GetEnd() && !interface->GetEnd()->Is(TIMESTAMP_ATTR)) params->m_elements->push_back(interface->GetEnd()); } + if (this->Is(NOTE)) { + Note *note = vrv_cast(this); + assert(note); + if (note->HasStemSameasNote()) { + // We need to check where the @stem.sameas attribute actually is because of the handling + // of share stem pointers depending on the stem direction. + // If it is on this note, then the reference we want to keep is the other note. + // Otherwise it means that the @stem.sameas is on the other note that we already have + // the one that is actually referenced + if (note->HasStemSameas()) note = note->GetStemSameasNote(); + params->m_elements->push_back(note); + } + } // These will also be referred to as milestones in page-based MEI if (params->m_milestoneReferences && this->IsMilestoneElement()) { params->m_elements->push_back(this); From 6a8747617dabf2e7208d35a4363fd7ebfda43aa0 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Tue, 25 Jan 2022 18:42:42 +0100 Subject: [PATCH 139/403] add fallthrough --- src/clef.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/clef.cpp b/src/clef.cpp index dc2870915be..8fa6e6ea3b0 100644 --- a/src/clef.cpp +++ b/src/clef.cpp @@ -126,6 +126,7 @@ wchar_t Clef::GetClefGlyph(const data_NOTATIONTYPE notationtype) const case 4: return SMUFL_E90A_mensuralCclefPetrucciPosHigh; break; case 5: return SMUFL_E90B_mensuralCclefPetrucciPosHighest; break; } + [[fallthrough]]; default: return SMUFL_E909_mensuralCclefPetrucciPosMiddle; break; } case NOTATIONTYPE_mensural_black: From dd7312751cd673e45377b30d4cb18d32ed52e9b3 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 26 Jan 2022 10:37:21 +0100 Subject: [PATCH 140/403] Fix typos in comments [skip-ci] --- include/vrv/arpeg.h | 2 +- include/vrv/layerelement.h | 4 ++-- include/vrv/measure.h | 2 +- include/vrv/page.h | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/vrv/arpeg.h b/include/vrv/arpeg.h index df1a503c7b2..acc61817003 100644 --- a/include/vrv/arpeg.h +++ b/include/vrv/arpeg.h @@ -123,7 +123,7 @@ class Arpeg : public ControlElement, int m_drawingXRel; /** - * The cached value for m_darwingXRel for caching horizontal layout + * The cached value for m_drawingXRel for caching horizontal layout */ int m_cachedXRel; }; diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index ba2a2316df2..9e7da648f0e 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -487,7 +487,7 @@ class LayerElement : public Object, int m_drawingYRel; /** - * The cached value for m_darwingYRel for caching horizontal layout + * The cached value for m_drawingYRel for caching horizontal layout */ int m_cachedYRel; @@ -498,7 +498,7 @@ class LayerElement : public Object, int m_drawingXRel; /** - * The cached value for m_darwingXRel for caching horizontal layout + * The cached value for m_drawingXRel for caching horizontal layout */ int m_cachedXRel; diff --git a/include/vrv/measure.h b/include/vrv/measure.h index 3f26f20ddb1..84ff0d40e1b 100644 --- a/include/vrv/measure.h +++ b/include/vrv/measure.h @@ -514,7 +514,7 @@ class Measure : public Object, int m_drawingXRel; /** - * The cached value for m_darwingXRel for caching horizontal layout + * The cached value for m_drawingXRel for caching horizontal layout */ int m_cachedXRel; diff --git a/include/vrv/page.h b/include/vrv/page.h index 3065f47f0c9..7d754cef5cf 100644 --- a/include/vrv/page.h +++ b/include/vrv/page.h @@ -101,8 +101,8 @@ class Page : public Object { /** * Layout out the measures horizontally using the cached values. - * This should be done in preparation of cast-off which it based on measure positioning. - * The content of the measures it not layout out and keeps previous relative positioning. + * This should be done in preparation of cast-off which is based on measure positioning. + * The content of the measures is not laid out and keeps previously cached positioning. */ void HorizontalLayoutCachePage(bool restore = false); From 4febc57d49cb1fb483169d59faeb3bfcd7436799 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Mon, 20 Dec 2021 14:49:42 +0100 Subject: [PATCH 141/403] delete unused --- fonts/json/glyphnames.json | 11393 ----------------------------------- 1 file changed, 11393 deletions(-) delete mode 100644 fonts/json/glyphnames.json diff --git a/fonts/json/glyphnames.json b/fonts/json/glyphnames.json deleted file mode 100644 index 42b3018cb90..00000000000 --- a/fonts/json/glyphnames.json +++ /dev/null @@ -1,11393 +0,0 @@ -{ - "4stringTabClef": { - "codepoint": "U+E06E", - "description": "4-string tab clef" - }, - "6stringTabClef": { - "codepoint": "U+E06D", - "description": "6-string tab clef" - }, - "accSagittal11LargeDiesisDown": { - "codepoint": "U+E30D", - "description": "11 large diesis down, 3\u00b0 down [46 EDO]" - }, - "accSagittal11LargeDiesisUp": { - "codepoint": "U+E30C", - "description": "11 large diesis up, (11L), (sharp less 11M), 3\u00b0 up [46 EDO]" - }, - "accSagittal11MediumDiesisDown": { - "codepoint": "U+E30B", - "description": "11 medium diesis down, 1\u00b0[17 31] 2\u00b046 down, 1/4-tone down" - }, - "accSagittal11MediumDiesisUp": { - "codepoint": "U+E30A", - "description": "11 medium diesis up, (11M), 1\u00b0[17 31] 2\u00b046 up, 1/4-tone up" - }, - "accSagittal11v19LargeDiesisDown": { - "codepoint": "U+E3AB", - "description": "11:19 large diesis down" - }, - "accSagittal11v19LargeDiesisUp": { - "codepoint": "U+E3AA", - "description": "11:19 large diesis up, (11:19L, apotome less 11:19M)" - }, - "accSagittal11v19MediumDiesisDown": { - "codepoint": "U+E3A3", - "description": "11:19 medium diesis down" - }, - "accSagittal11v19MediumDiesisUp": { - "codepoint": "U+E3A2", - "description": "11:19 medium diesis up, (11:19M, 11M plus 19s)" - }, - "accSagittal11v49CommaDown": { - "codepoint": "U+E397", - "description": "11:49 comma down" - }, - "accSagittal11v49CommaUp": { - "codepoint": "U+E396", - "description": "11:49 comma up, (11:49C, 11M less 49C)" - }, - "accSagittal143CommaDown": { - "codepoint": "U+E395", - "description": "143 comma down" - }, - "accSagittal143CommaUp": { - "codepoint": "U+E394", - "description": "143 comma up, (143C, 13L less 11M)" - }, - "accSagittal17CommaDown": { - "codepoint": "U+E343", - "description": "17 comma down" - }, - "accSagittal17CommaUp": { - "codepoint": "U+E342", - "description": "17 comma up, (17C)" - }, - "accSagittal17KleismaDown": { - "codepoint": "U+E393", - "description": "17 kleisma down" - }, - "accSagittal17KleismaUp": { - "codepoint": "U+E392", - "description": "17 kleisma up, (17k)" - }, - "accSagittal19CommaDown": { - "codepoint": "U+E399", - "description": "19 comma down" - }, - "accSagittal19CommaUp": { - "codepoint": "U+E398", - "description": "19 comma up, (19C)" - }, - "accSagittal19SchismaDown": { - "codepoint": "U+E391", - "description": "19 schisma down" - }, - "accSagittal19SchismaUp": { - "codepoint": "U+E390", - "description": "19 schisma up, (19s)" - }, - "accSagittal23CommaDown": { - "codepoint": "U+E371", - "description": "23 comma down, 2\u00b0 down [96 EDO], 1/8-tone down" - }, - "accSagittal23CommaUp": { - "codepoint": "U+E370", - "description": "23 comma up, (23C), 2\u00b0 up [96 EDO], 1/8-tone up" - }, - "accSagittal23SmallDiesisDown": { - "codepoint": "U+E39F", - "description": "23 small diesis down" - }, - "accSagittal23SmallDiesisUp": { - "codepoint": "U+E39E", - "description": "23 small diesis up, (23S)" - }, - "accSagittal25SmallDiesisDown": { - "codepoint": "U+E307", - "description": "25 small diesis down, 2\u00b0 down [53 EDO]" - }, - "accSagittal25SmallDiesisUp": { - "codepoint": "U+E306", - "description": "25 small diesis up, (25S, ~5:13S, ~37S, 5C\u00a0plus\u00a05C), 2\u00b0 up [53 EDO]" - }, - "accSagittal35LargeDiesisDown": { - "codepoint": "U+E30F", - "description": "35 large diesis down, 2\u00b0 down [50 EDO], 5/18-tone down" - }, - "accSagittal35LargeDiesisUp": { - "codepoint": "U+E30E", - "description": "35 large diesis up, (35L, ~13L, ~125L, sharp less 35M), 2\u00b050 up" - }, - "accSagittal35MediumDiesisDown": { - "codepoint": "U+E309", - "description": "35 medium diesis down, 1\u00b0[50] 2\u00b0[27] down, 2/9-tone down" - }, - "accSagittal35MediumDiesisUp": { - "codepoint": "U+E308", - "description": "35 medium diesis up, (35M, ~13M, ~125M, 5C\u00a0plus\u00a07C), 2/9-tone up" - }, - "accSagittal49LargeDiesisDown": { - "codepoint": "U+E3A9", - "description": "49 large diesis down" - }, - "accSagittal49LargeDiesisUp": { - "codepoint": "U+E3A8", - "description": "49 large diesis up, (49L, ~31L, apotome less 49M)" - }, - "accSagittal49MediumDiesisDown": { - "codepoint": "U+E3A5", - "description": "49 medium diesis down" - }, - "accSagittal49MediumDiesisUp": { - "codepoint": "U+E3A4", - "description": "49 medium diesis up, (49M, ~31M, 7C plus 7C)" - }, - "accSagittal49SmallDiesisDown": { - "codepoint": "U+E39D", - "description": "49 small diesis down" - }, - "accSagittal49SmallDiesisUp": { - "codepoint": "U+E39C", - "description": "49 small diesis up, (49S, ~31S)" - }, - "accSagittal55CommaDown": { - "codepoint": "U+E345", - "description": "55 comma down, 3\u00b0 down [96 EDO], 3/16-tone down" - }, - "accSagittal55CommaUp": { - "codepoint": "U+E344", - "description": "55 comma up, (55C, 11M less 5C), 3\u00b0up [96 EDO], 3/16-tone up" - }, - "accSagittal5CommaDown": { - "codepoint": "U+E303", - "description": "5 comma down, 1\u00b0 down [22 27 29 34 41 46 53 96 EDOs], 1/12-tone down" - }, - "accSagittal5CommaUp": { - "codepoint": "U+E302", - "description": "5 comma up, (5C), 1\u00b0 up [22 27 29 34 41 46 53 96 EDOs], 1/12-tone up" - }, - "accSagittal5v11SmallDiesisDown": { - "codepoint": "U+E349", - "description": "5:11 small diesis down" - }, - "accSagittal5v11SmallDiesisUp": { - "codepoint": "U+E348", - "description": "5:11 small diesis up, (5:11S, ~7:13S, ~11:17S, 5:7k plus 7:11C)" - }, - "accSagittal5v13LargeDiesisDown": { - "codepoint": "U+E3AD", - "description": "5:13 large diesis down" - }, - "accSagittal5v13LargeDiesisUp": { - "codepoint": "U+E3AC", - "description": "5:13 large diesis up, (5:13L, ~37L, apotome less 5:13M)" - }, - "accSagittal5v13MediumDiesisDown": { - "codepoint": "U+E3A1", - "description": "5:13 medium diesis down" - }, - "accSagittal5v13MediumDiesisUp": { - "codepoint": "U+E3A0", - "description": "5:13 medium diesis up, (5:13M, ~37M, 5C plus 13C)" - }, - "accSagittal5v19CommaDown": { - "codepoint": "U+E373", - "description": "5:19 comma down, 1/20-tone down" - }, - "accSagittal5v19CommaUp": { - "codepoint": "U+E372", - "description": "5:19 comma up, (5:19C, 5C plus 19s), 1/20-tone up" - }, - "accSagittal5v23SmallDiesisDown": { - "codepoint": "U+E375", - "description": "5:23 small diesis down, 2\u00b0 down [60 EDO], 1/5-tone down" - }, - "accSagittal5v23SmallDiesisUp": { - "codepoint": "U+E374", - "description": "5:23 small diesis up, (5:23S, 5C plus 23C), 2\u00b0 up [60 EDO], 1/5-tone up" - }, - "accSagittal5v49MediumDiesisDown": { - "codepoint": "U+E3A7", - "description": "5:49 medium diesis down" - }, - "accSagittal5v49MediumDiesisUp": { - "codepoint": "U+E3A6", - "description": "5:49 medium diesis up, (5:49M, half apotome)" - }, - "accSagittal5v7KleismaDown": { - "codepoint": "U+E301", - "description": "5:7 kleisma down" - }, - "accSagittal5v7KleismaUp": { - "codepoint": "U+E300", - "description": "5:7 kleisma up, (5:7k, ~11:13k, 7C\u00a0less\u00a05C)" - }, - "accSagittal7CommaDown": { - "codepoint": "U+E305", - "description": "7 comma down, 1\u00b0 down [43 EDO], 2\u00b0 down [72 EDO], 1/6-tone down" - }, - "accSagittal7CommaUp": { - "codepoint": "U+E304", - "description": "7 comma up, (7C), 1\u00b0 up [43 EDO], 2\u00b0 up [72 EDO], 1/6-tone up" - }, - "accSagittal7v11CommaDown": { - "codepoint": "U+E347", - "description": "7:11 comma down, 1\u00b0 down [60 EDO], 1/10-tone down" - }, - "accSagittal7v11CommaUp": { - "codepoint": "U+E346", - "description": "7:11 comma up, (7:11C, ~13:17S, ~29S, 11L less 7C), 1\u00b0 up [60 EDO]" - }, - "accSagittal7v11KleismaDown": { - "codepoint": "U+E341", - "description": "7:11 kleisma down" - }, - "accSagittal7v11KleismaUp": { - "codepoint": "U+E340", - "description": "7:11 kleisma up, (7:11k, ~29k)" - }, - "accSagittal7v19CommaDown": { - "codepoint": "U+E39B", - "description": "7:19 comma down" - }, - "accSagittal7v19CommaUp": { - "codepoint": "U+E39A", - "description": "7:19 comma up, (7:19C, 7C less 19s)" - }, - "accSagittalAcute": { - "codepoint": "U+E3F2", - "description": "Acute, 5 schisma up (5s), 2 cents up" - }, - "accSagittalDoubleFlat": { - "codepoint": "U+E335", - "description": "Double flat, (2 apotomes down)[almost all EDOs], whole-tone down" - }, - "accSagittalDoubleFlat11v49CUp": { - "codepoint": "U+E3E9", - "description": "Double flat 11:49C-up" - }, - "accSagittalDoubleFlat143CUp": { - "codepoint": "U+E3EB", - "description": "Double flat 143C-up" - }, - "accSagittalDoubleFlat17CUp": { - "codepoint": "U+E365", - "description": "Double flat 17C-up" - }, - "accSagittalDoubleFlat17kUp": { - "codepoint": "U+E3ED", - "description": "Double flat 17k-up" - }, - "accSagittalDoubleFlat19CUp": { - "codepoint": "U+E3E7", - "description": "Double flat 19C-up" - }, - "accSagittalDoubleFlat19sUp": { - "codepoint": "U+E3EF", - "description": "Double flat 19s-up" - }, - "accSagittalDoubleFlat23CUp": { - "codepoint": "U+E387", - "description": "Double flat 23C-up, 14\u00b0 down [96 EDO], 7/8-tone down" - }, - "accSagittalDoubleFlat23SUp": { - "codepoint": "U+E3E1", - "description": "Double flat 23S-up" - }, - "accSagittalDoubleFlat25SUp": { - "codepoint": "U+E32D", - "description": "Double flat 25S-up, 8\u00b0down [53 EDO]" - }, - "accSagittalDoubleFlat49SUp": { - "codepoint": "U+E3E3", - "description": "Double flat 49S-up" - }, - "accSagittalDoubleFlat55CUp": { - "codepoint": "U+E363", - "description": "Double flat 55C-up, 13\u00b0 down [96 EDO], 13/16-tone down" - }, - "accSagittalDoubleFlat5CUp": { - "codepoint": "U+E331", - "description": "Double flat 5C-up, 5\u00b0[22 29] 7\u00b0[34 41] 9\u00b053 down, 11/12 tone down" - }, - "accSagittalDoubleFlat5v11SUp": { - "codepoint": "U+E35F", - "description": "Double flat 5:11S-up" - }, - "accSagittalDoubleFlat5v19CUp": { - "codepoint": "U+E385", - "description": "Double flat 5:19C-up, 19/20-tone down" - }, - "accSagittalDoubleFlat5v23SUp": { - "codepoint": "U+E383", - "description": "Double flat 5:23S-up, 8\u00b0 down [60 EDO], 4/5-tone down" - }, - "accSagittalDoubleFlat5v7kUp": { - "codepoint": "U+E333", - "description": "Double flat 5:7k-up" - }, - "accSagittalDoubleFlat7CUp": { - "codepoint": "U+E32F", - "description": "Double flat 7C-up, 5\u00b0 down [43 EDO], 10\u00b0 down [72 EDO], 5/6-tone down" - }, - "accSagittalDoubleFlat7v11CUp": { - "codepoint": "U+E361", - "description": "Double flat 7:11C-up, 9\u00b0 down [60 EDO], 9/10-tone down" - }, - "accSagittalDoubleFlat7v11kUp": { - "codepoint": "U+E367", - "description": "Double flat 7:11k-up" - }, - "accSagittalDoubleFlat7v19CUp": { - "codepoint": "U+E3E5", - "description": "Double flat 7:19C-up" - }, - "accSagittalDoubleSharp": { - "codepoint": "U+E334", - "description": "Double sharp, (2 apotomes up)[almost all EDOs], whole-tone up" - }, - "accSagittalDoubleSharp11v49CDown": { - "codepoint": "U+E3E8", - "description": "Double sharp 11:49C-down" - }, - "accSagittalDoubleSharp143CDown": { - "codepoint": "U+E3EA", - "description": "Double sharp 143C-down" - }, - "accSagittalDoubleSharp17CDown": { - "codepoint": "U+E364", - "description": "Double sharp 17C-down" - }, - "accSagittalDoubleSharp17kDown": { - "codepoint": "U+E3EC", - "description": "Double sharp 17k-down" - }, - "accSagittalDoubleSharp19CDown": { - "codepoint": "U+E3E6", - "description": "Double sharp 19C-down" - }, - "accSagittalDoubleSharp19sDown": { - "codepoint": "U+E3EE", - "description": "Double sharp 19s-down" - }, - "accSagittalDoubleSharp23CDown": { - "codepoint": "U+E386", - "description": "Double sharp 23C-down, 14\u00b0up [96 EDO], 7/8-tone up" - }, - "accSagittalDoubleSharp23SDown": { - "codepoint": "U+E3E0", - "description": "Double sharp 23S-down" - }, - "accSagittalDoubleSharp25SDown": { - "codepoint": "U+E32C", - "description": "Double sharp 25S-down, 8\u00b0up [53 EDO]" - }, - "accSagittalDoubleSharp49SDown": { - "codepoint": "U+E3E2", - "description": "Double sharp 49S-down" - }, - "accSagittalDoubleSharp55CDown": { - "codepoint": "U+E362", - "description": "Double sharp 55C-down, 13\u00b0 up [96 EDO], 13/16-tone up" - }, - "accSagittalDoubleSharp5CDown": { - "codepoint": "U+E330", - "description": "Double sharp 5C-down, 5\u00b0[22 29] 7\u00b0[34 41] 9\u00b053 up, 11/12 tone up" - }, - "accSagittalDoubleSharp5v11SDown": { - "codepoint": "U+E35E", - "description": "Double sharp 5:11S-down" - }, - "accSagittalDoubleSharp5v19CDown": { - "codepoint": "U+E384", - "description": "Double sharp 5:19C-down, 19/20-tone up" - }, - "accSagittalDoubleSharp5v23SDown": { - "codepoint": "U+E382", - "description": "Double sharp 5:23S-down, 8\u00b0 up [60 EDO], 4/5-tone up" - }, - "accSagittalDoubleSharp5v7kDown": { - "codepoint": "U+E332", - "description": "Double sharp 5:7k-down" - }, - "accSagittalDoubleSharp7CDown": { - "codepoint": "U+E32E", - "description": "Double sharp 7C-down, 5\u00b0[43] 10\u00b0[72] up, 5/6-tone up" - }, - "accSagittalDoubleSharp7v11CDown": { - "codepoint": "U+E360", - "description": "Double sharp 7:11C-down, 9\u00b0 up [60 EDO], 9/10-tone up" - }, - "accSagittalDoubleSharp7v11kDown": { - "codepoint": "U+E366", - "description": "Double sharp 7:11k-down" - }, - "accSagittalDoubleSharp7v19CDown": { - "codepoint": "U+E3E4", - "description": "Double sharp 7:19C-down" - }, - "accSagittalFlat": { - "codepoint": "U+E319", - "description": "Flat, (apotome down)[almost all EDOs], 1/2-tone down" - }, - "accSagittalFlat11LDown": { - "codepoint": "U+E329", - "description": "Flat 11L-down, 8\u00b0 up [46 EDO]" - }, - "accSagittalFlat11MDown": { - "codepoint": "U+E327", - "description": "Flat 11M-down, 3\u00b0 down [17 31 EDOs], 7\u00b0 down [46 EDO], 3/4-tone down" - }, - "accSagittalFlat11v19LDown": { - "codepoint": "U+E3DB", - "description": "Flat 11:19L-down" - }, - "accSagittalFlat11v19MDown": { - "codepoint": "U+E3D3", - "description": "Flat 11:19M-down" - }, - "accSagittalFlat11v49CDown": { - "codepoint": "U+E3C7", - "description": "Flat 11:49C-down" - }, - "accSagittalFlat11v49CUp": { - "codepoint": "U+E3B9", - "description": "Flat 11:49C-up" - }, - "accSagittalFlat143CDown": { - "codepoint": "U+E3C5", - "description": "Flat 143C-down" - }, - "accSagittalFlat143CUp": { - "codepoint": "U+E3BB", - "description": "Flat 143C-up" - }, - "accSagittalFlat17CDown": { - "codepoint": "U+E357", - "description": "Flat 17C-down" - }, - "accSagittalFlat17CUp": { - "codepoint": "U+E351", - "description": "Flat 17C-up" - }, - "accSagittalFlat17kDown": { - "codepoint": "U+E3C3", - "description": "Flat 17k-down" - }, - "accSagittalFlat17kUp": { - "codepoint": "U+E3BD", - "description": "Flat 17k-up" - }, - "accSagittalFlat19CDown": { - "codepoint": "U+E3C9", - "description": "Flat 19C-down" - }, - "accSagittalFlat19CUp": { - "codepoint": "U+E3B7", - "description": "Flat 19C-up" - }, - "accSagittalFlat19sDown": { - "codepoint": "U+E3C1", - "description": "Flat 19s-down" - }, - "accSagittalFlat19sUp": { - "codepoint": "U+E3BF", - "description": "Flat 19s-up" - }, - "accSagittalFlat23CDown": { - "codepoint": "U+E37D", - "description": "Flat 23C-down, 10\u00b0 down [96 EDO], 5/8-tone down" - }, - "accSagittalFlat23CUp": { - "codepoint": "U+E37B", - "description": "Flat 23C-up, 6\u00b0 down [96 EDO], 3/8-tone down" - }, - "accSagittalFlat23SDown": { - "codepoint": "U+E3CF", - "description": "Flat 23S-down" - }, - "accSagittalFlat23SUp": { - "codepoint": "U+E3B1", - "description": "Flat 23S-up" - }, - "accSagittalFlat25SDown": { - "codepoint": "U+E323", - "description": "Flat 25S-down, 7\u00b0 down [53 EDO]" - }, - "accSagittalFlat25SUp": { - "codepoint": "U+E311", - "description": "Flat 25S-up, 3\u00b0 down [53 EDO]" - }, - "accSagittalFlat35LDown": { - "codepoint": "U+E32B", - "description": "Flat 35L-down, 5\u00b0 down [50 EDO]" - }, - "accSagittalFlat35MDown": { - "codepoint": "U+E325", - "description": "Flat 35M-down, 4\u00b0 down [50 EDO], 6\u00b0 down [27 EDO], 13/18-tone down" - }, - "accSagittalFlat49LDown": { - "codepoint": "U+E3D9", - "description": "Flat 49L-down" - }, - "accSagittalFlat49MDown": { - "codepoint": "U+E3D5", - "description": "Flat 49M-down" - }, - "accSagittalFlat49SDown": { - "codepoint": "U+E3CD", - "description": "Flat 49S-down" - }, - "accSagittalFlat49SUp": { - "codepoint": "U+E3B3", - "description": "Flat 49S-up" - }, - "accSagittalFlat55CDown": { - "codepoint": "U+E359", - "description": "Flat 55C-down, 11\u00b0 down [96 EDO], 11/16-tone down" - }, - "accSagittalFlat55CUp": { - "codepoint": "U+E34F", - "description": "Flat 55C-up, 5\u00b0 down [96 EDO], 5/16-tone down" - }, - "accSagittalFlat5CDown": { - "codepoint": "U+E31F", - "description": "Flat 5C-down, 4\u00b0[22 29] 5\u00b0[27 34 41] 6\u00b0[39 46 53] down, 7/12-tone down" - }, - "accSagittalFlat5CUp": { - "codepoint": "U+E315", - "description": "Flat 5C-up, 2\u00b0[22,29] 3\u00b0[34 41] 4\u00b0[46 53 60] down, 5/12-tone down" - }, - "accSagittalFlat5v11SDown": { - "codepoint": "U+E35D", - "description": "Flat 5:11S-down" - }, - "accSagittalFlat5v11SUp": { - "codepoint": "U+E34B", - "description": "Flat 5:11S-up" - }, - "accSagittalFlat5v13LDown": { - "codepoint": "U+E3DD", - "description": "Flat 5:13L-down" - }, - "accSagittalFlat5v13MDown": { - "codepoint": "U+E3D1", - "description": "Flat 5:13M-down" - }, - "accSagittalFlat5v19CDown": { - "codepoint": "U+E37F", - "description": "Flat 5:19C-down, 11/20-tone down" - }, - "accSagittalFlat5v19CUp": { - "codepoint": "U+E379", - "description": "Flat 5:19C-up, 9/20-tone down" - }, - "accSagittalFlat5v23SDown": { - "codepoint": "U+E381", - "description": "Flat 5:23S-down, 7\u00b0 down [60 EDO], 7/10-tone down" - }, - "accSagittalFlat5v23SUp": { - "codepoint": "U+E377", - "description": "Flat 5:23S-up, 3\u00b0 down [60 EDO], 3/10-tone down" - }, - "accSagittalFlat5v49MDown": { - "codepoint": "U+E3D7", - "description": "Flat 5:49M-down" - }, - "accSagittalFlat5v7kDown": { - "codepoint": "U+E31D", - "description": "Flat 5:7k-down" - }, - "accSagittalFlat5v7kUp": { - "codepoint": "U+E317", - "description": "Flat 5:7k-up" - }, - "accSagittalFlat7CDown": { - "codepoint": "U+E321", - "description": "Flat 7C-down, 4\u00b0 down [43 EDO], 8\u00b0 down [72 EDO], 2/3-tone down" - }, - "accSagittalFlat7CUp": { - "codepoint": "U+E313", - "description": "Flat 7C-up, 2\u00b0 down [43 EDO], 4\u00b0 down [72 EDO], 1/3-tone down" - }, - "accSagittalFlat7v11CDown": { - "codepoint": "U+E35B", - "description": "Flat 7:11C-down, 6\u00b0 down [60 EDO], 3/5- tone down" - }, - "accSagittalFlat7v11CUp": { - "codepoint": "U+E34D", - "description": "Flat 7:11C-up, 4\u00b0 down [60 EDO], 2/5-tone down" - }, - "accSagittalFlat7v11kDown": { - "codepoint": "U+E355", - "description": "Flat 7:11k-down" - }, - "accSagittalFlat7v11kUp": { - "codepoint": "U+E353", - "description": "Flat 7:11k-up" - }, - "accSagittalFlat7v19CDown": { - "codepoint": "U+E3CB", - "description": "Flat 7:19C-down" - }, - "accSagittalFlat7v19CUp": { - "codepoint": "U+E3B5", - "description": "Flat 7:19C-up" - }, - "accSagittalGrave": { - "codepoint": "U+E3F3", - "description": "Grave, 5 schisma down, 2 cents down" - }, - "accSagittalShaftDown": { - "codepoint": "U+E3F1", - "description": "Shaft down, (natural for use with only diacritics down)" - }, - "accSagittalShaftUp": { - "codepoint": "U+E3F0", - "description": "Shaft up, (natural for use with only diacritics up)" - }, - "accSagittalSharp": { - "codepoint": "U+E318", - "description": "Sharp, (apotome up)[almost all EDOs], 1/2-tone up" - }, - "accSagittalSharp11LUp": { - "codepoint": "U+E328", - "description": "Sharp 11L-up, 8\u00b0 up [46 EDO]" - }, - "accSagittalSharp11MUp": { - "codepoint": "U+E326", - "description": "Sharp 11M-up, 3\u00b0 up [17 31 EDOs], 7\u00b0 up [46 EDO], 3/4-tone up" - }, - "accSagittalSharp11v19LUp": { - "codepoint": "U+E3DA", - "description": "Sharp 11:19L-up" - }, - "accSagittalSharp11v19MUp": { - "codepoint": "U+E3D2", - "description": "Sharp 11:19M-up" - }, - "accSagittalSharp11v49CDown": { - "codepoint": "U+E3B8", - "description": "Sharp 11:49C-down" - }, - "accSagittalSharp11v49CUp": { - "codepoint": "U+E3C6", - "description": "Sharp 11:49C-up" - }, - "accSagittalSharp143CDown": { - "codepoint": "U+E3BA", - "description": "Sharp 143C-down" - }, - "accSagittalSharp143CUp": { - "codepoint": "U+E3C4", - "description": "Sharp 143C-up" - }, - "accSagittalSharp17CDown": { - "codepoint": "U+E350", - "description": "Sharp 17C-down" - }, - "accSagittalSharp17CUp": { - "codepoint": "U+E356", - "description": "Sharp 17C-up" - }, - "accSagittalSharp17kDown": { - "codepoint": "U+E3BC", - "description": "Sharp 17k-down" - }, - "accSagittalSharp17kUp": { - "codepoint": "U+E3C2", - "description": "Sharp 17k-up" - }, - "accSagittalSharp19CDown": { - "codepoint": "U+E3B6", - "description": "Sharp 19C-down" - }, - "accSagittalSharp19CUp": { - "codepoint": "U+E3C8", - "description": "Sharp 19C-up" - }, - "accSagittalSharp19sDown": { - "codepoint": "U+E3BE", - "description": "Sharp 19s-down" - }, - "accSagittalSharp19sUp": { - "codepoint": "U+E3C0", - "description": "Sharp 19s-up" - }, - "accSagittalSharp23CDown": { - "codepoint": "U+E37A", - "description": "Sharp 23C-down, 6\u00b0 up [96 EDO], 3/8-tone up" - }, - "accSagittalSharp23CUp": { - "codepoint": "U+E37C", - "description": "Sharp 23C-up, 10\u00b0 up [96 EDO], 5/8-tone up" - }, - "accSagittalSharp23SDown": { - "codepoint": "U+E3B0", - "description": "Sharp 23S-down" - }, - "accSagittalSharp23SUp": { - "codepoint": "U+E3CE", - "description": "Sharp 23S-up" - }, - "accSagittalSharp25SDown": { - "codepoint": "U+E310", - "description": "Sharp 25S-down, 3\u00b0 up [53 EDO]" - }, - "accSagittalSharp25SUp": { - "codepoint": "U+E322", - "description": "Sharp 25S-up, 7\u00b0 up [53 EDO]" - }, - "accSagittalSharp35LUp": { - "codepoint": "U+E32A", - "description": "Sharp 35L-up, 5\u00b0 up [50 EDO]" - }, - "accSagittalSharp35MUp": { - "codepoint": "U+E324", - "description": "Sharp 35M-up, 4\u00b0 up [50 EDO], 6\u00b0 up [27 EDO], 13/18-tone up" - }, - "accSagittalSharp49LUp": { - "codepoint": "U+E3D8", - "description": "Sharp 49L-up" - }, - "accSagittalSharp49MUp": { - "codepoint": "U+E3D4", - "description": "Sharp 49M-up" - }, - "accSagittalSharp49SDown": { - "codepoint": "U+E3B2", - "description": "Sharp 49S-down" - }, - "accSagittalSharp49SUp": { - "codepoint": "U+E3CC", - "description": "Sharp 49S-up" - }, - "accSagittalSharp55CDown": { - "codepoint": "U+E34E", - "description": "Sharp 55C-down, 5\u00b0 up [96 EDO], 5/16-tone up" - }, - "accSagittalSharp55CUp": { - "codepoint": "U+E358", - "description": "Sharp 55C-up, 11\u00b0 up [96 EDO], 11/16-tone up" - }, - "accSagittalSharp5CDown": { - "codepoint": "U+E314", - "description": "Sharp 5C-down, 2\u00b0[22 29] 3\u00b0[34 41] 4\u00b0[46 53 60] up, 5/12-tone up" - }, - "accSagittalSharp5CUp": { - "codepoint": "U+E31E", - "description": "Sharp 5C-up, 4\u00b0[22 29] 5\u00b0[27 34 41] 6\u00b0[39 46 53] up, 7/12-tone up" - }, - "accSagittalSharp5v11SDown": { - "codepoint": "U+E34A", - "description": "Sharp 5:11S-down" - }, - "accSagittalSharp5v11SUp": { - "codepoint": "U+E35C", - "description": "Sharp 5:11S-up" - }, - "accSagittalSharp5v13LUp": { - "codepoint": "U+E3DC", - "description": "Sharp 5:13L-up" - }, - "accSagittalSharp5v13MUp": { - "codepoint": "U+E3D0", - "description": "Sharp 5:13M-up" - }, - "accSagittalSharp5v19CDown": { - "codepoint": "U+E378", - "description": "Sharp 5:19C-down, 9/20-tone up" - }, - "accSagittalSharp5v19CUp": { - "codepoint": "U+E37E", - "description": "Sharp 5:19C-up, 11/20-tone up" - }, - "accSagittalSharp5v23SDown": { - "codepoint": "U+E376", - "description": "Sharp 5:23S-down, 3\u00b0 up [60 EDO], 3/10-tone up" - }, - "accSagittalSharp5v23SUp": { - "codepoint": "U+E380", - "description": "Sharp 5:23S-up, 7\u00b0 up [60 EDO], 7/10-tone up" - }, - "accSagittalSharp5v49MUp": { - "codepoint": "U+E3D6", - "description": "Sharp 5:49M-up, (one and a half apotomes)" - }, - "accSagittalSharp5v7kDown": { - "codepoint": "U+E316", - "description": "Sharp 5:7k-down" - }, - "accSagittalSharp5v7kUp": { - "codepoint": "U+E31C", - "description": "Sharp 5:7k-up" - }, - "accSagittalSharp7CDown": { - "codepoint": "U+E312", - "description": "Sharp 7C-down, 2\u00b0 up [43 EDO], 4\u00b0 up [72 EDO], 1/3-tone up" - }, - "accSagittalSharp7CUp": { - "codepoint": "U+E320", - "description": "Sharp 7C-up, 4\u00b0 up [43 EDO], 8\u00b0 up [72 EDO], 2/3-tone up" - }, - "accSagittalSharp7v11CDown": { - "codepoint": "U+E34C", - "description": "Sharp 7:11C-down, 4\u00b0 up [60 EDO], 2/5-tone up" - }, - "accSagittalSharp7v11CUp": { - "codepoint": "U+E35A", - "description": "Sharp 7:11C-up, 6\u00b0 up [60 EDO], 3/5- tone up" - }, - "accSagittalSharp7v11kDown": { - "codepoint": "U+E352", - "description": "Sharp 7:11k-down" - }, - "accSagittalSharp7v11kUp": { - "codepoint": "U+E354", - "description": "Sharp 7:11k-up" - }, - "accSagittalSharp7v19CDown": { - "codepoint": "U+E3B4", - "description": "Sharp 7:19C-down" - }, - "accSagittalSharp7v19CUp": { - "codepoint": "U+E3CA", - "description": "Sharp 7:19C-up" - }, - "accSagittalUnused1": { - "codepoint": "U+E31A", - "description": "Unused" - }, - "accSagittalUnused2": { - "codepoint": "U+E31B", - "description": "Unused" - }, - "accSagittalUnused3": { - "codepoint": "U+E3DE", - "description": "Unused" - }, - "accSagittalUnused4": { - "codepoint": "U+E3DF", - "description": "Unused" - }, - "accdnCombDot": { - "codepoint": "U+E8CA", - "description": "Combining accordion coupler dot" - }, - "accdnCombLH2RanksEmpty": { - "codepoint": "U+E8C8", - "description": "Combining left hand, 2 ranks, empty" - }, - "accdnCombLH3RanksEmptySquare": { - "codepoint": "U+E8C9", - "description": "Combining left hand, 3 ranks, empty (square)" - }, - "accdnCombRH3RanksEmpty": { - "codepoint": "U+E8C6", - "description": "Combining right hand, 3 ranks, empty" - }, - "accdnCombRH4RanksEmpty": { - "codepoint": "U+E8C7", - "description": "Combining right hand, 4 ranks, empty" - }, - "accdnDiatonicClef": { - "codepoint": "U+E079", - "description": "Diatonic accordion clef" - }, - "accdnLH2Ranks16Round": { - "codepoint": "U+E8BC", - "description": "Left hand, 2 ranks, 16' stop (round)" - }, - "accdnLH2Ranks8Plus16Round": { - "codepoint": "U+E8BD", - "description": "Left hand, 2 ranks, 8' stop + 16' stop (round)" - }, - "accdnLH2Ranks8Round": { - "codepoint": "U+E8BB", - "description": "Left hand, 2 ranks, 8' stop (round)" - }, - "accdnLH2RanksFullMasterRound": { - "codepoint": "U+E8C0", - "description": "Left hand, 2 ranks, full master (round)" - }, - "accdnLH2RanksMasterPlus16Round": { - "codepoint": "U+E8BF", - "description": "Left hand, 2 ranks, master + 16' stop (round)" - }, - "accdnLH2RanksMasterRound": { - "codepoint": "U+E8BE", - "description": "Left hand, 2 ranks, master (round)" - }, - "accdnLH3Ranks2Plus8Square": { - "codepoint": "U+E8C4", - "description": "Left hand, 3 ranks, 2' stop + 8' stop (square)" - }, - "accdnLH3Ranks2Square": { - "codepoint": "U+E8C2", - "description": "Left hand, 3 ranks, 2' stop (square)" - }, - "accdnLH3Ranks8Square": { - "codepoint": "U+E8C1", - "description": "Left hand, 3 ranks, 8' stop (square)" - }, - "accdnLH3RanksDouble8Square": { - "codepoint": "U+E8C3", - "description": "Left hand, 3 ranks, double 8' stop (square)" - }, - "accdnLH3RanksTuttiSquare": { - "codepoint": "U+E8C5", - "description": "Left hand, 3 ranks, 2' stop + double 8' stop (tutti) (square)" - }, - "accdnPull": { - "codepoint": "U+E8CC", - "description": "Pull" - }, - "accdnPush": { - "codepoint": "U+E8CB", - "description": "Push" - }, - "accdnRH3RanksAccordion": { - "codepoint": "U+E8AC", - "description": "Right hand, 3 ranks, 8' stop + upper tremolo 8' stop + 16' stop (accordion)" - }, - "accdnRH3RanksAuthenticMusette": { - "codepoint": "U+E8A8", - "description": "Right hand, 3 ranks, lower tremolo 8' stop + 8' stop + upper tremolo 8' stop (authentic musette)" - }, - "accdnRH3RanksBandoneon": { - "codepoint": "U+E8AB", - "description": "Right hand, 3 ranks, 8' stop + 16' stop (bandone\u00f3n)" - }, - "accdnRH3RanksBassoon": { - "codepoint": "U+E8A4", - "description": "Right hand, 3 ranks, 16' stop (bassoon)" - }, - "accdnRH3RanksClarinet": { - "codepoint": "U+E8A1", - "description": "Right hand, 3 ranks, 8' stop (clarinet)" - }, - "accdnRH3RanksDoubleTremoloLower8ve": { - "codepoint": "U+E8B1", - "description": "Right hand, 3 ranks, lower tremolo 8' stop + 8' stop + upper tremolo 8' stop + 16' stop" - }, - "accdnRH3RanksDoubleTremoloUpper8ve": { - "codepoint": "U+E8B2", - "description": "Right hand, 3 ranks, 4' stop + lower tremolo 8' stop + 8' stop + upper tremolo 8' stop" - }, - "accdnRH3RanksFullFactory": { - "codepoint": "U+E8B3", - "description": "Right hand, 3 ranks, 4' stop + lower tremolo 8' stop + 8' stop + upper tremolo 8' stop + 16' stop" - }, - "accdnRH3RanksHarmonium": { - "codepoint": "U+E8AA", - "description": "Right hand, 3 ranks, 4' stop + 8' stop + 16' stop (harmonium)" - }, - "accdnRH3RanksImitationMusette": { - "codepoint": "U+E8A7", - "description": "Right hand, 3 ranks, 4' stop + 8' stop + upper tremolo 8' stop (imitation musette)" - }, - "accdnRH3RanksLowerTremolo8": { - "codepoint": "U+E8A3", - "description": "Right hand, 3 ranks, lower tremolo 8' stop" - }, - "accdnRH3RanksMaster": { - "codepoint": "U+E8AD", - "description": "Right hand, 3 ranks, 4' stop + lower tremolo 8' stop + upper tremolo 8' stop + 16' stop (master)" - }, - "accdnRH3RanksOboe": { - "codepoint": "U+E8A5", - "description": "Right hand, 3 ranks, 4' stop + 8' stop (oboe)" - }, - "accdnRH3RanksOrgan": { - "codepoint": "U+E8A9", - "description": "Right hand, 3 ranks, 4' stop + 16' stop (organ)" - }, - "accdnRH3RanksPiccolo": { - "codepoint": "U+E8A0", - "description": "Right hand, 3 ranks, 4' stop (piccolo)" - }, - "accdnRH3RanksTremoloLower8ve": { - "codepoint": "U+E8AF", - "description": "Right hand, 3 ranks, lower tremolo 8' stop + upper tremolo 8' stop + 16' stop" - }, - "accdnRH3RanksTremoloUpper8ve": { - "codepoint": "U+E8B0", - "description": "Right hand, 3 ranks, 4' stop + lower tremolo 8' stop + upper tremolo 8' stop" - }, - "accdnRH3RanksTwoChoirs": { - "codepoint": "U+E8AE", - "description": "Right hand, 3 ranks, lower tremolo 8' stop + upper tremolo 8' stop" - }, - "accdnRH3RanksUpperTremolo8": { - "codepoint": "U+E8A2", - "description": "Right hand, 3 ranks, upper tremolo 8' stop" - }, - "accdnRH3RanksViolin": { - "codepoint": "U+E8A6", - "description": "Right hand, 3 ranks, 8' stop + upper tremolo 8' stop (violin)" - }, - "accdnRH4RanksAlto": { - "codepoint": "U+E8B5", - "description": "Right hand, 4 ranks, alto" - }, - "accdnRH4RanksBassAlto": { - "codepoint": "U+E8BA", - "description": "Right hand, 4 ranks, bass/alto" - }, - "accdnRH4RanksMaster": { - "codepoint": "U+E8B7", - "description": "Right hand, 4 ranks, master" - }, - "accdnRH4RanksSoftBass": { - "codepoint": "U+E8B8", - "description": "Right hand, 4 ranks, soft bass" - }, - "accdnRH4RanksSoftTenor": { - "codepoint": "U+E8B9", - "description": "Right hand, 4 ranks, soft tenor" - }, - "accdnRH4RanksSoprano": { - "codepoint": "U+E8B4", - "description": "Right hand, 4 ranks, soprano" - }, - "accdnRH4RanksTenor": { - "codepoint": "U+E8B6", - "description": "Right hand, 4 ranks, tenor" - }, - "accdnRicochet2": { - "codepoint": "U+E8CD", - "description": "Ricochet (2 tones)" - }, - "accdnRicochet3": { - "codepoint": "U+E8CE", - "description": "Ricochet (3 tones)" - }, - "accdnRicochet4": { - "codepoint": "U+E8CF", - "description": "Ricochet (4 tones)" - }, - "accdnRicochet5": { - "codepoint": "U+E8D0", - "description": "Ricochet (5 tones)" - }, - "accdnRicochet6": { - "codepoint": "U+E8D1", - "description": "Ricochet (6 tones)" - }, - "accdnRicochetStem2": { - "codepoint": "U+E8D2", - "description": "Combining ricochet for stem (2 tones)" - }, - "accdnRicochetStem3": { - "codepoint": "U+E8D3", - "description": "Combining ricochet for stem (3 tones)" - }, - "accdnRicochetStem4": { - "codepoint": "U+E8D4", - "description": "Combining ricochet for stem (4 tones)" - }, - "accdnRicochetStem5": { - "codepoint": "U+E8D5", - "description": "Combining ricochet for stem (5 tones)" - }, - "accdnRicochetStem6": { - "codepoint": "U+E8D6", - "description": "Combining ricochet for stem (6 tones)" - }, - "accidental1CommaFlat": { - "codepoint": "U+E454", - "description": "1-comma flat" - }, - "accidental1CommaSharp": { - "codepoint": "U+E450", - "description": "1-comma sharp" - }, - "accidental2CommaFlat": { - "codepoint": "U+E455", - "description": "2-comma flat" - }, - "accidental2CommaSharp": { - "codepoint": "U+E451", - "description": "2-comma sharp" - }, - "accidental3CommaFlat": { - "codepoint": "U+E456", - "description": "3-comma flat" - }, - "accidental3CommaSharp": { - "codepoint": "U+E452", - "description": "3-comma sharp" - }, - "accidental4CommaFlat": { - "codepoint": "U+E457", - "description": "4-comma flat" - }, - "accidental5CommaSharp": { - "codepoint": "U+E453", - "description": "5-comma sharp" - }, - "accidentalArrowDown": { - "codepoint": "U+E27B", - "description": "Arrow down (lower by one quarter-tone)" - }, - "accidentalArrowUp": { - "codepoint": "U+E27A", - "description": "Arrow up (raise by one quarter-tone)" - }, - "accidentalBakiyeFlat": { - "codepoint": "U+E442", - "description": "Bakiye (flat)" - }, - "accidentalBakiyeSharp": { - "codepoint": "U+E445", - "description": "Bakiye (sharp)" - }, - "accidentalBracketLeft": { - "codepoint": "U+E26C", - "description": "Accidental bracket, left" - }, - "accidentalBracketRight": { - "codepoint": "U+E26D", - "description": "Accidental bracket, right" - }, - "accidentalBuyukMucennebFlat": { - "codepoint": "U+E440", - "description": "B\u00fcy\u00fck m\u00fccenneb (flat)" - }, - "accidentalBuyukMucennebSharp": { - "codepoint": "U+E447", - "description": "B\u00fcy\u00fck m\u00fccenneb (sharp)" - }, - "accidentalCombiningCloseCurlyBrace": { - "codepoint": "U+E2EF", - "description": "Combining close curly brace" - }, - "accidentalCombiningLower17Schisma": { - "codepoint": "U+E2E6", - "description": "Combining lower by one 17-limit schisma" - }, - "accidentalCombiningLower19Schisma": { - "codepoint": "U+E2E8", - "description": "Combining lower by one 19-limit schisma" - }, - "accidentalCombiningLower23Limit29LimitComma": { - "codepoint": "U+E2EA", - "description": "Combining lower by one 23-limit comma or 29-limit comma" - }, - "accidentalCombiningLower31Schisma": { - "codepoint": "U+E2EC", - "description": "Combining lower by one 31-limit schisma" - }, - "accidentalCombiningLower53LimitComma": { - "codepoint": "U+E2F7", - "description": "Combining lower by one 53-limit comma" - }, - "accidentalCombiningOpenCurlyBrace": { - "codepoint": "U+E2EE", - "description": "Combining open curly brace" - }, - "accidentalCombiningRaise17Schisma": { - "codepoint": "U+E2E7", - "description": "Combining raise by one 17-limit schisma" - }, - "accidentalCombiningRaise19Schisma": { - "codepoint": "U+E2E9", - "description": "Combining raise by one 19-limit schisma" - }, - "accidentalCombiningRaise23Limit29LimitComma": { - "codepoint": "U+E2EB", - "description": "Combining raise by one 23-limit comma or 29-limit comma" - }, - "accidentalCombiningRaise31Schisma": { - "codepoint": "U+E2ED", - "description": "Combining raise by one 31-limit schisma" - }, - "accidentalCombiningRaise53LimitComma": { - "codepoint": "U+E2F8", - "description": "Combining raise by one 53-limit comma" - }, - "accidentalCommaSlashDown": { - "codepoint": "U+E47A", - "description": "Syntonic/Didymus comma (80:81) down (Bosanquet)" - }, - "accidentalCommaSlashUp": { - "codepoint": "U+E479", - "description": "Syntonic/Didymus comma (80:81) up (Bosanquet)" - }, - "accidentalDoubleFlat": { - "alternateCodepoint": "U+1D12B", - "codepoint": "U+E264", - "description": "Double flat" - }, - "accidentalDoubleFlatArabic": { - "codepoint": "U+ED30", - "description": "Arabic double flat" - }, - "accidentalDoubleFlatEqualTempered": { - "codepoint": "U+E2F0", - "description": "Double flat equal tempered semitone" - }, - "accidentalDoubleFlatOneArrowDown": { - "codepoint": "U+E2C0", - "description": "Double flat lowered by one syntonic comma" - }, - "accidentalDoubleFlatOneArrowUp": { - "codepoint": "U+E2C5", - "description": "Double flat raised by one syntonic comma" - }, - "accidentalDoubleFlatReversed": { - "codepoint": "U+E483", - "description": "Reversed double flat" - }, - "accidentalDoubleFlatThreeArrowsDown": { - "codepoint": "U+E2D4", - "description": "Double flat lowered by three syntonic commas" - }, - "accidentalDoubleFlatThreeArrowsUp": { - "codepoint": "U+E2D9", - "description": "Double flat raised by three syntonic commas" - }, - "accidentalDoubleFlatTurned": { - "codepoint": "U+E485", - "description": "Turned double flat" - }, - "accidentalDoubleFlatTwoArrowsDown": { - "codepoint": "U+E2CA", - "description": "Double flat lowered by two syntonic commas" - }, - "accidentalDoubleFlatTwoArrowsUp": { - "codepoint": "U+E2CF", - "description": "Double flat raised by two syntonic commas" - }, - "accidentalDoubleSharp": { - "alternateCodepoint": "U+1D12A", - "codepoint": "U+E263", - "description": "Double sharp" - }, - "accidentalDoubleSharpArabic": { - "codepoint": "U+ED38", - "description": "Arabic double sharp" - }, - "accidentalDoubleSharpEqualTempered": { - "codepoint": "U+E2F4", - "description": "Double sharp equal tempered semitone" - }, - "accidentalDoubleSharpOneArrowDown": { - "codepoint": "U+E2C4", - "description": "Double sharp lowered by one syntonic comma" - }, - "accidentalDoubleSharpOneArrowUp": { - "codepoint": "U+E2C9", - "description": "Double sharp raised by one syntonic comma" - }, - "accidentalDoubleSharpThreeArrowsDown": { - "codepoint": "U+E2D8", - "description": "Double sharp lowered by three syntonic commas" - }, - "accidentalDoubleSharpThreeArrowsUp": { - "codepoint": "U+E2DD", - "description": "Double sharp raised by three syntonic commas" - }, - "accidentalDoubleSharpTwoArrowsDown": { - "codepoint": "U+E2CE", - "description": "Double sharp lowered by two syntonic commas" - }, - "accidentalDoubleSharpTwoArrowsUp": { - "codepoint": "U+E2D3", - "description": "Double sharp raised by two syntonic commas" - }, - "accidentalEnharmonicAlmostEqualTo": { - "codepoint": "U+E2FA", - "description": "Enharmonically reinterpret accidental almost equal to" - }, - "accidentalEnharmonicEquals": { - "codepoint": "U+E2FB", - "description": "Enharmonically reinterpret accidental equals" - }, - "accidentalEnharmonicTilde": { - "codepoint": "U+E2F9", - "description": "Enharmonically reinterpret accidental tilde" - }, - "accidentalFilledReversedFlatAndFlat": { - "codepoint": "U+E296", - "description": "Filled reversed flat and flat" - }, - "accidentalFilledReversedFlatAndFlatArrowDown": { - "codepoint": "U+E298", - "description": "Filled reversed flat and flat with arrow down" - }, - "accidentalFilledReversedFlatAndFlatArrowUp": { - "codepoint": "U+E297", - "description": "Filled reversed flat and flat with arrow up" - }, - "accidentalFilledReversedFlatArrowDown": { - "codepoint": "U+E293", - "description": "Filled reversed flat with arrow down" - }, - "accidentalFilledReversedFlatArrowUp": { - "codepoint": "U+E292", - "description": "Filled reversed flat with arrow up" - }, - "accidentalFiveQuarterTonesFlatArrowDown": { - "codepoint": "U+E279", - "description": "Five-quarter-tones flat" - }, - "accidentalFiveQuarterTonesSharpArrowUp": { - "codepoint": "U+E276", - "description": "Five-quarter-tones sharp" - }, - "accidentalFlat": { - "alternateCodepoint": "U+266D", - "codepoint": "U+E260", - "description": "Flat" - }, - "accidentalFlatArabic": { - "codepoint": "U+ED32", - "description": "Arabic half-tone flat" - }, - "accidentalFlatEqualTempered": { - "codepoint": "U+E2F1", - "description": "Flat equal tempered semitone" - }, - "accidentalFlatLoweredStockhausen": { - "codepoint": "U+ED53", - "description": "Lowered flat (Stockhausen)" - }, - "accidentalFlatOneArrowDown": { - "codepoint": "U+E2C1", - "description": "Flat lowered by one syntonic comma" - }, - "accidentalFlatOneArrowUp": { - "codepoint": "U+E2C6", - "description": "Flat raised by one syntonic comma" - }, - "accidentalFlatRaisedStockhausen": { - "codepoint": "U+ED52", - "description": "Raised flat (Stockhausen)" - }, - "accidentalFlatRepeatedLineStockhausen": { - "codepoint": "U+ED5C", - "description": "Repeated flat, note on line (Stockhausen)" - }, - "accidentalFlatRepeatedSpaceStockhausen": { - "codepoint": "U+ED5B", - "description": "Repeated flat, note in space (Stockhausen)" - }, - "accidentalFlatThreeArrowsDown": { - "codepoint": "U+E2D5", - "description": "Flat lowered by three syntonic commas" - }, - "accidentalFlatThreeArrowsUp": { - "codepoint": "U+E2DA", - "description": "Flat raised by three syntonic commas" - }, - "accidentalFlatTurned": { - "codepoint": "U+E484", - "description": "Turned flat" - }, - "accidentalFlatTwoArrowsDown": { - "codepoint": "U+E2CB", - "description": "Flat lowered by two syntonic commas" - }, - "accidentalFlatTwoArrowsUp": { - "codepoint": "U+E2D0", - "description": "Flat raised by two syntonic commas" - }, - "accidentalHalfSharpArrowDown": { - "codepoint": "U+E29A", - "description": "Half sharp with arrow down" - }, - "accidentalHalfSharpArrowUp": { - "codepoint": "U+E299", - "description": "Half sharp with arrow up" - }, - "accidentalJohnston13": { - "codepoint": "U+E2B6", - "description": "Thirteen (raise by 65:64)" - }, - "accidentalJohnston31": { - "codepoint": "U+E2B7", - "description": "Inverted 13 (lower by 65:64)" - }, - "accidentalJohnstonDown": { - "codepoint": "U+E2B5", - "description": "Down arrow (lower by 33:32)" - }, - "accidentalJohnstonEl": { - "codepoint": "U+E2B2", - "description": "Inverted seven (raise by 36:35)" - }, - "accidentalJohnstonMinus": { - "codepoint": "U+E2B1", - "description": "Minus (lower by 81:80)" - }, - "accidentalJohnstonPlus": { - "codepoint": "U+E2B0", - "description": "Plus (raise by 81:80)" - }, - "accidentalJohnstonSeven": { - "codepoint": "U+E2B3", - "description": "Seven (lower by 36:35)" - }, - "accidentalJohnstonUp": { - "codepoint": "U+E2B4", - "description": "Up arrow (raise by 33:32)" - }, - "accidentalKomaFlat": { - "codepoint": "U+E443", - "description": "Koma (flat)" - }, - "accidentalKomaSharp": { - "codepoint": "U+E444", - "description": "Koma (sharp)" - }, - "accidentalKoron": { - "codepoint": "U+E460", - "description": "Koron (quarter tone flat)" - }, - "accidentalKucukMucennebFlat": { - "codepoint": "U+E441", - "description": "K\u00fc\u00e7\u00fck m\u00fccenneb (flat)" - }, - "accidentalKucukMucennebSharp": { - "codepoint": "U+E446", - "description": "K\u00fc\u00e7\u00fck m\u00fccenneb (sharp)" - }, - "accidentalLargeDoubleSharp": { - "codepoint": "U+E47D", - "description": "Large double sharp" - }, - "accidentalLowerOneSeptimalComma": { - "codepoint": "U+E2DE", - "description": "Lower by one septimal comma" - }, - "accidentalLowerOneTridecimalQuartertone": { - "codepoint": "U+E2E4", - "description": "Lower by one tridecimal quartertone" - }, - "accidentalLowerOneUndecimalQuartertone": { - "codepoint": "U+E2E2", - "description": "Lower by one undecimal quartertone" - }, - "accidentalLowerTwoSeptimalCommas": { - "codepoint": "U+E2E0", - "description": "Lower by two septimal commas" - }, - "accidentalLoweredStockhausen": { - "codepoint": "U+ED51", - "description": "Lowered (Stockhausen)" - }, - "accidentalNarrowReversedFlat": { - "codepoint": "U+E284", - "description": "Narrow reversed flat(quarter-tone flat)" - }, - "accidentalNarrowReversedFlatAndFlat": { - "codepoint": "U+E285", - "description": "Narrow reversed flat and flat(three-quarter-tones flat)" - }, - "accidentalNatural": { - "alternateCodepoint": "U+266E", - "codepoint": "U+E261", - "description": "Natural" - }, - "accidentalNaturalArabic": { - "codepoint": "U+ED34", - "description": "Arabic natural" - }, - "accidentalNaturalEqualTempered": { - "codepoint": "U+E2F2", - "description": "Natural equal tempered semitone" - }, - "accidentalNaturalFlat": { - "codepoint": "U+E267", - "description": "Natural flat" - }, - "accidentalNaturalLoweredStockhausen": { - "codepoint": "U+ED55", - "description": "Lowered natural (Stockhausen)" - }, - "accidentalNaturalOneArrowDown": { - "codepoint": "U+E2C2", - "description": "Natural lowered by one syntonic comma" - }, - "accidentalNaturalOneArrowUp": { - "codepoint": "U+E2C7", - "description": "Natural raised by one syntonic comma" - }, - "accidentalNaturalRaisedStockhausen": { - "codepoint": "U+ED54", - "description": "Raised natural (Stockhausen)" - }, - "accidentalNaturalReversed": { - "codepoint": "U+E482", - "description": "Reversed natural" - }, - "accidentalNaturalSharp": { - "codepoint": "U+E268", - "description": "Natural sharp" - }, - "accidentalNaturalThreeArrowsDown": { - "codepoint": "U+E2D6", - "description": "Natural lowered by three syntonic commas" - }, - "accidentalNaturalThreeArrowsUp": { - "codepoint": "U+E2DB", - "description": "Natural raised by three syntonic commas" - }, - "accidentalNaturalTwoArrowsDown": { - "codepoint": "U+E2CC", - "description": "Natural lowered by two syntonic commas" - }, - "accidentalNaturalTwoArrowsUp": { - "codepoint": "U+E2D1", - "description": "Natural raised by two syntonic commas" - }, - "accidentalOneAndAHalfSharpsArrowDown": { - "codepoint": "U+E29C", - "description": "One and a half sharps with arrow down" - }, - "accidentalOneAndAHalfSharpsArrowUp": { - "codepoint": "U+E29B", - "description": "One and a half sharps with arrow up" - }, - "accidentalOneQuarterToneFlatFerneyhough": { - "codepoint": "U+E48F", - "description": "One-quarter-tone flat (Ferneyhough)" - }, - "accidentalOneQuarterToneFlatStockhausen": { - "codepoint": "U+ED59", - "description": "One-quarter-tone flat (Stockhausen)" - }, - "accidentalOneQuarterToneSharpFerneyhough": { - "codepoint": "U+E48E", - "description": "One-quarter-tone sharp (Ferneyhough)" - }, - "accidentalOneQuarterToneSharpStockhausen": { - "codepoint": "U+ED58", - "description": "One-quarter-tone sharp (Stockhausen)" - }, - "accidentalOneThirdToneFlatFerneyhough": { - "codepoint": "U+E48B", - "description": "One-third-tone flat (Ferneyhough)" - }, - "accidentalOneThirdToneSharpFerneyhough": { - "codepoint": "U+E48A", - "description": "One-third-tone sharp (Ferneyhough)" - }, - "accidentalParensLeft": { - "codepoint": "U+E26A", - "description": "Accidental parenthesis, left" - }, - "accidentalParensRight": { - "codepoint": "U+E26B", - "description": "Accidental parenthesis, right" - }, - "accidentalQuarterFlatEqualTempered": { - "codepoint": "U+E2F5", - "description": "Lower by one equal tempered quarter-tone" - }, - "accidentalQuarterSharpEqualTempered": { - "codepoint": "U+E2F6", - "description": "Raise by one equal tempered quarter tone" - }, - "accidentalQuarterToneFlat4": { - "alternateCodepoint": "U+1D133", - "codepoint": "U+E47F", - "description": "Quarter-tone flat" - }, - "accidentalQuarterToneFlatArabic": { - "codepoint": "U+ED33", - "description": "Arabic quarter-tone flat" - }, - "accidentalQuarterToneFlatArrowUp": { - "alternateCodepoint": "U+1D12C", - "codepoint": "U+E270", - "description": "Quarter-tone flat" - }, - "accidentalQuarterToneFlatFilledReversed": { - "codepoint": "U+E480", - "description": "Filled reversed flat (quarter-tone flat)" - }, - "accidentalQuarterToneFlatNaturalArrowDown": { - "alternateCodepoint": "U+1D12F", - "codepoint": "U+E273", - "description": "Quarter-tone flat" - }, - "accidentalQuarterToneFlatPenderecki": { - "codepoint": "U+E478", - "description": "Quarter tone flat (Penderecki)" - }, - "accidentalQuarterToneFlatStein": { - "codepoint": "U+E280", - "description": "Reversed flat (quarter-tone flat) (Stein)" - }, - "accidentalQuarterToneFlatVanBlankenburg": { - "codepoint": "U+E488", - "description": "Quarter-tone flat (van Blankenburg)" - }, - "accidentalQuarterToneSharp4": { - "alternateCodepoint": "U+1D132", - "codepoint": "U+E47E", - "description": "Quarter-tone sharp" - }, - "accidentalQuarterToneSharpArabic": { - "codepoint": "U+ED35", - "description": "Arabic quarter-tone sharp" - }, - "accidentalQuarterToneSharpArrowDown": { - "alternateCodepoint": "U+1D131", - "codepoint": "U+E275", - "description": "Quarter-tone sharp" - }, - "accidentalQuarterToneSharpBusotti": { - "codepoint": "U+E472", - "description": "Quarter tone sharp (Bussotti)" - }, - "accidentalQuarterToneSharpNaturalArrowUp": { - "alternateCodepoint": "U+1D12E", - "codepoint": "U+E272", - "description": "Quarter-tone sharp" - }, - "accidentalQuarterToneSharpStein": { - "codepoint": "U+E282", - "description": "Half sharp (quarter-tone sharp) (Stein)" - }, - "accidentalQuarterToneSharpWiggle": { - "codepoint": "U+E475", - "description": "Quarter tone sharp with wiggly tail" - }, - "accidentalRaiseOneSeptimalComma": { - "codepoint": "U+E2DF", - "description": "Raise by one septimal comma" - }, - "accidentalRaiseOneTridecimalQuartertone": { - "codepoint": "U+E2E5", - "description": "Raise by one tridecimal quartertone" - }, - "accidentalRaiseOneUndecimalQuartertone": { - "codepoint": "U+E2E3", - "description": "Raise by one undecimal quartertone" - }, - "accidentalRaiseTwoSeptimalCommas": { - "codepoint": "U+E2E1", - "description": "Raise by two septimal commas" - }, - "accidentalRaisedStockhausen": { - "codepoint": "U+ED50", - "description": "Raised (Stockhausen)" - }, - "accidentalReversedFlatAndFlatArrowDown": { - "codepoint": "U+E295", - "description": "Reversed flat and flat with arrow down" - }, - "accidentalReversedFlatAndFlatArrowUp": { - "codepoint": "U+E294", - "description": "Reversed flat and flat with arrow up" - }, - "accidentalReversedFlatArrowDown": { - "codepoint": "U+E291", - "description": "Reversed flat with arrow down" - }, - "accidentalReversedFlatArrowUp": { - "codepoint": "U+E290", - "description": "Reversed flat with arrow up" - }, - "accidentalSharp": { - "alternateCodepoint": "U+266F", - "codepoint": "U+E262", - "description": "Sharp" - }, - "accidentalSharpArabic": { - "codepoint": "U+ED36", - "description": "Arabic half-tone sharp" - }, - "accidentalSharpEqualTempered": { - "codepoint": "U+E2F3", - "description": "Sharp equal tempered semitone" - }, - "accidentalSharpLoweredStockhausen": { - "codepoint": "U+ED57", - "description": "Lowered sharp (Stockhausen)" - }, - "accidentalSharpOneArrowDown": { - "codepoint": "U+E2C3", - "description": "Sharp lowered by one syntonic comma" - }, - "accidentalSharpOneArrowUp": { - "codepoint": "U+E2C8", - "description": "Sharp raised by one syntonic comma" - }, - "accidentalSharpOneHorizontalStroke": { - "codepoint": "U+E473", - "description": "One or three quarter tones sharp" - }, - "accidentalSharpRaisedStockhausen": { - "codepoint": "U+ED56", - "description": "Raised sharp (Stockhausen)" - }, - "accidentalSharpRepeatedLineStockhausen": { - "codepoint": "U+ED5E", - "description": "Repeated sharp, note on line (Stockhausen)" - }, - "accidentalSharpRepeatedSpaceStockhausen": { - "codepoint": "U+ED5D", - "description": "Repeated sharp, note in space (Stockhausen)" - }, - "accidentalSharpReversed": { - "codepoint": "U+E481", - "description": "Reversed sharp" - }, - "accidentalSharpSharp": { - "codepoint": "U+E269", - "description": "Sharp sharp" - }, - "accidentalSharpThreeArrowsDown": { - "codepoint": "U+E2D7", - "description": "Sharp lowered by three syntonic commas" - }, - "accidentalSharpThreeArrowsUp": { - "codepoint": "U+E2DC", - "description": "Sharp raised by three syntonic commas" - }, - "accidentalSharpTwoArrowsDown": { - "codepoint": "U+E2CD", - "description": "Sharp lowered by two syntonic commas" - }, - "accidentalSharpTwoArrowsUp": { - "codepoint": "U+E2D2", - "description": "Sharp raised by two syntonic commas" - }, - "accidentalSims12Down": { - "codepoint": "U+E2A0", - "description": "1/12 tone low" - }, - "accidentalSims12Up": { - "codepoint": "U+E2A3", - "description": "1/12 tone high" - }, - "accidentalSims4Down": { - "codepoint": "U+E2A2", - "description": "1/4 tone low" - }, - "accidentalSims4Up": { - "codepoint": "U+E2A5", - "description": "1/4 tone high" - }, - "accidentalSims6Down": { - "codepoint": "U+E2A1", - "description": "1/6 tone low" - }, - "accidentalSims6Up": { - "codepoint": "U+E2A4", - "description": "1/6 tone high" - }, - "accidentalSori": { - "codepoint": "U+E461", - "description": "Sori (quarter tone sharp)" - }, - "accidentalTavenerFlat": { - "codepoint": "U+E477", - "description": "Byzantine-style Bakiye flat (Tavener)" - }, - "accidentalTavenerSharp": { - "codepoint": "U+E476", - "description": "Byzantine-style Bu\u0308yu\u0308k mu\u0308cenneb sharp (Tavener)" - }, - "accidentalThreeQuarterTonesFlatArabic": { - "codepoint": "U+ED31", - "description": "Arabic three-quarter-tones flat" - }, - "accidentalThreeQuarterTonesFlatArrowDown": { - "alternateCodepoint": "U+1D12D", - "codepoint": "U+E271", - "description": "Three-quarter-tones flat" - }, - "accidentalThreeQuarterTonesFlatArrowUp": { - "codepoint": "U+E278", - "description": "Three-quarter-tones flat" - }, - "accidentalThreeQuarterTonesFlatCouper": { - "codepoint": "U+E489", - "description": "Three-quarter-tones flat (Couper)" - }, - "accidentalThreeQuarterTonesFlatGrisey": { - "codepoint": "U+E486", - "description": "Three-quarter-tones flat (Grisey)" - }, - "accidentalThreeQuarterTonesFlatTartini": { - "codepoint": "U+E487", - "description": "Three-quarter-tones flat (Tartini)" - }, - "accidentalThreeQuarterTonesFlatZimmermann": { - "codepoint": "U+E281", - "description": "Reversed flat and flat (three-quarter-tones flat) (Zimmermann)" - }, - "accidentalThreeQuarterTonesSharpArabic": { - "codepoint": "U+ED37", - "description": "Arabic three-quarter-tones sharp" - }, - "accidentalThreeQuarterTonesSharpArrowDown": { - "codepoint": "U+E277", - "description": "Three-quarter-tones sharp" - }, - "accidentalThreeQuarterTonesSharpArrowUp": { - "alternateCodepoint": "U+1D130", - "codepoint": "U+E274", - "description": "Three-quarter-tones sharp" - }, - "accidentalThreeQuarterTonesSharpBusotti": { - "codepoint": "U+E474", - "description": "Three quarter tones sharp (Bussotti)" - }, - "accidentalThreeQuarterTonesSharpStein": { - "codepoint": "U+E283", - "description": "One and a half sharps (three-quarter-tones sharp) (Stein)" - }, - "accidentalThreeQuarterTonesSharpStockhausen": { - "codepoint": "U+ED5A", - "description": "Three-quarter-tones sharp (Stockhausen)" - }, - "accidentalTripleFlat": { - "codepoint": "U+E266", - "description": "Triple flat" - }, - "accidentalTripleSharp": { - "codepoint": "U+E265", - "description": "Triple sharp" - }, - "accidentalTwoThirdTonesFlatFerneyhough": { - "codepoint": "U+E48D", - "description": "Two-third-tones flat (Ferneyhough)" - }, - "accidentalTwoThirdTonesSharpFerneyhough": { - "codepoint": "U+E48C", - "description": "Two-third-tones sharp (Ferneyhough)" - }, - "accidentalWilsonMinus": { - "codepoint": "U+E47C", - "description": "Wilson minus (5 comma down)" - }, - "accidentalWilsonPlus": { - "codepoint": "U+E47B", - "description": "Wilson plus (5 comma up)" - }, - "accidentalWyschnegradsky10TwelfthsFlat": { - "codepoint": "U+E434", - "description": "5/6 tone flat" - }, - "accidentalWyschnegradsky10TwelfthsSharp": { - "codepoint": "U+E429", - "description": "5/6 tone sharp" - }, - "accidentalWyschnegradsky11TwelfthsFlat": { - "codepoint": "U+E435", - "description": "11/12 tone flat" - }, - "accidentalWyschnegradsky11TwelfthsSharp": { - "codepoint": "U+E42A", - "description": "11/12 tone sharp" - }, - "accidentalWyschnegradsky1TwelfthsFlat": { - "codepoint": "U+E42B", - "description": "1/12 tone flat" - }, - "accidentalWyschnegradsky1TwelfthsSharp": { - "codepoint": "U+E420", - "description": "1/12 tone sharp" - }, - "accidentalWyschnegradsky2TwelfthsFlat": { - "codepoint": "U+E42C", - "description": "1/6 tone flat" - }, - "accidentalWyschnegradsky2TwelfthsSharp": { - "codepoint": "U+E421", - "description": "1/6 tone sharp" - }, - "accidentalWyschnegradsky3TwelfthsFlat": { - "codepoint": "U+E42D", - "description": "1/4 tone flat" - }, - "accidentalWyschnegradsky3TwelfthsSharp": { - "codepoint": "U+E422", - "description": "1/4 tone sharp" - }, - "accidentalWyschnegradsky4TwelfthsFlat": { - "codepoint": "U+E42E", - "description": "1/3 tone flat" - }, - "accidentalWyschnegradsky4TwelfthsSharp": { - "codepoint": "U+E423", - "description": "1/3 tone sharp" - }, - "accidentalWyschnegradsky5TwelfthsFlat": { - "codepoint": "U+E42F", - "description": "5/12 tone flat" - }, - "accidentalWyschnegradsky5TwelfthsSharp": { - "codepoint": "U+E424", - "description": "5/12 tone sharp" - }, - "accidentalWyschnegradsky6TwelfthsFlat": { - "codepoint": "U+E430", - "description": "1/2 tone flat" - }, - "accidentalWyschnegradsky6TwelfthsSharp": { - "codepoint": "U+E425", - "description": "1/2 tone sharp" - }, - "accidentalWyschnegradsky7TwelfthsFlat": { - "codepoint": "U+E431", - "description": "7/12 tone flat" - }, - "accidentalWyschnegradsky7TwelfthsSharp": { - "codepoint": "U+E426", - "description": "7/12 tone sharp" - }, - "accidentalWyschnegradsky8TwelfthsFlat": { - "codepoint": "U+E432", - "description": "2/3 tone flat" - }, - "accidentalWyschnegradsky8TwelfthsSharp": { - "codepoint": "U+E427", - "description": "2/3 tone sharp" - }, - "accidentalWyschnegradsky9TwelfthsFlat": { - "codepoint": "U+E433", - "description": "3/4 tone flat" - }, - "accidentalWyschnegradsky9TwelfthsSharp": { - "codepoint": "U+E428", - "description": "3/4 tone sharp" - }, - "accidentalXenakisOneThirdToneSharp": { - "codepoint": "U+E470", - "description": "One-third-tone sharp (Xenakis)" - }, - "accidentalXenakisTwoThirdTonesSharp": { - "codepoint": "U+E471", - "description": "Two-third-tones sharp (Xenakis)" - }, - "analyticsChoralmelodie": { - "codepoint": "U+E86A", - "description": "Choralmelodie (Berg)" - }, - "analyticsEndStimme": { - "alternateCodepoint": "U+1D1A8", - "codepoint": "U+E863", - "description": "End of stimme" - }, - "analyticsHauptrhythmus": { - "codepoint": "U+E86B", - "description": "Hauptrhythmus (Berg)" - }, - "analyticsHauptstimme": { - "alternateCodepoint": "U+1D1A6", - "codepoint": "U+E860", - "description": "Hauptstimme" - }, - "analyticsInversion1": { - "codepoint": "U+E869", - "description": "Inversion 1" - }, - "analyticsNebenstimme": { - "alternateCodepoint": "U+1D1A7", - "codepoint": "U+E861", - "description": "Nebenstimme" - }, - "analyticsStartStimme": { - "codepoint": "U+E862", - "description": "Start of stimme" - }, - "analyticsTheme": { - "codepoint": "U+E864", - "description": "Theme" - }, - "analyticsTheme1": { - "codepoint": "U+E868", - "description": "Theme 1" - }, - "analyticsThemeInversion": { - "codepoint": "U+E867", - "description": "Inversion of theme" - }, - "analyticsThemeRetrograde": { - "codepoint": "U+E865", - "description": "Retrograde of theme" - }, - "analyticsThemeRetrogradeInversion": { - "codepoint": "U+E866", - "description": "Retrograde inversion of theme" - }, - "arpeggiatoDown": { - "alternateCodepoint": "U+1D184", - "codepoint": "U+E635", - "description": "Arpeggiato down" - }, - "arpeggiatoUp": { - "alternateCodepoint": "U+1D183", - "codepoint": "U+E634", - "description": "Arpeggiato up" - }, - "arrowBlackDown": { - "codepoint": "U+EB64", - "description": "Black arrow down (S)" - }, - "arrowBlackDownLeft": { - "codepoint": "U+EB65", - "description": "Black arrow down-left (SW)" - }, - "arrowBlackDownRight": { - "codepoint": "U+EB63", - "description": "Black arrow down-right (SE)" - }, - "arrowBlackLeft": { - "codepoint": "U+EB66", - "description": "Black arrow left (W)" - }, - "arrowBlackRight": { - "codepoint": "U+EB62", - "description": "Black arrow right (E)" - }, - "arrowBlackUp": { - "codepoint": "U+EB60", - "description": "Black arrow up (N)" - }, - "arrowBlackUpLeft": { - "codepoint": "U+EB67", - "description": "Black arrow up-left (NW)" - }, - "arrowBlackUpRight": { - "codepoint": "U+EB61", - "description": "Black arrow up-right (NE)" - }, - "arrowOpenDown": { - "codepoint": "U+EB74", - "description": "Open arrow down (S)" - }, - "arrowOpenDownLeft": { - "codepoint": "U+EB75", - "description": "Open arrow down-left (SW)" - }, - "arrowOpenDownRight": { - "codepoint": "U+EB73", - "description": "Open arrow down-right (SE)" - }, - "arrowOpenLeft": { - "codepoint": "U+EB76", - "description": "Open arrow left (W)" - }, - "arrowOpenRight": { - "codepoint": "U+EB72", - "description": "Open arrow right (E)" - }, - "arrowOpenUp": { - "codepoint": "U+EB70", - "description": "Open arrow up (N)" - }, - "arrowOpenUpLeft": { - "codepoint": "U+EB77", - "description": "Open arrow up-left (NW)" - }, - "arrowOpenUpRight": { - "codepoint": "U+EB71", - "description": "Open arrow up-right (NE)" - }, - "arrowWhiteDown": { - "codepoint": "U+EB6C", - "description": "White arrow down (S)" - }, - "arrowWhiteDownLeft": { - "codepoint": "U+EB6D", - "description": "White arrow down-left (SW)" - }, - "arrowWhiteDownRight": { - "codepoint": "U+EB6B", - "description": "White arrow down-right (SE)" - }, - "arrowWhiteLeft": { - "codepoint": "U+EB6E", - "description": "White arrow left (W)" - }, - "arrowWhiteRight": { - "codepoint": "U+EB6A", - "description": "White arrow right (E)" - }, - "arrowWhiteUp": { - "codepoint": "U+EB68", - "description": "White arrow up (N)" - }, - "arrowWhiteUpLeft": { - "codepoint": "U+EB6F", - "description": "White arrow up-left (NW)" - }, - "arrowWhiteUpRight": { - "codepoint": "U+EB69", - "description": "White arrow up-right (NE)" - }, - "arrowheadBlackDown": { - "codepoint": "U+EB7C", - "description": "Black arrowhead down (S)" - }, - "arrowheadBlackDownLeft": { - "codepoint": "U+EB7D", - "description": "Black arrowhead down-left (SW)" - }, - "arrowheadBlackDownRight": { - "codepoint": "U+EB7B", - "description": "Black arrowhead down-right (SE)" - }, - "arrowheadBlackLeft": { - "codepoint": "U+EB7E", - "description": "Black arrowhead left (W)" - }, - "arrowheadBlackRight": { - "codepoint": "U+EB7A", - "description": "Black arrowhead right (E)" - }, - "arrowheadBlackUp": { - "codepoint": "U+EB78", - "description": "Black arrowhead up (N)" - }, - "arrowheadBlackUpLeft": { - "codepoint": "U+EB7F", - "description": "Black arrowhead up-left (NW)" - }, - "arrowheadBlackUpRight": { - "codepoint": "U+EB79", - "description": "Black arrowhead up-right (NE)" - }, - "arrowheadOpenDown": { - "codepoint": "U+EB8C", - "description": "Open arrowhead down (S)" - }, - "arrowheadOpenDownLeft": { - "codepoint": "U+EB8D", - "description": "Open arrowhead down-left (SW)" - }, - "arrowheadOpenDownRight": { - "codepoint": "U+EB8B", - "description": "Open arrowhead down-right (SE)" - }, - "arrowheadOpenLeft": { - "codepoint": "U+EB8E", - "description": "Open arrowhead left (W)" - }, - "arrowheadOpenRight": { - "codepoint": "U+EB8A", - "description": "Open arrowhead right (E)" - }, - "arrowheadOpenUp": { - "codepoint": "U+EB88", - "description": "Open arrowhead up (N)" - }, - "arrowheadOpenUpLeft": { - "codepoint": "U+EB8F", - "description": "Open arrowhead up-left (NW)" - }, - "arrowheadOpenUpRight": { - "codepoint": "U+EB89", - "description": "Open arrowhead up-right (NE)" - }, - "arrowheadWhiteDown": { - "codepoint": "U+EB84", - "description": "White arrowhead down (S)" - }, - "arrowheadWhiteDownLeft": { - "codepoint": "U+EB85", - "description": "White arrowhead down-left (SW)" - }, - "arrowheadWhiteDownRight": { - "codepoint": "U+EB83", - "description": "White arrowhead down-right (SE)" - }, - "arrowheadWhiteLeft": { - "codepoint": "U+EB86", - "description": "White arrowhead left (W)" - }, - "arrowheadWhiteRight": { - "codepoint": "U+EB82", - "description": "White arrowhead right (E)" - }, - "arrowheadWhiteUp": { - "codepoint": "U+EB80", - "description": "White arrowhead up (N)" - }, - "arrowheadWhiteUpLeft": { - "codepoint": "U+EB87", - "description": "White arrowhead up-left (NW)" - }, - "arrowheadWhiteUpRight": { - "codepoint": "U+EB81", - "description": "White arrowhead up-right (NE)" - }, - "articAccentAbove": { - "alternateCodepoint": "U+1D17B", - "codepoint": "U+E4A0", - "description": "Accent above" - }, - "articAccentBelow": { - "codepoint": "U+E4A1", - "description": "Accent below" - }, - "articAccentStaccatoAbove": { - "alternateCodepoint": "U+1D181", - "codepoint": "U+E4B0", - "description": "Accent-staccato above" - }, - "articAccentStaccatoBelow": { - "codepoint": "U+E4B1", - "description": "Accent-staccato below" - }, - "articLaissezVibrerAbove": { - "codepoint": "U+E4BA", - "description": "Laissez vibrer (l.v.) above" - }, - "articLaissezVibrerBelow": { - "codepoint": "U+E4BB", - "description": "Laissez vibrer (l.v.) below" - }, - "articMarcatoAbove": { - "alternateCodepoint": "U+1D17F", - "codepoint": "U+E4AC", - "description": "Marcato above" - }, - "articMarcatoBelow": { - "codepoint": "U+E4AD", - "description": "Marcato below" - }, - "articMarcatoStaccatoAbove": { - "alternateCodepoint": "U+1D180", - "codepoint": "U+E4AE", - "description": "Marcato-staccato above" - }, - "articMarcatoStaccatoBelow": { - "codepoint": "U+E4AF", - "description": "Marcato-staccato below" - }, - "articMarcatoTenutoAbove": { - "codepoint": "U+E4BC", - "description": "Marcato-tenuto above" - }, - "articMarcatoTenutoBelow": { - "codepoint": "U+E4BD", - "description": "Marcato-tenuto below" - }, - "articSoftAccentAbove": { - "codepoint": "U+ED40", - "description": "Soft accent above" - }, - "articSoftAccentBelow": { - "codepoint": "U+ED41", - "description": "Soft accent below" - }, - "articSoftAccentStaccatoAbove": { - "codepoint": "U+ED42", - "description": "Soft accent-staccato above" - }, - "articSoftAccentStaccatoBelow": { - "codepoint": "U+ED43", - "description": "Soft accent-staccato below" - }, - "articSoftAccentTenutoAbove": { - "codepoint": "U+ED44", - "description": "Soft accent-tenuto above" - }, - "articSoftAccentTenutoBelow": { - "codepoint": "U+ED45", - "description": "Soft accent-tenuto below" - }, - "articSoftAccentTenutoStaccatoAbove": { - "codepoint": "U+ED46", - "description": "Soft accent-tenuto-staccato above" - }, - "articSoftAccentTenutoStaccatoBelow": { - "codepoint": "U+ED47", - "description": "Soft accent-tenuto-staccato below" - }, - "articStaccatissimoAbove": { - "alternateCodepoint": "U+1D17E", - "codepoint": "U+E4A6", - "description": "Staccatissimo above" - }, - "articStaccatissimoBelow": { - "codepoint": "U+E4A7", - "description": "Staccatissimo below" - }, - "articStaccatissimoStrokeAbove": { - "codepoint": "U+E4AA", - "description": "Staccatissimo stroke above" - }, - "articStaccatissimoStrokeBelow": { - "codepoint": "U+E4AB", - "description": "Staccatissimo stroke below" - }, - "articStaccatissimoWedgeAbove": { - "codepoint": "U+E4A8", - "description": "Staccatissimo wedge above" - }, - "articStaccatissimoWedgeBelow": { - "codepoint": "U+E4A9", - "description": "Staccatissimo wedge below" - }, - "articStaccatoAbove": { - "alternateCodepoint": "U+1D17C", - "codepoint": "U+E4A2", - "description": "Staccato above" - }, - "articStaccatoBelow": { - "codepoint": "U+E4A3", - "description": "Staccato below" - }, - "articStressAbove": { - "codepoint": "U+E4B6", - "description": "Stress above" - }, - "articStressBelow": { - "codepoint": "U+E4B7", - "description": "Stress below" - }, - "articTenutoAbove": { - "alternateCodepoint": "U+1D17D", - "codepoint": "U+E4A4", - "description": "Tenuto above" - }, - "articTenutoAccentAbove": { - "codepoint": "U+E4B4", - "description": "Tenuto-accent above" - }, - "articTenutoAccentBelow": { - "codepoint": "U+E4B5", - "description": "Tenuto-accent below" - }, - "articTenutoBelow": { - "codepoint": "U+E4A5", - "description": "Tenuto below" - }, - "articTenutoStaccatoAbove": { - "alternateCodepoint": "U+1D182", - "codepoint": "U+E4B2", - "description": "Lour\u00e9 (tenuto-staccato) above" - }, - "articTenutoStaccatoBelow": { - "codepoint": "U+E4B3", - "description": "Lour\u00e9 (tenuto-staccato) below" - }, - "articUnstressAbove": { - "codepoint": "U+E4B8", - "description": "Unstress above" - }, - "articUnstressBelow": { - "codepoint": "U+E4B9", - "description": "Unstress below" - }, - "augmentationDot": { - "alternateCodepoint": "U+1D16D", - "codepoint": "U+E1E7", - "description": "Augmentation dot" - }, - "barlineDashed": { - "alternateCodepoint": "U+1D104", - "codepoint": "U+E036", - "description": "Dashed barline" - }, - "barlineDotted": { - "codepoint": "U+E037", - "description": "Dotted barline" - }, - "barlineDouble": { - "alternateCodepoint": "U+1D101", - "codepoint": "U+E031", - "description": "Double barline" - }, - "barlineFinal": { - "alternateCodepoint": "U+1D102", - "codepoint": "U+E032", - "description": "Final barline" - }, - "barlineHeavy": { - "codepoint": "U+E034", - "description": "Heavy barline" - }, - "barlineHeavyHeavy": { - "codepoint": "U+E035", - "description": "Heavy double barline" - }, - "barlineReverseFinal": { - "alternateCodepoint": "U+1D103", - "codepoint": "U+E033", - "description": "Reverse final barline" - }, - "barlineShort": { - "alternateCodepoint": "U+1D105", - "codepoint": "U+E038", - "description": "Short barline" - }, - "barlineSingle": { - "alternateCodepoint": "U+1D100", - "codepoint": "U+E030", - "description": "Single barline" - }, - "barlineTick": { - "codepoint": "U+E039", - "description": "Tick barline" - }, - "beamAccelRit1": { - "codepoint": "U+EAF4", - "description": "Accel./rit. beam 1 (widest)" - }, - "beamAccelRit10": { - "codepoint": "U+EAFD", - "description": "Accel./rit. beam 10" - }, - "beamAccelRit11": { - "codepoint": "U+EAFE", - "description": "Accel./rit. beam 11" - }, - "beamAccelRit12": { - "codepoint": "U+EAFF", - "description": "Accel./rit. beam 12" - }, - "beamAccelRit13": { - "codepoint": "U+EB00", - "description": "Accel./rit. beam 13" - }, - "beamAccelRit14": { - "codepoint": "U+EB01", - "description": "Accel./rit. beam 14" - }, - "beamAccelRit15": { - "codepoint": "U+EB02", - "description": "Accel./rit. beam 15 (narrowest)" - }, - "beamAccelRit2": { - "codepoint": "U+EAF5", - "description": "Accel./rit. beam 2" - }, - "beamAccelRit3": { - "codepoint": "U+EAF6", - "description": "Accel./rit. beam 3" - }, - "beamAccelRit4": { - "codepoint": "U+EAF7", - "description": "Accel./rit. beam 4" - }, - "beamAccelRit5": { - "codepoint": "U+EAF8", - "description": "Accel./rit. beam 5" - }, - "beamAccelRit6": { - "codepoint": "U+EAF9", - "description": "Accel./rit. beam 6" - }, - "beamAccelRit7": { - "codepoint": "U+EAFA", - "description": "Accel./rit. beam 7" - }, - "beamAccelRit8": { - "codepoint": "U+EAFB", - "description": "Accel./rit. beam 8" - }, - "beamAccelRit9": { - "codepoint": "U+EAFC", - "description": "Accel./rit. beam 9" - }, - "beamAccelRitFinal": { - "codepoint": "U+EB03", - "description": "Accel./rit. beam terminating line" - }, - "brace": { - "alternateCodepoint": "U+1D114", - "codepoint": "U+E000", - "description": "Brace" - }, - "bracket": { - "alternateCodepoint": "U+1D115", - "codepoint": "U+E002", - "description": "Bracket" - }, - "bracketBottom": { - "codepoint": "U+E004", - "description": "Bracket bottom" - }, - "bracketTop": { - "codepoint": "U+E003", - "description": "Bracket top" - }, - "brassBend": { - "alternateCodepoint": "U+1D189", - "codepoint": "U+E5E3", - "description": "Bend" - }, - "brassDoitLong": { - "codepoint": "U+E5D6", - "description": "Doit, long" - }, - "brassDoitMedium": { - "codepoint": "U+E5D5", - "description": "Doit, medium" - }, - "brassDoitShort": { - "alternateCodepoint": "U+1D185", - "codepoint": "U+E5D4", - "description": "Doit, short" - }, - "brassFallLipLong": { - "codepoint": "U+E5D9", - "description": "Lip fall, long" - }, - "brassFallLipMedium": { - "codepoint": "U+E5D8", - "description": "Lip fall, medium" - }, - "brassFallLipShort": { - "alternateCodepoint": "U+1D186", - "codepoint": "U+E5D7", - "description": "Lip fall, short" - }, - "brassFallRoughLong": { - "codepoint": "U+E5DF", - "description": "Rough fall, long" - }, - "brassFallRoughMedium": { - "codepoint": "U+E5DE", - "description": "Rough fall, medium" - }, - "brassFallRoughShort": { - "codepoint": "U+E5DD", - "description": "Rough fall, short" - }, - "brassFallSmoothLong": { - "codepoint": "U+E5DC", - "description": "Smooth fall, long" - }, - "brassFallSmoothMedium": { - "codepoint": "U+E5DB", - "description": "Smooth fall, medium" - }, - "brassFallSmoothShort": { - "codepoint": "U+E5DA", - "description": "Smooth fall, short" - }, - "brassFlip": { - "alternateCodepoint": "U+1D187", - "codepoint": "U+E5E1", - "description": "Flip" - }, - "brassHarmonMuteClosed": { - "codepoint": "U+E5E8", - "description": "Harmon mute, stem in" - }, - "brassHarmonMuteStemHalfLeft": { - "codepoint": "U+E5E9", - "description": "Harmon mute, stem extended, left" - }, - "brassHarmonMuteStemHalfRight": { - "codepoint": "U+E5EA", - "description": "Harmon mute, stem extended, right" - }, - "brassHarmonMuteStemOpen": { - "codepoint": "U+E5EB", - "description": "Harmon mute, stem out" - }, - "brassJazzTurn": { - "codepoint": "U+E5E4", - "description": "Jazz turn" - }, - "brassLiftLong": { - "codepoint": "U+E5D3", - "description": "Lift, long" - }, - "brassLiftMedium": { - "codepoint": "U+E5D2", - "description": "Lift, medium" - }, - "brassLiftShort": { - "codepoint": "U+E5D1", - "description": "Lift, short" - }, - "brassLiftSmoothLong": { - "codepoint": "U+E5EE", - "description": "Smooth lift, long" - }, - "brassLiftSmoothMedium": { - "codepoint": "U+E5ED", - "description": "Smooth lift, medium" - }, - "brassLiftSmoothShort": { - "codepoint": "U+E5EC", - "description": "Smooth lift, short" - }, - "brassMuteClosed": { - "codepoint": "U+E5E5", - "description": "Muted (closed)" - }, - "brassMuteHalfClosed": { - "codepoint": "U+E5E6", - "description": "Half-muted (half-closed)" - }, - "brassMuteOpen": { - "codepoint": "U+E5E7", - "description": "Open" - }, - "brassPlop": { - "codepoint": "U+E5E0", - "description": "Plop" - }, - "brassScoop": { - "codepoint": "U+E5D0", - "description": "Scoop" - }, - "brassSmear": { - "alternateCodepoint": "U+1D188", - "codepoint": "U+E5E2", - "description": "Smear" - }, - "brassValveTrill": { - "codepoint": "U+E5EF", - "description": "Valve trill" - }, - "breathMarkComma": { - "alternateCodepoint": "U+1D112", - "codepoint": "U+E4CE", - "description": "Breath mark (comma)" - }, - "breathMarkSalzedo": { - "codepoint": "U+E4D5", - "description": "Breath mark (Salzedo)" - }, - "breathMarkTick": { - "codepoint": "U+E4CF", - "description": "Breath mark (tick-like)" - }, - "breathMarkUpbow": { - "codepoint": "U+E4D0", - "description": "Breath mark (upbow-like)" - }, - "bridgeClef": { - "codepoint": "U+E078", - "description": "Bridge clef" - }, - "buzzRoll": { - "codepoint": "U+E22A", - "description": "Buzz roll" - }, - "cClef": { - "alternateCodepoint": "U+1D121", - "codepoint": "U+E05C", - "description": "C clef" - }, - "cClef8vb": { - "codepoint": "U+E05D", - "description": "C clef ottava bassa" - }, - "cClefArrowDown": { - "codepoint": "U+E05F", - "description": "C clef, arrow down" - }, - "cClefArrowUp": { - "codepoint": "U+E05E", - "description": "C clef, arrow up" - }, - "cClefChange": { - "codepoint": "U+E07B", - "description": "C clef change" - }, - "cClefCombining": { - "codepoint": "U+E061", - "description": "Combining C clef" - }, - "cClefReversed": { - "codepoint": "U+E075", - "description": "Reversed C clef" - }, - "cClefSquare": { - "codepoint": "U+E060", - "description": "C clef (19th century)" - }, - "caesura": { - "alternateCodepoint": "U+1D113", - "codepoint": "U+E4D1", - "description": "Caesura" - }, - "caesuraCurved": { - "codepoint": "U+E4D4", - "description": "Curved caesura" - }, - "caesuraShort": { - "codepoint": "U+E4D3", - "description": "Short caesura" - }, - "caesuraThick": { - "codepoint": "U+E4D2", - "description": "Thick caesura" - }, - "chantAccentusAbove": { - "codepoint": "U+E9D6", - "description": "Accentus above" - }, - "chantAccentusBelow": { - "codepoint": "U+E9D7", - "description": "Accentus below" - }, - "chantAuctumAsc": { - "codepoint": "U+E994", - "description": "Punctum auctum, ascending" - }, - "chantAuctumDesc": { - "codepoint": "U+E995", - "description": "Punctum auctum, descending" - }, - "chantAugmentum": { - "codepoint": "U+E9D9", - "description": "Augmentum (mora)" - }, - "chantCaesura": { - "codepoint": "U+E8F8", - "description": "Caesura" - }, - "chantCclef": { - "alternateCodepoint": "U+1D1D0", - "codepoint": "U+E906", - "description": "Plainchant C clef" - }, - "chantCirculusAbove": { - "codepoint": "U+E9D2", - "description": "Circulus above" - }, - "chantCirculusBelow": { - "codepoint": "U+E9D3", - "description": "Circulus below" - }, - "chantConnectingLineAsc2nd": { - "codepoint": "U+E9BD", - "description": "Connecting line, ascending 2nd" - }, - "chantConnectingLineAsc3rd": { - "codepoint": "U+E9BE", - "description": "Connecting line, ascending 3rd" - }, - "chantConnectingLineAsc4th": { - "codepoint": "U+E9BF", - "description": "Connecting line, ascending 4th" - }, - "chantConnectingLineAsc5th": { - "codepoint": "U+E9C0", - "description": "Connecting line, ascending 5th" - }, - "chantConnectingLineAsc6th": { - "codepoint": "U+E9C1", - "description": "Connecting line, ascending 6th" - }, - "chantCustosStemDownPosHigh": { - "codepoint": "U+EA08", - "description": "Plainchant custos, stem down, high position" - }, - "chantCustosStemDownPosHighest": { - "codepoint": "U+EA09", - "description": "Plainchant custos, stem down, highest position" - }, - "chantCustosStemDownPosMiddle": { - "codepoint": "U+EA07", - "description": "Plainchant custos, stem down, middle position" - }, - "chantCustosStemUpPosLow": { - "codepoint": "U+EA05", - "description": "Plainchant custos, stem up, low position" - }, - "chantCustosStemUpPosLowest": { - "codepoint": "U+EA04", - "description": "Plainchant custos, stem up, lowest position" - }, - "chantCustosStemUpPosMiddle": { - "codepoint": "U+EA06", - "description": "Plainchant custos, stem up, middle position" - }, - "chantDeminutumLower": { - "codepoint": "U+E9B3", - "description": "Punctum deminutum, lower" - }, - "chantDeminutumUpper": { - "codepoint": "U+E9B2", - "description": "Punctum deminutum, upper" - }, - "chantDivisioFinalis": { - "codepoint": "U+E8F6", - "description": "Divisio finalis" - }, - "chantDivisioMaior": { - "codepoint": "U+E8F4", - "description": "Divisio maior" - }, - "chantDivisioMaxima": { - "codepoint": "U+E8F5", - "description": "Divisio maxima" - }, - "chantDivisioMinima": { - "codepoint": "U+E8F3", - "description": "Divisio minima" - }, - "chantEntryLineAsc2nd": { - "codepoint": "U+E9B4", - "description": "Entry line, ascending 2nd" - }, - "chantEntryLineAsc3rd": { - "codepoint": "U+E9B5", - "description": "Entry line, ascending 3rd" - }, - "chantEntryLineAsc4th": { - "codepoint": "U+E9B6", - "description": "Entry line, ascending 4th" - }, - "chantEntryLineAsc5th": { - "codepoint": "U+E9B7", - "description": "Entry line, ascending 5th" - }, - "chantEntryLineAsc6th": { - "codepoint": "U+E9B8", - "description": "Entry line, ascending 6th" - }, - "chantEpisema": { - "codepoint": "U+E9D8", - "description": "Episema" - }, - "chantFclef": { - "alternateCodepoint": "U+1D1D1", - "codepoint": "U+E902", - "description": "Plainchant F clef" - }, - "chantIctusAbove": { - "codepoint": "U+E9D0", - "description": "Ictus above" - }, - "chantIctusBelow": { - "codepoint": "U+E9D1", - "description": "Ictus below" - }, - "chantLigaturaDesc2nd": { - "codepoint": "U+E9B9", - "description": "Ligated stroke, descending 2nd" - }, - "chantLigaturaDesc3rd": { - "codepoint": "U+E9BA", - "description": "Ligated stroke, descending 3rd" - }, - "chantLigaturaDesc4th": { - "codepoint": "U+E9BB", - "description": "Ligated stroke, descending 4th" - }, - "chantLigaturaDesc5th": { - "codepoint": "U+E9BC", - "description": "Ligated stroke, descending 5th" - }, - "chantOriscusAscending": { - "codepoint": "U+E99C", - "description": "Oriscus ascending" - }, - "chantOriscusDescending": { - "codepoint": "U+E99D", - "description": "Oriscus descending" - }, - "chantOriscusLiquescens": { - "codepoint": "U+E99E", - "description": "Oriscus liquescens" - }, - "chantPodatusLower": { - "codepoint": "U+E9B0", - "description": "Podatus, lower" - }, - "chantPodatusUpper": { - "alternateCodepoint": "U+1D1D4", - "codepoint": "U+E9B1", - "description": "Podatus, upper" - }, - "chantPunctum": { - "codepoint": "U+E990", - "description": "Punctum" - }, - "chantPunctumCavum": { - "codepoint": "U+E998", - "description": "Punctum cavum" - }, - "chantPunctumDeminutum": { - "codepoint": "U+E9A1", - "description": "Punctum deminutum" - }, - "chantPunctumInclinatum": { - "codepoint": "U+E991", - "description": "Punctum inclinatum" - }, - "chantPunctumInclinatumAuctum": { - "codepoint": "U+E992", - "description": "Punctum inclinatum auctum" - }, - "chantPunctumInclinatumDeminutum": { - "codepoint": "U+E993", - "description": "Punctum inclinatum deminutum" - }, - "chantPunctumLinea": { - "codepoint": "U+E999", - "description": "Punctum linea" - }, - "chantPunctumLineaCavum": { - "codepoint": "U+E99A", - "description": "Punctum linea cavum" - }, - "chantPunctumVirga": { - "alternateCodepoint": "U+1D1D3", - "codepoint": "U+E996", - "description": "Punctum virga" - }, - "chantPunctumVirgaReversed": { - "codepoint": "U+E997", - "description": "Punctum virga, reversed" - }, - "chantQuilisma": { - "codepoint": "U+E99B", - "description": "Quilisma" - }, - "chantSemicirculusAbove": { - "codepoint": "U+E9D4", - "description": "Semicirculus above" - }, - "chantSemicirculusBelow": { - "codepoint": "U+E9D5", - "description": "Semicirculus below" - }, - "chantStaff": { - "codepoint": "U+E8F0", - "description": "Plainchant staff" - }, - "chantStaffNarrow": { - "codepoint": "U+E8F2", - "description": "Plainchant staff (narrow)" - }, - "chantStaffWide": { - "codepoint": "U+E8F1", - "description": "Plainchant staff (wide)" - }, - "chantStrophicus": { - "codepoint": "U+E99F", - "description": "Strophicus" - }, - "chantStrophicusAuctus": { - "codepoint": "U+E9A0", - "description": "Strophicus auctus" - }, - "chantStrophicusLiquescens2nd": { - "codepoint": "U+E9C2", - "description": "Strophicus liquescens, 2nd" - }, - "chantStrophicusLiquescens3rd": { - "codepoint": "U+E9C3", - "description": "Strophicus liquescens, 3rd" - }, - "chantStrophicusLiquescens4th": { - "codepoint": "U+E9C4", - "description": "Strophicus liquescens, 4th" - }, - "chantStrophicusLiquescens5th": { - "codepoint": "U+E9C5", - "description": "Strophicus liquescens, 5th" - }, - "chantVirgula": { - "codepoint": "U+E8F7", - "description": "Virgula" - }, - "clef15": { - "codepoint": "U+E07E", - "description": "15 for clefs" - }, - "clef8": { - "codepoint": "U+E07D", - "description": "8 for clefs" - }, - "clefChangeCombining": { - "codepoint": "U+E07F", - "description": "Combining clef change" - }, - "coda": { - "alternateCodepoint": "U+1D10C", - "codepoint": "U+E048", - "description": "Coda" - }, - "codaSquare": { - "codepoint": "U+E049", - "description": "Square coda" - }, - "conductorBeat2Compound": { - "codepoint": "U+E897", - "description": "Beat 2, compound time" - }, - "conductorBeat2Simple": { - "codepoint": "U+E894", - "description": "Beat 2, simple time" - }, - "conductorBeat3Compound": { - "codepoint": "U+E898", - "description": "Beat 3, compound time" - }, - "conductorBeat3Simple": { - "codepoint": "U+E895", - "description": "Beat 3, simple time" - }, - "conductorBeat4Compound": { - "codepoint": "U+E899", - "description": "Beat 4, compound time" - }, - "conductorBeat4Simple": { - "codepoint": "U+E896", - "description": "Beat 4, simple time" - }, - "conductorLeftBeat": { - "codepoint": "U+E891", - "description": "Left-hand beat or cue" - }, - "conductorRightBeat": { - "codepoint": "U+E892", - "description": "Right-hand beat or cue" - }, - "conductorStrongBeat": { - "codepoint": "U+E890", - "description": "Strong beat or cue" - }, - "conductorUnconducted": { - "codepoint": "U+E89A", - "description": "Unconducted/free passages" - }, - "conductorWeakBeat": { - "codepoint": "U+E893", - "description": "Weak beat or cue" - }, - "controlBeginBeam": { - "alternateCodepoint": "U+1D173", - "codepoint": "U+E8E0", - "description": "Begin beam" - }, - "controlBeginPhrase": { - "alternateCodepoint": "U+1D179", - "codepoint": "U+E8E6", - "description": "Begin phrase" - }, - "controlBeginSlur": { - "alternateCodepoint": "U+1D177", - "codepoint": "U+E8E4", - "description": "Begin slur" - }, - "controlBeginTie": { - "alternateCodepoint": "U+1D175", - "codepoint": "U+E8E2", - "description": "Begin tie" - }, - "controlEndBeam": { - "alternateCodepoint": "U+1D174", - "codepoint": "U+E8E1", - "description": "End beam" - }, - "controlEndPhrase": { - "alternateCodepoint": "U+1D17A", - "codepoint": "U+E8E7", - "description": "End phrase" - }, - "controlEndSlur": { - "alternateCodepoint": "U+1D178", - "codepoint": "U+E8E5", - "description": "End slur" - }, - "controlEndTie": { - "alternateCodepoint": "U+1D176", - "codepoint": "U+E8E3", - "description": "End tie" - }, - "csymAccidentalDoubleFlat": { - "codepoint": "U+ED64", - "description": "Double flat" - }, - "csymAccidentalDoubleSharp": { - "codepoint": "U+ED63", - "description": "Double sharp" - }, - "csymAccidentalFlat": { - "codepoint": "U+ED60", - "description": "Flat" - }, - "csymAccidentalNatural": { - "codepoint": "U+ED61", - "description": "Natural" - }, - "csymAccidentalSharp": { - "codepoint": "U+ED62", - "description": "Sharp" - }, - "csymAccidentalTripleFlat": { - "codepoint": "U+ED66", - "description": "Triple flat" - }, - "csymAccidentalTripleSharp": { - "codepoint": "U+ED65", - "description": "Triple sharp" - }, - "csymAlteredBassSlash": { - "codepoint": "U+E87B", - "description": "Slash for altered bass note" - }, - "csymAugmented": { - "codepoint": "U+E872", - "description": "Augmented" - }, - "csymBracketLeftTall": { - "codepoint": "U+E877", - "description": "Double-height left bracket" - }, - "csymBracketRightTall": { - "codepoint": "U+E878", - "description": "Double-height right bracket" - }, - "csymDiagonalArrangementSlash": { - "codepoint": "U+E87C", - "description": "Slash for chord symbols arranged diagonally" - }, - "csymDiminished": { - "alternateCodepoint": "U+1D1A9", - "codepoint": "U+E870", - "description": "Diminished" - }, - "csymHalfDiminished": { - "codepoint": "U+E871", - "description": "Half-diminished" - }, - "csymMajorSeventh": { - "codepoint": "U+E873", - "description": "Major seventh" - }, - "csymMinor": { - "codepoint": "U+E874", - "description": "Minor" - }, - "csymParensLeftTall": { - "codepoint": "U+E875", - "description": "Double-height left parenthesis" - }, - "csymParensLeftVeryTall": { - "codepoint": "U+E879", - "description": "Triple-height left parenthesis" - }, - "csymParensRightTall": { - "codepoint": "U+E876", - "description": "Double-height right parenthesis" - }, - "csymParensRightVeryTall": { - "codepoint": "U+E87A", - "description": "Triple-height right parenthesis" - }, - "curlewSign": { - "codepoint": "U+E4D6", - "description": "Curlew (Britten)" - }, - "daCapo": { - "alternateCodepoint": "U+1D10A", - "codepoint": "U+E046", - "description": "Da capo" - }, - "dalSegno": { - "alternateCodepoint": "U+1D109", - "codepoint": "U+E045", - "description": "Dal segno" - }, - "daseianExcellentes1": { - "codepoint": "U+EA3C", - "description": "Daseian excellentes 1" - }, - "daseianExcellentes2": { - "codepoint": "U+EA3D", - "description": "Daseian excellentes 2" - }, - "daseianExcellentes3": { - "codepoint": "U+EA3E", - "description": "Daseian excellentes 3" - }, - "daseianExcellentes4": { - "codepoint": "U+EA3F", - "description": "Daseian excellentes 4" - }, - "daseianFinales1": { - "codepoint": "U+EA34", - "description": "Daseian finales 1" - }, - "daseianFinales2": { - "codepoint": "U+EA35", - "description": "Daseian finales 2" - }, - "daseianFinales3": { - "codepoint": "U+EA36", - "description": "Daseian finales 3" - }, - "daseianFinales4": { - "codepoint": "U+EA37", - "description": "Daseian finales 4" - }, - "daseianGraves1": { - "codepoint": "U+EA30", - "description": "Daseian graves 1" - }, - "daseianGraves2": { - "codepoint": "U+EA31", - "description": "Daseian graves 2" - }, - "daseianGraves3": { - "codepoint": "U+EA32", - "description": "Daseian graves 3" - }, - "daseianGraves4": { - "codepoint": "U+EA33", - "description": "Daseian graves 4" - }, - "daseianResidua1": { - "codepoint": "U+EA40", - "description": "Daseian residua 1" - }, - "daseianResidua2": { - "codepoint": "U+EA41", - "description": "Daseian residua 2" - }, - "daseianSuperiores1": { - "codepoint": "U+EA38", - "description": "Daseian superiores 1" - }, - "daseianSuperiores2": { - "codepoint": "U+EA39", - "description": "Daseian superiores 2" - }, - "daseianSuperiores3": { - "codepoint": "U+EA3A", - "description": "Daseian superiores 3" - }, - "daseianSuperiores4": { - "codepoint": "U+EA3B", - "description": "Daseian superiores 4" - }, - "doubleLateralRollStevens": { - "codepoint": "U+E234", - "description": "Double lateral roll (Stevens)" - }, - "doubleTongueAbove": { - "alternateCodepoint": "U+1D18A", - "codepoint": "U+E5F0", - "description": "Double-tongue above" - }, - "doubleTongueBelow": { - "codepoint": "U+E5F1", - "description": "Double-tongue below" - }, - "dynamicCombinedSeparatorColon": { - "codepoint": "U+E546", - "description": "Colon separator for combined dynamics" - }, - "dynamicCombinedSeparatorHyphen": { - "codepoint": "U+E547", - "description": "Hyphen separator for combined dynamics" - }, - "dynamicCombinedSeparatorSlash": { - "codepoint": "U+E549", - "description": "Slash separator for combined dynamics" - }, - "dynamicCombinedSeparatorSpace": { - "codepoint": "U+E548", - "description": "Space separator for combined dynamics" - }, - "dynamicCrescendoHairpin": { - "alternateCodepoint": "U+1D192", - "codepoint": "U+E53E", - "description": "Crescendo" - }, - "dynamicDiminuendoHairpin": { - "alternateCodepoint": "U+1D193", - "codepoint": "U+E53F", - "description": "Diminuendo" - }, - "dynamicFF": { - "codepoint": "U+E52F", - "description": "ff" - }, - "dynamicFFF": { - "codepoint": "U+E530", - "description": "fff" - }, - "dynamicFFFF": { - "codepoint": "U+E531", - "description": "ffff" - }, - "dynamicFFFFF": { - "codepoint": "U+E532", - "description": "fffff" - }, - "dynamicFFFFFF": { - "codepoint": "U+E533", - "description": "ffffff" - }, - "dynamicForte": { - "alternateCodepoint": "U+1D191", - "codepoint": "U+E522", - "description": "Forte" - }, - "dynamicFortePiano": { - "codepoint": "U+E534", - "description": "Forte-piano" - }, - "dynamicForzando": { - "codepoint": "U+E535", - "description": "Forzando" - }, - "dynamicHairpinBracketLeft": { - "codepoint": "U+E544", - "description": "Left bracket (for hairpins)" - }, - "dynamicHairpinBracketRight": { - "codepoint": "U+E545", - "description": "Right bracket (for hairpins)" - }, - "dynamicHairpinParenthesisLeft": { - "codepoint": "U+E542", - "description": "Left parenthesis (for hairpins)" - }, - "dynamicHairpinParenthesisRight": { - "codepoint": "U+E543", - "description": "Right parenthesis (for hairpins)" - }, - "dynamicMF": { - "codepoint": "U+E52D", - "description": "mf" - }, - "dynamicMP": { - "codepoint": "U+E52C", - "description": "mp" - }, - "dynamicMessaDiVoce": { - "codepoint": "U+E540", - "description": "Messa di voce" - }, - "dynamicMezzo": { - "alternateCodepoint": "U+1D190", - "codepoint": "U+E521", - "description": "Mezzo" - }, - "dynamicNiente": { - "codepoint": "U+E526", - "description": "Niente" - }, - "dynamicNienteForHairpin": { - "codepoint": "U+E541", - "description": "Niente (for hairpins)" - }, - "dynamicPF": { - "codepoint": "U+E52E", - "description": "pf" - }, - "dynamicPP": { - "codepoint": "U+E52B", - "description": "pp" - }, - "dynamicPPP": { - "codepoint": "U+E52A", - "description": "ppp" - }, - "dynamicPPPP": { - "codepoint": "U+E529", - "description": "pppp" - }, - "dynamicPPPPP": { - "codepoint": "U+E528", - "description": "ppppp" - }, - "dynamicPPPPPP": { - "codepoint": "U+E527", - "description": "pppppp" - }, - "dynamicPiano": { - "alternateCodepoint": "U+1D18F", - "codepoint": "U+E520", - "description": "Piano" - }, - "dynamicRinforzando": { - "alternateCodepoint": "U+1D18C", - "codepoint": "U+E523", - "description": "Rinforzando" - }, - "dynamicRinforzando1": { - "codepoint": "U+E53C", - "description": "Rinforzando 1" - }, - "dynamicRinforzando2": { - "codepoint": "U+E53D", - "description": "Rinforzando 2" - }, - "dynamicSforzando": { - "alternateCodepoint": "U+1D18D", - "codepoint": "U+E524", - "description": "Sforzando" - }, - "dynamicSforzando1": { - "codepoint": "U+E536", - "description": "Sforzando 1" - }, - "dynamicSforzandoPianissimo": { - "codepoint": "U+E538", - "description": "Sforzando-pianissimo" - }, - "dynamicSforzandoPiano": { - "codepoint": "U+E537", - "description": "Sforzando-piano" - }, - "dynamicSforzato": { - "codepoint": "U+E539", - "description": "Sforzato" - }, - "dynamicSforzatoFF": { - "codepoint": "U+E53B", - "description": "Sforzatissimo" - }, - "dynamicSforzatoPiano": { - "codepoint": "U+E53A", - "description": "Sforzato-piano" - }, - "dynamicZ": { - "alternateCodepoint": "U+1D18E", - "codepoint": "U+E525", - "description": "Z" - }, - "elecAudioChannelsEight": { - "codepoint": "U+EB46", - "description": "Eight channels (7.1 surround)" - }, - "elecAudioChannelsFive": { - "codepoint": "U+EB43", - "description": "Five channels" - }, - "elecAudioChannelsFour": { - "codepoint": "U+EB42", - "description": "Four channels" - }, - "elecAudioChannelsOne": { - "codepoint": "U+EB3E", - "description": "One channel (mono)" - }, - "elecAudioChannelsSeven": { - "codepoint": "U+EB45", - "description": "Seven channels" - }, - "elecAudioChannelsSix": { - "codepoint": "U+EB44", - "description": "Six channels (5.1 surround)" - }, - "elecAudioChannelsThreeFrontal": { - "codepoint": "U+EB40", - "description": "Three channels (frontal)" - }, - "elecAudioChannelsThreeSurround": { - "codepoint": "U+EB41", - "description": "Three channels (surround)" - }, - "elecAudioChannelsTwo": { - "codepoint": "U+EB3F", - "description": "Two channels (stereo)" - }, - "elecAudioIn": { - "codepoint": "U+EB49", - "description": "Audio in" - }, - "elecAudioMono": { - "codepoint": "U+EB3C", - "description": "Mono audio setup" - }, - "elecAudioOut": { - "codepoint": "U+EB4A", - "description": "Audio out" - }, - "elecAudioStereo": { - "codepoint": "U+EB3D", - "description": "Stereo audio setup" - }, - "elecCamera": { - "codepoint": "U+EB1B", - "description": "Camera" - }, - "elecDataIn": { - "codepoint": "U+EB4D", - "description": "Data in" - }, - "elecDataOut": { - "codepoint": "U+EB4E", - "description": "Data out" - }, - "elecDisc": { - "codepoint": "U+EB13", - "description": "Disc" - }, - "elecDownload": { - "codepoint": "U+EB4F", - "description": "Download" - }, - "elecEject": { - "codepoint": "U+EB2B", - "description": "Eject" - }, - "elecFastForward": { - "codepoint": "U+EB1F", - "description": "Fast-forward" - }, - "elecHeadphones": { - "codepoint": "U+EB11", - "description": "Headphones" - }, - "elecHeadset": { - "codepoint": "U+EB12", - "description": "Headset" - }, - "elecLineIn": { - "codepoint": "U+EB47", - "description": "Line in" - }, - "elecLineOut": { - "codepoint": "U+EB48", - "description": "Line out" - }, - "elecLoop": { - "codepoint": "U+EB23", - "description": "Loop" - }, - "elecLoudspeaker": { - "codepoint": "U+EB1A", - "description": "Loudspeaker" - }, - "elecMIDIController0": { - "codepoint": "U+EB36", - "description": "MIDI controller 0%" - }, - "elecMIDIController100": { - "codepoint": "U+EB3B", - "description": "MIDI controller 100%" - }, - "elecMIDIController20": { - "codepoint": "U+EB37", - "description": "MIDI controller 20%" - }, - "elecMIDIController40": { - "codepoint": "U+EB38", - "description": "MIDI controller 40%" - }, - "elecMIDIController60": { - "codepoint": "U+EB39", - "description": "MIDI controller 60%" - }, - "elecMIDIController80": { - "codepoint": "U+EB3A", - "description": "MIDI controller 80%" - }, - "elecMIDIIn": { - "codepoint": "U+EB34", - "description": "MIDI in" - }, - "elecMIDIOut": { - "codepoint": "U+EB35", - "description": "MIDI out" - }, - "elecMicrophone": { - "codepoint": "U+EB10", - "description": "Microphone" - }, - "elecMicrophoneMute": { - "codepoint": "U+EB28", - "description": "Mute microphone" - }, - "elecMicrophoneUnmute": { - "codepoint": "U+EB29", - "description": "Unmute microphone" - }, - "elecMixingConsole": { - "codepoint": "U+EB15", - "description": "Mixing console" - }, - "elecMonitor": { - "codepoint": "U+EB18", - "description": "Monitor" - }, - "elecMute": { - "codepoint": "U+EB26", - "description": "Mute" - }, - "elecPause": { - "codepoint": "U+EB1E", - "description": "Pause" - }, - "elecPlay": { - "codepoint": "U+EB1C", - "description": "Play" - }, - "elecPowerOnOff": { - "codepoint": "U+EB2A", - "description": "Power on/off" - }, - "elecProjector": { - "codepoint": "U+EB19", - "description": "Projector" - }, - "elecReplay": { - "codepoint": "U+EB24", - "description": "Replay" - }, - "elecRewind": { - "codepoint": "U+EB20", - "description": "Rewind" - }, - "elecShuffle": { - "codepoint": "U+EB25", - "description": "Shuffle" - }, - "elecSkipBackwards": { - "codepoint": "U+EB22", - "description": "Skip backwards" - }, - "elecSkipForwards": { - "codepoint": "U+EB21", - "description": "Skip forwards" - }, - "elecStop": { - "codepoint": "U+EB1D", - "description": "Stop" - }, - "elecTape": { - "codepoint": "U+EB14", - "description": "Tape" - }, - "elecUSB": { - "codepoint": "U+EB16", - "description": "USB connection" - }, - "elecUnmute": { - "codepoint": "U+EB27", - "description": "Unmute" - }, - "elecUpload": { - "codepoint": "U+EB50", - "description": "Upload" - }, - "elecVideoCamera": { - "codepoint": "U+EB17", - "description": "Video camera" - }, - "elecVideoIn": { - "codepoint": "U+EB4B", - "description": "Video in" - }, - "elecVideoOut": { - "codepoint": "U+EB4C", - "description": "Video out" - }, - "elecVolumeFader": { - "codepoint": "U+EB2C", - "description": "Combining volume fader" - }, - "elecVolumeFaderThumb": { - "codepoint": "U+EB2D", - "description": "Combining volume fader thumb" - }, - "elecVolumeLevel0": { - "codepoint": "U+EB2E", - "description": "Volume level 0%" - }, - "elecVolumeLevel100": { - "codepoint": "U+EB33", - "description": "Volume level 100%" - }, - "elecVolumeLevel20": { - "codepoint": "U+EB2F", - "description": "Volume level 20%" - }, - "elecVolumeLevel40": { - "codepoint": "U+EB30", - "description": "Volume level 40%" - }, - "elecVolumeLevel60": { - "codepoint": "U+EB31", - "description": "Volume level 60%" - }, - "elecVolumeLevel80": { - "codepoint": "U+EB32", - "description": "Volume level 80%" - }, - "fClef": { - "alternateCodepoint": "U+1D122", - "codepoint": "U+E062", - "description": "F clef" - }, - "fClef15ma": { - "codepoint": "U+E066", - "description": "F clef quindicesima alta" - }, - "fClef15mb": { - "codepoint": "U+E063", - "description": "F clef quindicesima bassa" - }, - "fClef8va": { - "alternateCodepoint": "U+1D123", - "codepoint": "U+E065", - "description": "F clef ottava alta" - }, - "fClef8vb": { - "alternateCodepoint": "U+1D124", - "codepoint": "U+E064", - "description": "F clef ottava bassa" - }, - "fClefArrowDown": { - "codepoint": "U+E068", - "description": "F clef, arrow down" - }, - "fClefArrowUp": { - "codepoint": "U+E067", - "description": "F clef, arrow up" - }, - "fClefChange": { - "codepoint": "U+E07C", - "description": "F clef change" - }, - "fClefReversed": { - "codepoint": "U+E076", - "description": "Reversed F clef" - }, - "fClefTurned": { - "codepoint": "U+E077", - "description": "Turned F clef" - }, - "fermataAbove": { - "alternateCodepoint": "U+1D110", - "codepoint": "U+E4C0", - "description": "Fermata above" - }, - "fermataBelow": { - "alternateCodepoint": "U+1D111", - "codepoint": "U+E4C1", - "description": "Fermata below" - }, - "fermataLongAbove": { - "codepoint": "U+E4C6", - "description": "Long fermata above" - }, - "fermataLongBelow": { - "codepoint": "U+E4C7", - "description": "Long fermata below" - }, - "fermataLongHenzeAbove": { - "codepoint": "U+E4CA", - "description": "Long fermata (Henze) above" - }, - "fermataLongHenzeBelow": { - "codepoint": "U+E4CB", - "description": "Long fermata (Henze) below" - }, - "fermataShortAbove": { - "codepoint": "U+E4C4", - "description": "Short fermata above" - }, - "fermataShortBelow": { - "codepoint": "U+E4C5", - "description": "Short fermata below" - }, - "fermataShortHenzeAbove": { - "codepoint": "U+E4CC", - "description": "Short fermata (Henze) above" - }, - "fermataShortHenzeBelow": { - "codepoint": "U+E4CD", - "description": "Short fermata (Henze) below" - }, - "fermataVeryLongAbove": { - "codepoint": "U+E4C8", - "description": "Very long fermata above" - }, - "fermataVeryLongBelow": { - "codepoint": "U+E4C9", - "description": "Very long fermata below" - }, - "fermataVeryShortAbove": { - "codepoint": "U+E4C2", - "description": "Very short fermata above" - }, - "fermataVeryShortBelow": { - "codepoint": "U+E4C3", - "description": "Very short fermata below" - }, - "figbass0": { - "codepoint": "U+EA50", - "description": "Figured bass 0" - }, - "figbass1": { - "codepoint": "U+EA51", - "description": "Figured bass 1" - }, - "figbass2": { - "codepoint": "U+EA52", - "description": "Figured bass 2" - }, - "figbass2Raised": { - "codepoint": "U+EA53", - "description": "Figured bass 2 raised by half-step" - }, - "figbass3": { - "codepoint": "U+EA54", - "description": "Figured bass 3" - }, - "figbass4": { - "codepoint": "U+EA55", - "description": "Figured bass 4" - }, - "figbass4Raised": { - "codepoint": "U+EA56", - "description": "Figured bass 4 raised by half-step" - }, - "figbass5": { - "codepoint": "U+EA57", - "description": "Figured bass 5" - }, - "figbass5Raised1": { - "codepoint": "U+EA58", - "description": "Figured bass 5 raised by half-step" - }, - "figbass5Raised2": { - "codepoint": "U+EA59", - "description": "Figured bass 5 raised by half-step 2" - }, - "figbass5Raised3": { - "codepoint": "U+EA5A", - "description": "Figured bass diminished 5" - }, - "figbass6": { - "codepoint": "U+EA5B", - "description": "Figured bass 6" - }, - "figbass6Raised": { - "codepoint": "U+EA5C", - "description": "Figured bass 6 raised by half-step" - }, - "figbass6Raised2": { - "codepoint": "U+EA6F", - "description": "Figured bass 6 raised by half-step 2" - }, - "figbass7": { - "codepoint": "U+EA5D", - "description": "Figured bass 7" - }, - "figbass7Diminished": { - "codepoint": "U+ECC0", - "description": "Figured bass 7 diminished" - }, - "figbass7Raised1": { - "codepoint": "U+EA5E", - "description": "Figured bass 7 raised by half-step" - }, - "figbass7Raised2": { - "codepoint": "U+EA5F", - "description": "Figured bass 7 raised by a half-step 2" - }, - "figbass8": { - "codepoint": "U+EA60", - "description": "Figured bass 8" - }, - "figbass9": { - "codepoint": "U+EA61", - "description": "Figured bass 9" - }, - "figbass9Raised": { - "codepoint": "U+EA62", - "description": "Figured bass 9 raised by half-step" - }, - "figbassBracketLeft": { - "codepoint": "U+EA68", - "description": "Figured bass [" - }, - "figbassBracketRight": { - "codepoint": "U+EA69", - "description": "Figured bass ]" - }, - "figbassCombiningLowering": { - "codepoint": "U+EA6E", - "description": "Combining lower" - }, - "figbassCombiningRaising": { - "codepoint": "U+EA6D", - "description": "Combining raise" - }, - "figbassDoubleFlat": { - "codepoint": "U+EA63", - "description": "Figured bass double flat" - }, - "figbassDoubleSharp": { - "codepoint": "U+EA67", - "description": "Figured bass double sharp" - }, - "figbassFlat": { - "codepoint": "U+EA64", - "description": "Figured bass flat" - }, - "figbassNatural": { - "codepoint": "U+EA65", - "description": "Figured bass natural" - }, - "figbassParensLeft": { - "codepoint": "U+EA6A", - "description": "Figured bass (" - }, - "figbassParensRight": { - "codepoint": "U+EA6B", - "description": "Figured bass )" - }, - "figbassPlus": { - "codepoint": "U+EA6C", - "description": "Figured bass +" - }, - "figbassSharp": { - "codepoint": "U+EA66", - "description": "Figured bass sharp" - }, - "fingering0": { - "codepoint": "U+ED10", - "description": "Fingering 0 (open string)" - }, - "fingering0Italic": { - "codepoint": "U+ED80", - "description": "Fingering 0 italic (open string)" - }, - "fingering1": { - "codepoint": "U+ED11", - "description": "Fingering 1 (thumb)" - }, - "fingering1Italic": { - "codepoint": "U+ED81", - "description": "Fingering 1 italic (thumb)" - }, - "fingering2": { - "codepoint": "U+ED12", - "description": "Fingering 2 (index finger)" - }, - "fingering2Italic": { - "codepoint": "U+ED82", - "description": "Fingering 2 italic (index finger)" - }, - "fingering3": { - "codepoint": "U+ED13", - "description": "Fingering 3 (middle finger)" - }, - "fingering3Italic": { - "codepoint": "U+ED83", - "description": "Fingering 3 italic (middle finger)" - }, - "fingering4": { - "codepoint": "U+ED14", - "description": "Fingering 4 (ring finger)" - }, - "fingering4Italic": { - "codepoint": "U+ED84", - "description": "Fingering 4 italic (ring finger)" - }, - "fingering5": { - "codepoint": "U+ED15", - "description": "Fingering 5 (little finger)" - }, - "fingering5Italic": { - "codepoint": "U+ED85", - "description": "Fingering 5 italic (little finger)" - }, - "fingering6": { - "codepoint": "U+ED24", - "description": "Fingering 6" - }, - "fingering6Italic": { - "codepoint": "U+ED86", - "description": "Fingering 6 italic" - }, - "fingering7": { - "codepoint": "U+ED25", - "description": "Fingering 7" - }, - "fingering7Italic": { - "codepoint": "U+ED87", - "description": "Fingering 7 italic" - }, - "fingering8": { - "codepoint": "U+ED26", - "description": "Fingering 8" - }, - "fingering8Italic": { - "codepoint": "U+ED88", - "description": "Fingering 8 italic" - }, - "fingering9": { - "codepoint": "U+ED27", - "description": "Fingering 9" - }, - "fingering9Italic": { - "codepoint": "U+ED89", - "description": "Fingering 9 italic" - }, - "fingeringALower": { - "codepoint": "U+ED1B", - "description": "Fingering a (anular; right-hand ring finger for guitar)" - }, - "fingeringCLower": { - "codepoint": "U+ED1C", - "description": "Fingering c (right-hand little finger for guitar)" - }, - "fingeringELower": { - "codepoint": "U+ED1E", - "description": "Fingering e (right-hand little finger for guitar)" - }, - "fingeringILower": { - "codepoint": "U+ED19", - "description": "Fingering i (indicio; right-hand index finger for guitar)" - }, - "fingeringLeftBracket": { - "codepoint": "U+ED2A", - "description": "Fingering left bracket" - }, - "fingeringLeftBracketItalic": { - "codepoint": "U+ED8C", - "description": "Fingering left bracket italic" - }, - "fingeringLeftParenthesis": { - "codepoint": "U+ED28", - "description": "Fingering left parenthesis" - }, - "fingeringLeftParenthesisItalic": { - "codepoint": "U+ED8A", - "description": "Fingering left parenthesis italic" - }, - "fingeringMLower": { - "codepoint": "U+ED1A", - "description": "Fingering m (medio; right-hand middle finger for guitar)" - }, - "fingeringMultipleNotes": { - "codepoint": "U+ED23", - "description": "Multiple notes played by thumb or single finger" - }, - "fingeringOLower": { - "codepoint": "U+ED1F", - "description": "Fingering o (right-hand little finger for guitar)" - }, - "fingeringPLower": { - "codepoint": "U+ED17", - "description": "Fingering p (pulgar; right-hand thumb for guitar)" - }, - "fingeringRightBracket": { - "codepoint": "U+ED2B", - "description": "Fingering right bracket" - }, - "fingeringRightBracketItalic": { - "codepoint": "U+ED8D", - "description": "Fingering right bracket italic" - }, - "fingeringRightParenthesis": { - "codepoint": "U+ED29", - "description": "Fingering right parenthesis" - }, - "fingeringRightParenthesisItalic": { - "codepoint": "U+ED8B", - "description": "Fingering right parenthesis italic" - }, - "fingeringSeparatorMiddleDot": { - "codepoint": "U+ED2C", - "description": "Fingering middle dot separator" - }, - "fingeringSeparatorMiddleDotWhite": { - "codepoint": "U+ED2D", - "description": "Fingering white middle dot separator" - }, - "fingeringSeparatorSlash": { - "codepoint": "U+ED2E", - "description": "Fingering forward slash separator" - }, - "fingeringSubstitutionAbove": { - "codepoint": "U+ED20", - "description": "Finger substitution above" - }, - "fingeringSubstitutionBelow": { - "codepoint": "U+ED21", - "description": "Finger substitution below" - }, - "fingeringSubstitutionDash": { - "codepoint": "U+ED22", - "description": "Finger substitution dash" - }, - "fingeringTLower": { - "codepoint": "U+ED18", - "description": "Fingering t (right-hand thumb for guitar)" - }, - "fingeringTUpper": { - "codepoint": "U+ED16", - "description": "Fingering T (left-hand thumb for guitar)" - }, - "fingeringXLower": { - "codepoint": "U+ED1D", - "description": "Fingering x (right-hand little finger for guitar)" - }, - "flag1024thDown": { - "codepoint": "U+E24F", - "description": "Combining flag 8 (1024th) below" - }, - "flag1024thUp": { - "codepoint": "U+E24E", - "description": "Combining flag 8 (1024th) above" - }, - "flag128thDown": { - "codepoint": "U+E249", - "description": "Combining flag 5 (128th) below" - }, - "flag128thUp": { - "alternateCodepoint": "U+1D172", - "codepoint": "U+E248", - "description": "Combining flag 5 (128th) above" - }, - "flag16thDown": { - "codepoint": "U+E243", - "description": "Combining flag 2 (16th) below" - }, - "flag16thUp": { - "alternateCodepoint": "U+1D16F", - "codepoint": "U+E242", - "description": "Combining flag 2 (16th) above" - }, - "flag256thDown": { - "codepoint": "U+E24B", - "description": "Combining flag 6 (256th) below" - }, - "flag256thUp": { - "codepoint": "U+E24A", - "description": "Combining flag 6 (256th) above" - }, - "flag32ndDown": { - "codepoint": "U+E245", - "description": "Combining flag 3 (32nd) below" - }, - "flag32ndUp": { - "alternateCodepoint": "U+1D170", - "codepoint": "U+E244", - "description": "Combining flag 3 (32nd) above" - }, - "flag512thDown": { - "codepoint": "U+E24D", - "description": "Combining flag 7 (512th) below" - }, - "flag512thUp": { - "codepoint": "U+E24C", - "description": "Combining flag 7 (512th) above" - }, - "flag64thDown": { - "codepoint": "U+E247", - "description": "Combining flag 4 (64th) below" - }, - "flag64thUp": { - "alternateCodepoint": "U+1D171", - "codepoint": "U+E246", - "description": "Combining flag 4 (64th) above" - }, - "flag8thDown": { - "codepoint": "U+E241", - "description": "Combining flag 1 (8th) below" - }, - "flag8thUp": { - "alternateCodepoint": "U+1D16E", - "codepoint": "U+E240", - "description": "Combining flag 1 (8th) above" - }, - "flagInternalDown": { - "codepoint": "U+E251", - "description": "Internal combining flag below" - }, - "flagInternalUp": { - "codepoint": "U+E250", - "description": "Internal combining flag above" - }, - "fretboard3String": { - "codepoint": "U+E850", - "description": "3-string fretboard" - }, - "fretboard3StringNut": { - "codepoint": "U+E851", - "description": "3-string fretboard at nut" - }, - "fretboard4String": { - "alternateCodepoint": "U+1D11D", - "codepoint": "U+E852", - "description": "4-string fretboard" - }, - "fretboard4StringNut": { - "codepoint": "U+E853", - "description": "4-string fretboard at nut" - }, - "fretboard5String": { - "codepoint": "U+E854", - "description": "5-string fretboard" - }, - "fretboard5StringNut": { - "codepoint": "U+E855", - "description": "5-string fretboard at nut" - }, - "fretboard6String": { - "alternateCodepoint": "U+1D11C", - "codepoint": "U+E856", - "description": "6-string fretboard" - }, - "fretboard6StringNut": { - "codepoint": "U+E857", - "description": "6-string fretboard at nut" - }, - "fretboardFilledCircle": { - "codepoint": "U+E858", - "description": "Fingered fret (filled circle)" - }, - "fretboardO": { - "codepoint": "U+E85A", - "description": "Open string (O)" - }, - "fretboardX": { - "codepoint": "U+E859", - "description": "String not played (X)" - }, - "functionAngleLeft": { - "codepoint": "U+EA93", - "description": "Function theory angle bracket left" - }, - "functionAngleRight": { - "codepoint": "U+EA94", - "description": "Function theory angle bracket right" - }, - "functionBracketLeft": { - "codepoint": "U+EA8F", - "description": "Function theory bracket left" - }, - "functionBracketRight": { - "codepoint": "U+EA90", - "description": "Function theory bracket right" - }, - "functionDD": { - "codepoint": "U+EA81", - "description": "Function theory dominant of dominant" - }, - "functionDLower": { - "codepoint": "U+EA80", - "description": "Function theory minor dominant" - }, - "functionDUpper": { - "codepoint": "U+EA7F", - "description": "Function theory major dominant" - }, - "functionEight": { - "codepoint": "U+EA78", - "description": "Function theory 8" - }, - "functionFUpper": { - "codepoint": "U+EA99", - "description": "Function theory F" - }, - "functionFive": { - "codepoint": "U+EA75", - "description": "Function theory 5" - }, - "functionFour": { - "codepoint": "U+EA74", - "description": "Function theory 4" - }, - "functionGLower": { - "codepoint": "U+EA84", - "description": "Function theory g" - }, - "functionGUpper": { - "codepoint": "U+EA83", - "description": "Function theory G" - }, - "functionGreaterThan": { - "codepoint": "U+EA7C", - "description": "Function theory greater than" - }, - "functionILower": { - "codepoint": "U+EA9B", - "description": "Function theory i" - }, - "functionIUpper": { - "codepoint": "U+EA9A", - "description": "Function theory I" - }, - "functionKLower": { - "codepoint": "U+EA9D", - "description": "Function theory k" - }, - "functionKUpper": { - "codepoint": "U+EA9C", - "description": "Function theory K" - }, - "functionLLower": { - "codepoint": "U+EA9F", - "description": "Function theory l" - }, - "functionLUpper": { - "codepoint": "U+EA9E", - "description": "Function theory L" - }, - "functionLessThan": { - "codepoint": "U+EA7A", - "description": "Function theory less than" - }, - "functionMLower": { - "codepoint": "U+ED01", - "description": "Function theory m" - }, - "functionMUpper": { - "codepoint": "U+ED00", - "description": "Function theory M" - }, - "functionMinus": { - "codepoint": "U+EA7B", - "description": "Function theory minus" - }, - "functionNLower": { - "codepoint": "U+EA86", - "description": "Function theory n" - }, - "functionNUpper": { - "codepoint": "U+EA85", - "description": "Function theory N" - }, - "functionNUpperSuperscript": { - "codepoint": "U+ED02", - "description": "Function theory superscript N" - }, - "functionNine": { - "codepoint": "U+EA79", - "description": "Function theory 9" - }, - "functionOne": { - "codepoint": "U+EA71", - "description": "Function theory 1" - }, - "functionPLower": { - "codepoint": "U+EA88", - "description": "Function theory p" - }, - "functionPUpper": { - "codepoint": "U+EA87", - "description": "Function theory P" - }, - "functionParensLeft": { - "codepoint": "U+EA91", - "description": "Function theory parenthesis left" - }, - "functionParensRight": { - "codepoint": "U+EA92", - "description": "Function theory parenthesis right" - }, - "functionPlus": { - "codepoint": "U+EA98", - "description": "Function theory prefix plus" - }, - "functionRLower": { - "codepoint": "U+ED03", - "description": "Function theory r" - }, - "functionRepetition1": { - "codepoint": "U+EA95", - "description": "Function theory repetition 1" - }, - "functionRepetition2": { - "codepoint": "U+EA96", - "description": "Function theory repetition 2" - }, - "functionRing": { - "codepoint": "U+EA97", - "description": "Function theory prefix ring" - }, - "functionSLower": { - "codepoint": "U+EA8A", - "description": "Function theory minor subdominant" - }, - "functionSSLower": { - "codepoint": "U+EA7E", - "description": "Function theory minor subdominant of subdominant" - }, - "functionSSUpper": { - "codepoint": "U+EA7D", - "description": "Function theory major subdominant of subdominant" - }, - "functionSUpper": { - "codepoint": "U+EA89", - "description": "Function theory major subdominant" - }, - "functionSeven": { - "codepoint": "U+EA77", - "description": "Function theory 7" - }, - "functionSix": { - "codepoint": "U+EA76", - "description": "Function theory 6" - }, - "functionSlashedDD": { - "codepoint": "U+EA82", - "description": "Function theory double dominant seventh" - }, - "functionTLower": { - "codepoint": "U+EA8C", - "description": "Function theory minor tonic" - }, - "functionTUpper": { - "codepoint": "U+EA8B", - "description": "Function theory tonic" - }, - "functionThree": { - "codepoint": "U+EA73", - "description": "Function theory 3" - }, - "functionTwo": { - "codepoint": "U+EA72", - "description": "Function theory 2" - }, - "functionVLower": { - "codepoint": "U+EA8E", - "description": "Function theory v" - }, - "functionVUpper": { - "codepoint": "U+EA8D", - "description": "Function theory V" - }, - "functionZero": { - "codepoint": "U+EA70", - "description": "Function theory 0" - }, - "gClef": { - "alternateCodepoint": "U+1D11E", - "codepoint": "U+E050", - "description": "G clef" - }, - "gClef15ma": { - "codepoint": "U+E054", - "description": "G clef quindicesima alta" - }, - "gClef15mb": { - "codepoint": "U+E051", - "description": "G clef quindicesima bassa" - }, - "gClef8va": { - "alternateCodepoint": "U+1D11F", - "codepoint": "U+E053", - "description": "G clef ottava alta" - }, - "gClef8vb": { - "alternateCodepoint": "U+1D120", - "codepoint": "U+E052", - "description": "G clef ottava bassa" - }, - "gClef8vbCClef": { - "codepoint": "U+E056", - "description": "G clef ottava bassa with C clef" - }, - "gClef8vbOld": { - "codepoint": "U+E055", - "description": "G clef ottava bassa (old style)" - }, - "gClef8vbParens": { - "codepoint": "U+E057", - "description": "G clef, optionally ottava bassa" - }, - "gClefArrowDown": { - "codepoint": "U+E05B", - "description": "G clef, arrow down" - }, - "gClefArrowUp": { - "codepoint": "U+E05A", - "description": "G clef, arrow up" - }, - "gClefChange": { - "codepoint": "U+E07A", - "description": "G clef change" - }, - "gClefLigatedNumberAbove": { - "codepoint": "U+E059", - "description": "Combining G clef, number above" - }, - "gClefLigatedNumberBelow": { - "codepoint": "U+E058", - "description": "Combining G clef, number below" - }, - "gClefReversed": { - "codepoint": "U+E073", - "description": "Reversed G clef" - }, - "gClefTurned": { - "codepoint": "U+E074", - "description": "Turned G clef" - }, - "glissandoDown": { - "alternateCodepoint": "U+1D1B2", - "codepoint": "U+E586", - "description": "Glissando down" - }, - "glissandoUp": { - "alternateCodepoint": "U+1D1B1", - "codepoint": "U+E585", - "description": "Glissando up" - }, - "graceNoteAcciaccaturaStemDown": { - "codepoint": "U+E561", - "description": "Slashed grace note stem down" - }, - "graceNoteAcciaccaturaStemUp": { - "alternateCodepoint": "U+1D194", - "codepoint": "U+E560", - "description": "Slashed grace note stem up" - }, - "graceNoteAppoggiaturaStemDown": { - "codepoint": "U+E563", - "description": "Grace note stem down" - }, - "graceNoteAppoggiaturaStemUp": { - "alternateCodepoint": "U+1D195", - "codepoint": "U+E562", - "description": "Grace note stem up" - }, - "graceNoteSlashStemDown": { - "codepoint": "U+E565", - "description": "Slash for stem down grace note" - }, - "graceNoteSlashStemUp": { - "codepoint": "U+E564", - "description": "Slash for stem up grace note" - }, - "guitarBarreFull": { - "codepoint": "U+E848", - "description": "Full barr\u00e9" - }, - "guitarBarreHalf": { - "codepoint": "U+E849", - "description": "Half barr\u00e9" - }, - "guitarClosePedal": { - "codepoint": "U+E83F", - "description": "Closed wah/volume pedal" - }, - "guitarFadeIn": { - "codepoint": "U+E843", - "description": "Fade in" - }, - "guitarFadeOut": { - "codepoint": "U+E844", - "description": "Fade out" - }, - "guitarGolpe": { - "codepoint": "U+E842", - "description": "Golpe (tapping the pick guard)" - }, - "guitarHalfOpenPedal": { - "codepoint": "U+E83E", - "description": "Half-open wah/volume pedal" - }, - "guitarLeftHandTapping": { - "codepoint": "U+E840", - "description": "Left-hand tapping" - }, - "guitarOpenPedal": { - "codepoint": "U+E83D", - "description": "Open wah/volume pedal" - }, - "guitarRightHandTapping": { - "codepoint": "U+E841", - "description": "Right-hand tapping" - }, - "guitarShake": { - "codepoint": "U+E832", - "description": "Guitar shake" - }, - "guitarString0": { - "codepoint": "U+E833", - "description": "String number 0" - }, - "guitarString1": { - "codepoint": "U+E834", - "description": "String number 1" - }, - "guitarString2": { - "codepoint": "U+E835", - "description": "String number 2" - }, - "guitarString3": { - "codepoint": "U+E836", - "description": "String number 3" - }, - "guitarString4": { - "codepoint": "U+E837", - "description": "String number 4" - }, - "guitarString5": { - "codepoint": "U+E838", - "description": "String number 5" - }, - "guitarString6": { - "codepoint": "U+E839", - "description": "String number 6" - }, - "guitarString7": { - "codepoint": "U+E83A", - "description": "String number 7" - }, - "guitarString8": { - "codepoint": "U+E83B", - "description": "String number 8" - }, - "guitarString9": { - "codepoint": "U+E83C", - "description": "String number 9" - }, - "guitarStrumDown": { - "codepoint": "U+E847", - "description": "Strum direction down" - }, - "guitarStrumUp": { - "codepoint": "U+E846", - "description": "Strum direction up" - }, - "guitarVibratoBarDip": { - "codepoint": "U+E831", - "description": "Guitar vibrato bar dip" - }, - "guitarVibratoBarScoop": { - "codepoint": "U+E830", - "description": "Guitar vibrato bar scoop" - }, - "guitarVibratoStroke": { - "codepoint": "U+EAB2", - "description": "Vibrato wiggle segment" - }, - "guitarVolumeSwell": { - "codepoint": "U+E845", - "description": "Volume swell" - }, - "guitarWideVibratoStroke": { - "codepoint": "U+EAB3", - "description": "Wide vibrato wiggle segment" - }, - "handbellsBelltree": { - "codepoint": "U+E81F", - "description": "Belltree" - }, - "handbellsDamp3": { - "codepoint": "U+E81E", - "description": "Damp 3" - }, - "handbellsEcho1": { - "codepoint": "U+E81B", - "description": "Echo" - }, - "handbellsEcho2": { - "codepoint": "U+E81C", - "description": "Echo 2" - }, - "handbellsGyro": { - "codepoint": "U+E81D", - "description": "Gyro" - }, - "handbellsHandMartellato": { - "codepoint": "U+E812", - "description": "Hand martellato" - }, - "handbellsMalletBellOnTable": { - "codepoint": "U+E815", - "description": "Mallet, bell on table" - }, - "handbellsMalletBellSuspended": { - "codepoint": "U+E814", - "description": "Mallet, bell suspended" - }, - "handbellsMalletLft": { - "codepoint": "U+E816", - "description": "Mallet lift" - }, - "handbellsMartellato": { - "codepoint": "U+E810", - "description": "Martellato" - }, - "handbellsMartellatoLift": { - "codepoint": "U+E811", - "description": "Martellato lift" - }, - "handbellsMutedMartellato": { - "codepoint": "U+E813", - "description": "Muted martellato" - }, - "handbellsPluckLift": { - "codepoint": "U+E817", - "description": "Pluck lift" - }, - "handbellsSwing": { - "codepoint": "U+E81A", - "description": "Swing" - }, - "handbellsSwingDown": { - "codepoint": "U+E819", - "description": "Swing down" - }, - "handbellsSwingUp": { - "codepoint": "U+E818", - "description": "Swing up" - }, - "handbellsTablePairBells": { - "codepoint": "U+E821", - "description": "Table pair of handbells" - }, - "handbellsTableSingleBell": { - "codepoint": "U+E820", - "description": "Table single handbell" - }, - "harpMetalRod": { - "codepoint": "U+E68F", - "description": "Metal rod pictogram" - }, - "harpPedalCentered": { - "codepoint": "U+E681", - "description": "Harp pedal centered (natural)" - }, - "harpPedalDivider": { - "codepoint": "U+E683", - "description": "Harp pedal divider" - }, - "harpPedalLowered": { - "codepoint": "U+E682", - "description": "Harp pedal lowered (sharp)" - }, - "harpPedalRaised": { - "codepoint": "U+E680", - "description": "Harp pedal raised (flat)" - }, - "harpSalzedoAeolianAscending": { - "codepoint": "U+E695", - "description": "Ascending aeolian chords (Salzedo)" - }, - "harpSalzedoAeolianDescending": { - "codepoint": "U+E696", - "description": "Descending aeolian chords (Salzedo)" - }, - "harpSalzedoDampAbove": { - "codepoint": "U+E69A", - "description": "Damp above (Salzedo)" - }, - "harpSalzedoDampBelow": { - "codepoint": "U+E699", - "description": "Damp below (Salzedo)" - }, - "harpSalzedoDampBothHands": { - "codepoint": "U+E698", - "description": "Damp with both hands (Salzedo)" - }, - "harpSalzedoDampLowStrings": { - "codepoint": "U+E697", - "description": "Damp only low strings (Salzedo)" - }, - "harpSalzedoFluidicSoundsLeft": { - "codepoint": "U+E68D", - "description": "Fluidic sounds, left hand (Salzedo)" - }, - "harpSalzedoFluidicSoundsRight": { - "codepoint": "U+E68E", - "description": "Fluidic sounds, right hand (Salzedo)" - }, - "harpSalzedoIsolatedSounds": { - "codepoint": "U+E69C", - "description": "Isolated sounds (Salzedo)" - }, - "harpSalzedoMetallicSounds": { - "codepoint": "U+E688", - "description": "Metallic sounds (Salzedo)" - }, - "harpSalzedoMetallicSoundsOneString": { - "codepoint": "U+E69B", - "description": "Metallic sounds, one string (Salzedo)" - }, - "harpSalzedoMuffleTotally": { - "codepoint": "U+E68C", - "description": "Muffle totally (Salzedo)" - }, - "harpSalzedoOboicFlux": { - "codepoint": "U+E685", - "description": "Oboic flux (Salzedo)" - }, - "harpSalzedoPlayUpperEnd": { - "codepoint": "U+E68A", - "description": "Play at upper end of strings (Salzedo)" - }, - "harpSalzedoSlideWithSuppleness": { - "codepoint": "U+E684", - "description": "Slide with suppleness (Salzedo)" - }, - "harpSalzedoSnareDrum": { - "codepoint": "U+E69D", - "description": "Snare drum effect (Salzedo)" - }, - "harpSalzedoTamTamSounds": { - "codepoint": "U+E689", - "description": "Tam-tam sounds (Salzedo)" - }, - "harpSalzedoThunderEffect": { - "codepoint": "U+E686", - "description": "Thunder effect (Salzedo)" - }, - "harpSalzedoTimpanicSounds": { - "codepoint": "U+E68B", - "description": "Timpanic sounds (Salzedo)" - }, - "harpSalzedoWhistlingSounds": { - "codepoint": "U+E687", - "description": "Whistling sounds (Salzedo)" - }, - "harpStringNoiseStem": { - "codepoint": "U+E694", - "description": "Combining string noise for stem" - }, - "harpTuningKey": { - "codepoint": "U+E690", - "description": "Tuning key pictogram" - }, - "harpTuningKeyGlissando": { - "codepoint": "U+E693", - "description": "Retune strings for glissando" - }, - "harpTuningKeyHandle": { - "codepoint": "U+E691", - "description": "Use handle of tuning key pictogram" - }, - "harpTuningKeyShank": { - "codepoint": "U+E692", - "description": "Use shank of tuning key pictogram" - }, - "indianDrumClef": { - "codepoint": "U+ED70", - "description": "Indian drum clef" - }, - "kahnBackChug": { - "codepoint": "U+EDE2", - "description": "Back-chug" - }, - "kahnBackFlap": { - "codepoint": "U+EDD8", - "description": "Back-flap" - }, - "kahnBackRiff": { - "codepoint": "U+EDE1", - "description": "Back-riff" - }, - "kahnBackRip": { - "codepoint": "U+EDDA", - "description": "Back-rip" - }, - "kahnBallChange": { - "codepoint": "U+EDC6", - "description": "Ball-change" - }, - "kahnBallDig": { - "codepoint": "U+EDCD", - "description": "Ball-dig" - }, - "kahnBrushBackward": { - "codepoint": "U+EDA7", - "description": "Brush-backward" - }, - "kahnBrushForward": { - "codepoint": "U+EDA6", - "description": "Brush-forward" - }, - "kahnChug": { - "codepoint": "U+EDDD", - "description": "Chug" - }, - "kahnClap": { - "codepoint": "U+EDB8", - "description": "Clap" - }, - "kahnDoubleSnap": { - "codepoint": "U+EDBA", - "description": "Double-snap" - }, - "kahnDoubleWing": { - "codepoint": "U+EDEB", - "description": "Double-wing" - }, - "kahnDrawStep": { - "codepoint": "U+EDB2", - "description": "Draw-step" - }, - "kahnDrawTap": { - "codepoint": "U+EDB3", - "description": "Draw-tap" - }, - "kahnFlam": { - "codepoint": "U+EDCF", - "description": "Flam" - }, - "kahnFlap": { - "codepoint": "U+EDD5", - "description": "Flap" - }, - "kahnFlapStep": { - "codepoint": "U+EDD7", - "description": "Flap-step" - }, - "kahnFlat": { - "codepoint": "U+EDA9", - "description": "Flat" - }, - "kahnFleaHop": { - "codepoint": "U+EDB0", - "description": "Flea-hop" - }, - "kahnFleaTap": { - "codepoint": "U+EDB1", - "description": "Flea-tap" - }, - "kahnGraceTap": { - "codepoint": "U+EDA8", - "description": "Grace-tap" - }, - "kahnGraceTapChange": { - "codepoint": "U+EDD1", - "description": "Grace-tap-change" - }, - "kahnGraceTapHop": { - "codepoint": "U+EDD0", - "description": "Grace-tap-hop" - }, - "kahnGraceTapStamp": { - "codepoint": "U+EDD3", - "description": "Grace-tap-stamp" - }, - "kahnHeel": { - "codepoint": "U+EDAA", - "description": "Heel" - }, - "kahnHeelChange": { - "codepoint": "U+EDC9", - "description": "Heel-change" - }, - "kahnHeelClick": { - "codepoint": "U+EDBB", - "description": "Heel-click" - }, - "kahnHeelDrop": { - "codepoint": "U+EDB6", - "description": "Heel-drop" - }, - "kahnHeelStep": { - "codepoint": "U+EDC4", - "description": "Heel-step" - }, - "kahnHeelTap": { - "codepoint": "U+EDCB", - "description": "Heel-tap" - }, - "kahnHop": { - "codepoint": "U+EDA2", - "description": "Hop" - }, - "kahnJumpApart": { - "codepoint": "U+EDA5", - "description": "Jump-apart" - }, - "kahnJumpTogether": { - "codepoint": "U+EDA4", - "description": "Jump-together" - }, - "kahnKneeInward": { - "codepoint": "U+EDAD", - "description": "Knee-inward" - }, - "kahnKneeOutward": { - "codepoint": "U+EDAC", - "description": "Knee-outward" - }, - "kahnLeap": { - "codepoint": "U+EDA3", - "description": "Leap" - }, - "kahnLeapFlatFoot": { - "codepoint": "U+EDD2", - "description": "Leap-flat-foot" - }, - "kahnLeapHeelClick": { - "codepoint": "U+EDD4", - "description": "Leap-heel-click" - }, - "kahnLeftCatch": { - "codepoint": "U+EDBF", - "description": "Left-catch" - }, - "kahnLeftCross": { - "codepoint": "U+EDBD", - "description": "Left-cross" - }, - "kahnLeftFoot": { - "codepoint": "U+EDEE", - "description": "Left-foot" - }, - "kahnLeftToeStrike": { - "codepoint": "U+EDC1", - "description": "Left-toe-strike" - }, - "kahnLeftTurn": { - "codepoint": "U+EDF0", - "description": "Left-turn" - }, - "kahnOverTheTop": { - "codepoint": "U+EDEC", - "description": "Over-the-top" - }, - "kahnOverTheTopTap": { - "codepoint": "U+EDED", - "description": "Over-the-top-tap" - }, - "kahnPull": { - "codepoint": "U+EDE3", - "description": "Pull" - }, - "kahnPush": { - "codepoint": "U+EDDE", - "description": "Push" - }, - "kahnRiff": { - "codepoint": "U+EDE0", - "description": "Riff" - }, - "kahnRiffle": { - "codepoint": "U+EDE7", - "description": "Riffle" - }, - "kahnRightCatch": { - "codepoint": "U+EDC0", - "description": "Right-catch" - }, - "kahnRightCross": { - "codepoint": "U+EDBE", - "description": "Right-cross" - }, - "kahnRightFoot": { - "codepoint": "U+EDEF", - "description": "Right-foot" - }, - "kahnRightToeStrike": { - "codepoint": "U+EDC2", - "description": "Right-toe-strike" - }, - "kahnRightTurn": { - "codepoint": "U+EDF1", - "description": "Right-turn" - }, - "kahnRip": { - "codepoint": "U+EDD6", - "description": "Rip" - }, - "kahnRipple": { - "codepoint": "U+EDE8", - "description": "Ripple" - }, - "kahnScrape": { - "codepoint": "U+EDAE", - "description": "Scrape" - }, - "kahnScuff": { - "codepoint": "U+EDDC", - "description": "Scuff" - }, - "kahnScuffle": { - "codepoint": "U+EDE6", - "description": "Scuffle" - }, - "kahnShuffle": { - "codepoint": "U+EDE5", - "description": "Shuffle" - }, - "kahnSlam": { - "codepoint": "U+EDCE", - "description": "Slam" - }, - "kahnSlap": { - "codepoint": "U+EDD9", - "description": "Slap" - }, - "kahnSlideStep": { - "codepoint": "U+EDB4", - "description": "Slide-step" - }, - "kahnSlideTap": { - "codepoint": "U+EDB5", - "description": "Slide-tap" - }, - "kahnSnap": { - "codepoint": "U+EDB9", - "description": "Snap" - }, - "kahnStamp": { - "codepoint": "U+EDC3", - "description": "Stamp" - }, - "kahnStampStamp": { - "codepoint": "U+EDC8", - "description": "Stamp-stamp" - }, - "kahnStep": { - "codepoint": "U+EDA0", - "description": "Step" - }, - "kahnStepStamp": { - "codepoint": "U+EDC7", - "description": "Step-stamp" - }, - "kahnStomp": { - "codepoint": "U+EDCA", - "description": "Stomp" - }, - "kahnStompBrush": { - "codepoint": "U+EDDB", - "description": "Stomp-brush" - }, - "kahnTap": { - "codepoint": "U+EDA1", - "description": "Tap" - }, - "kahnToe": { - "codepoint": "U+EDAB", - "description": "Toe" - }, - "kahnToeClick": { - "codepoint": "U+EDBC", - "description": "Toe-click" - }, - "kahnToeDrop": { - "codepoint": "U+EDB7", - "description": "Toe-drop" - }, - "kahnToeStep": { - "codepoint": "U+EDC5", - "description": "Toe-step" - }, - "kahnToeTap": { - "codepoint": "U+EDCC", - "description": "Toe-tap" - }, - "kahnTrench": { - "codepoint": "U+EDAF", - "description": "Trench" - }, - "kahnWing": { - "codepoint": "U+EDE9", - "description": "Wing" - }, - "kahnWingChange": { - "codepoint": "U+EDEA", - "description": "Wing-change" - }, - "kahnZank": { - "codepoint": "U+EDE4", - "description": "Zank" - }, - "kahnZink": { - "codepoint": "U+EDDF", - "description": "Zink" - }, - "keyboardBebung2DotsAbove": { - "codepoint": "U+E668", - "description": "Clavichord bebung, 2 finger movements (above)" - }, - "keyboardBebung2DotsBelow": { - "codepoint": "U+E669", - "description": "Clavichord bebung, 2 finger movements (below)" - }, - "keyboardBebung3DotsAbove": { - "codepoint": "U+E66A", - "description": "Clavichord bebung, 3 finger movements (above)" - }, - "keyboardBebung3DotsBelow": { - "codepoint": "U+E66B", - "description": "Clavichord bebung, 3 finger movements (below)" - }, - "keyboardBebung4DotsAbove": { - "codepoint": "U+E66C", - "description": "Clavichord bebung, 4 finger movements (above)" - }, - "keyboardBebung4DotsBelow": { - "codepoint": "U+E66D", - "description": "Clavichord bebung, 4 finger movements (below)" - }, - "keyboardLeftPedalPictogram": { - "codepoint": "U+E65E", - "description": "Left pedal pictogram" - }, - "keyboardMiddlePedalPictogram": { - "codepoint": "U+E65F", - "description": "Middle pedal pictogram" - }, - "keyboardPedalD": { - "codepoint": "U+E653", - "description": "Pedal d" - }, - "keyboardPedalDot": { - "codepoint": "U+E654", - "description": "Pedal dot" - }, - "keyboardPedalE": { - "codepoint": "U+E652", - "description": "Pedal e" - }, - "keyboardPedalHalf": { - "alternateCodepoint": "U+1D1B0", - "codepoint": "U+E656", - "description": "Half-pedal mark" - }, - "keyboardPedalHalf2": { - "codepoint": "U+E65B", - "description": "Half pedal mark 1" - }, - "keyboardPedalHalf3": { - "codepoint": "U+E65C", - "description": "Half pedal mark 2" - }, - "keyboardPedalHeel1": { - "codepoint": "U+E661", - "description": "Pedal heel 1" - }, - "keyboardPedalHeel2": { - "codepoint": "U+E662", - "description": "Pedal heel 2" - }, - "keyboardPedalHeel3": { - "codepoint": "U+E663", - "description": "Pedal heel 3 (Davis)" - }, - "keyboardPedalHeelToToe": { - "codepoint": "U+E674", - "description": "Pedal heel to toe" - }, - "keyboardPedalHeelToe": { - "codepoint": "U+E666", - "description": "Pedal heel or toe" - }, - "keyboardPedalHookEnd": { - "codepoint": "U+E673", - "description": "Pedal hook end" - }, - "keyboardPedalHookStart": { - "codepoint": "U+E672", - "description": "Pedal hook start" - }, - "keyboardPedalHyphen": { - "codepoint": "U+E658", - "description": "Pedal hyphen" - }, - "keyboardPedalP": { - "codepoint": "U+E651", - "description": "Pedal P" - }, - "keyboardPedalParensLeft": { - "codepoint": "U+E676", - "description": "Left parenthesis for pedal marking" - }, - "keyboardPedalParensRight": { - "codepoint": "U+E677", - "description": "Right parenthesis for pedal marking" - }, - "keyboardPedalPed": { - "alternateCodepoint": "U+1D1AE", - "codepoint": "U+E650", - "description": "Pedal mark" - }, - "keyboardPedalS": { - "codepoint": "U+E65A", - "description": "Pedal S" - }, - "keyboardPedalSost": { - "codepoint": "U+E659", - "description": "Sostenuto pedal mark" - }, - "keyboardPedalToe1": { - "codepoint": "U+E664", - "description": "Pedal toe 1" - }, - "keyboardPedalToe2": { - "codepoint": "U+E665", - "description": "Pedal toe 2" - }, - "keyboardPedalToeToHeel": { - "codepoint": "U+E675", - "description": "Pedal toe to heel" - }, - "keyboardPedalUp": { - "alternateCodepoint": "U+1D1AF", - "codepoint": "U+E655", - "description": "Pedal up mark" - }, - "keyboardPedalUpNotch": { - "codepoint": "U+E657", - "description": "Pedal up notch" - }, - "keyboardPedalUpSpecial": { - "codepoint": "U+E65D", - "description": "Pedal up special" - }, - "keyboardPlayWithLH": { - "codepoint": "U+E670", - "description": "Play with left hand" - }, - "keyboardPlayWithLHEnd": { - "codepoint": "U+E671", - "description": "Play with left hand (end)" - }, - "keyboardPlayWithRH": { - "codepoint": "U+E66E", - "description": "Play with right hand" - }, - "keyboardPlayWithRHEnd": { - "codepoint": "U+E66F", - "description": "Play with right hand (end)" - }, - "keyboardPluckInside": { - "codepoint": "U+E667", - "description": "Pluck strings inside piano (Maderna)" - }, - "keyboardRightPedalPictogram": { - "codepoint": "U+E660", - "description": "Right pedal pictogram" - }, - "kievanAccidentalFlat": { - "alternateCodepoint": "U+1D1E8", - "codepoint": "U+EC3E", - "description": "Kievan flat" - }, - "kievanAccidentalSharp": { - "codepoint": "U+EC3D", - "description": "Kievan sharp" - }, - "kievanAugmentationDot": { - "codepoint": "U+EC3C", - "description": "Kievan augmentation dot" - }, - "kievanCClef": { - "alternateCodepoint": "U+1D1DE", - "codepoint": "U+EC30", - "description": "Kievan C clef (tse-fa-ut)" - }, - "kievanEndingSymbol": { - "alternateCodepoint": "U+1D1DF", - "codepoint": "U+EC31", - "description": "Kievan ending symbol" - }, - "kievanNote8thStemDown": { - "alternateCodepoint": "U+1D1E6", - "codepoint": "U+EC3A", - "description": "Kievan eighth note, stem down" - }, - "kievanNote8thStemUp": { - "alternateCodepoint": "U+1D1E7", - "codepoint": "U+EC39", - "description": "Kievan eighth note, stem up" - }, - "kievanNoteBeam": { - "codepoint": "U+EC3B", - "description": "Kievan beam" - }, - "kievanNoteHalfStaffLine": { - "alternateCodepoint": "U+1D1E3", - "codepoint": "U+EC35", - "description": "Kievan half note (on staff line)" - }, - "kievanNoteHalfStaffSpace": { - "codepoint": "U+EC36", - "description": "Kievan half note (in staff space)" - }, - "kievanNoteQuarterStemDown": { - "alternateCodepoint": "U+1D1E4", - "codepoint": "U+EC38", - "description": "Kievan quarter note, stem down" - }, - "kievanNoteQuarterStemUp": { - "alternateCodepoint": "U+1D1E5", - "codepoint": "U+EC37", - "description": "Kievan quarter note, stem up" - }, - "kievanNoteReciting": { - "alternateCodepoint": "U+1D1E1", - "codepoint": "U+EC32", - "description": "Kievan reciting note" - }, - "kievanNoteWhole": { - "alternateCodepoint": "U+1D1E2", - "codepoint": "U+EC33", - "description": "Kievan whole note" - }, - "kievanNoteWholeFinal": { - "alternateCodepoint": "U+1D1E0", - "codepoint": "U+EC34", - "description": "Kievan final whole note" - }, - "kodalyHandDo": { - "codepoint": "U+EC40", - "description": "Do hand sign" - }, - "kodalyHandFa": { - "codepoint": "U+EC43", - "description": "Fa hand sign" - }, - "kodalyHandLa": { - "codepoint": "U+EC45", - "description": "La hand sign" - }, - "kodalyHandMi": { - "codepoint": "U+EC42", - "description": "Mi hand sign" - }, - "kodalyHandRe": { - "codepoint": "U+EC41", - "description": "Re hand sign" - }, - "kodalyHandSo": { - "codepoint": "U+EC44", - "description": "So hand sign" - }, - "kodalyHandTi": { - "codepoint": "U+EC46", - "description": "Ti hand sign" - }, - "leftRepeatSmall": { - "codepoint": "U+E04C", - "description": "Left repeat sign within bar" - }, - "legerLine": { - "codepoint": "U+E022", - "description": "Leger line" - }, - "legerLineNarrow": { - "codepoint": "U+E024", - "description": "Leger line (narrow)" - }, - "legerLineWide": { - "codepoint": "U+E023", - "description": "Leger line (wide)" - }, - "luteBarlineEndRepeat": { - "codepoint": "U+EBA4", - "description": "Lute tablature end repeat barline" - }, - "luteBarlineFinal": { - "codepoint": "U+EBA5", - "description": "Lute tablature final barline" - }, - "luteBarlineStartRepeat": { - "codepoint": "U+EBA3", - "description": "Lute tablature start repeat barline" - }, - "luteDuration16th": { - "codepoint": "U+EBAB", - "description": "16th note (semiquaver) duration sign" - }, - "luteDuration32nd": { - "codepoint": "U+EBAC", - "description": "32nd note (demisemiquaver) duration sign" - }, - "luteDuration8th": { - "codepoint": "U+EBAA", - "description": "Eighth note (quaver) duration sign" - }, - "luteDurationDoubleWhole": { - "codepoint": "U+EBA6", - "description": "Double whole note (breve) duration sign" - }, - "luteDurationHalf": { - "codepoint": "U+EBA8", - "description": "Half note (minim) duration sign" - }, - "luteDurationQuarter": { - "codepoint": "U+EBA9", - "description": "Quarter note (crotchet) duration sign" - }, - "luteDurationWhole": { - "codepoint": "U+EBA7", - "description": "Whole note (semibreve) duration sign" - }, - "luteFingeringRHFirst": { - "codepoint": "U+EBAE", - "description": "Right-hand fingering, first finger" - }, - "luteFingeringRHSecond": { - "codepoint": "U+EBAF", - "description": "Right-hand fingering, second finger" - }, - "luteFingeringRHThird": { - "codepoint": "U+EBB0", - "description": "Right-hand fingering, third finger" - }, - "luteFingeringRHThumb": { - "codepoint": "U+EBAD", - "description": "Right-hand fingering, thumb" - }, - "luteFrench10thCourse": { - "codepoint": "U+EBD0", - "description": "10th course (diapason)" - }, - "luteFrench7thCourse": { - "codepoint": "U+EBCD", - "description": "Seventh course (diapason)" - }, - "luteFrench8thCourse": { - "codepoint": "U+EBCE", - "description": "Eighth course (diapason)" - }, - "luteFrench9thCourse": { - "codepoint": "U+EBCF", - "description": "Ninth course (diapason)" - }, - "luteFrenchAppoggiaturaAbove": { - "codepoint": "U+EBD5", - "description": "Appoggiatura from above" - }, - "luteFrenchAppoggiaturaBelow": { - "codepoint": "U+EBD4", - "description": "Appoggiatura from below" - }, - "luteFrenchFretA": { - "codepoint": "U+EBC0", - "description": "Open string (a)" - }, - "luteFrenchFretB": { - "codepoint": "U+EBC1", - "description": "First fret (b)" - }, - "luteFrenchFretC": { - "codepoint": "U+EBC2", - "description": "Second fret (c)" - }, - "luteFrenchFretD": { - "codepoint": "U+EBC3", - "description": "Third fret (d)" - }, - "luteFrenchFretE": { - "codepoint": "U+EBC4", - "description": "Fourth fret (e)" - }, - "luteFrenchFretF": { - "codepoint": "U+EBC5", - "description": "Fifth fret (f)" - }, - "luteFrenchFretG": { - "codepoint": "U+EBC6", - "description": "Sixth fret (g)" - }, - "luteFrenchFretH": { - "codepoint": "U+EBC7", - "description": "Seventh fret (h)" - }, - "luteFrenchFretI": { - "codepoint": "U+EBC8", - "description": "Eighth fret (i)" - }, - "luteFrenchFretK": { - "codepoint": "U+EBC9", - "description": "Ninth fret (k)" - }, - "luteFrenchFretL": { - "codepoint": "U+EBCA", - "description": "10th fret (l)" - }, - "luteFrenchFretM": { - "codepoint": "U+EBCB", - "description": "11th fret (m)" - }, - "luteFrenchFretN": { - "codepoint": "U+EBCC", - "description": "12th fret (n)" - }, - "luteFrenchMordentInverted": { - "codepoint": "U+EBD3", - "description": "Inverted mordent" - }, - "luteFrenchMordentLower": { - "codepoint": "U+EBD2", - "description": "Mordent with lower auxiliary" - }, - "luteFrenchMordentUpper": { - "codepoint": "U+EBD1", - "description": "Mordent with upper auxiliary" - }, - "luteGermanALower": { - "codepoint": "U+EC00", - "description": "5th course, 1st fret (a)" - }, - "luteGermanAUpper": { - "codepoint": "U+EC17", - "description": "6th course, 1st fret (A)" - }, - "luteGermanBLower": { - "codepoint": "U+EC01", - "description": "4th course, 1st fret (b)" - }, - "luteGermanBUpper": { - "codepoint": "U+EC18", - "description": "6th course, 2nd fret (B)" - }, - "luteGermanCLower": { - "codepoint": "U+EC02", - "description": "3rd course, 1st fret (c)" - }, - "luteGermanCUpper": { - "codepoint": "U+EC19", - "description": "6th course, 3rd fret (C)" - }, - "luteGermanDLower": { - "codepoint": "U+EC03", - "description": "2nd course, 1st fret (d)" - }, - "luteGermanDUpper": { - "codepoint": "U+EC1A", - "description": "6th course, 4th fret (D)" - }, - "luteGermanELower": { - "codepoint": "U+EC04", - "description": "1st course, 1st fret (e)" - }, - "luteGermanEUpper": { - "codepoint": "U+EC1B", - "description": "6th course, 5th fret (E)" - }, - "luteGermanFLower": { - "codepoint": "U+EC05", - "description": "5th course, 2nd fret (f)" - }, - "luteGermanFUpper": { - "codepoint": "U+EC1C", - "description": "6th course, 6th fret (F)" - }, - "luteGermanGLower": { - "codepoint": "U+EC06", - "description": "4th course, 2nd fret (g)" - }, - "luteGermanGUpper": { - "codepoint": "U+EC1D", - "description": "6th course, 7th fret (G)" - }, - "luteGermanHLower": { - "codepoint": "U+EC07", - "description": "3rd course, 2nd fret (h)" - }, - "luteGermanHUpper": { - "codepoint": "U+EC1E", - "description": "6th course, 8th fret (H)" - }, - "luteGermanILower": { - "codepoint": "U+EC08", - "description": "2nd course, 2nd fret (i)" - }, - "luteGermanIUpper": { - "codepoint": "U+EC1F", - "description": "6th course, 9th fret (I)" - }, - "luteGermanKLower": { - "codepoint": "U+EC09", - "description": "1st course, 2nd fret (k)" - }, - "luteGermanKUpper": { - "codepoint": "U+EC20", - "description": "6th course, 10th fret (K)" - }, - "luteGermanLLower": { - "codepoint": "U+EC0A", - "description": "5th course, 3rd fret (l)" - }, - "luteGermanLUpper": { - "codepoint": "U+EC21", - "description": "6th course, 11th fret (L)" - }, - "luteGermanMLower": { - "codepoint": "U+EC0B", - "description": "4th course, 3rd fret (m)" - }, - "luteGermanMUpper": { - "codepoint": "U+EC22", - "description": "6th course, 12th fret (M)" - }, - "luteGermanNLower": { - "codepoint": "U+EC0C", - "description": "3rd course, 3rd fret (n)" - }, - "luteGermanNUpper": { - "codepoint": "U+EC23", - "description": "6th course, 13th fret (N)" - }, - "luteGermanOLower": { - "codepoint": "U+EC0D", - "description": "2nd course, 3rd fret (o)" - }, - "luteGermanPLower": { - "codepoint": "U+EC0E", - "description": "1st course, 3rd fret (p)" - }, - "luteGermanQLower": { - "codepoint": "U+EC0F", - "description": "5th course, 4th fret (q)" - }, - "luteGermanRLower": { - "codepoint": "U+EC10", - "description": "4th course, 4th fret (r)" - }, - "luteGermanSLower": { - "codepoint": "U+EC11", - "description": "3rd course, 4th fret (s)" - }, - "luteGermanTLower": { - "codepoint": "U+EC12", - "description": "2nd course, 4th fret (t)" - }, - "luteGermanVLower": { - "codepoint": "U+EC13", - "description": "1st course, 4th fret (v)" - }, - "luteGermanXLower": { - "codepoint": "U+EC14", - "description": "5th course, 5th fret (x)" - }, - "luteGermanYLower": { - "codepoint": "U+EC15", - "description": "4th course, 5th fret (y)" - }, - "luteGermanZLower": { - "codepoint": "U+EC16", - "description": "3rd course, 5th fret (z)" - }, - "luteItalianClefCSolFaUt": { - "codepoint": "U+EBF1", - "description": "C sol fa ut clef" - }, - "luteItalianClefFFaUt": { - "codepoint": "U+EBF0", - "description": "F fa ut clef" - }, - "luteItalianFret0": { - "codepoint": "U+EBE0", - "description": "Open string (0)" - }, - "luteItalianFret1": { - "codepoint": "U+EBE1", - "description": "First fret (1)" - }, - "luteItalianFret2": { - "codepoint": "U+EBE2", - "description": "Second fret (2)" - }, - "luteItalianFret3": { - "codepoint": "U+EBE3", - "description": "Third fret (3)" - }, - "luteItalianFret4": { - "codepoint": "U+EBE4", - "description": "Fourth fret (4)" - }, - "luteItalianFret5": { - "codepoint": "U+EBE5", - "description": "Fifth fret (5)" - }, - "luteItalianFret6": { - "codepoint": "U+EBE6", - "description": "Sixth fret (6)" - }, - "luteItalianFret7": { - "codepoint": "U+EBE7", - "description": "Seventh fret (7)" - }, - "luteItalianFret8": { - "codepoint": "U+EBE8", - "description": "Eighth fret (8)" - }, - "luteItalianFret9": { - "codepoint": "U+EBE9", - "description": "Ninth fret (9)" - }, - "luteItalianHoldFinger": { - "codepoint": "U+EBF4", - "description": "Hold finger in place" - }, - "luteItalianHoldNote": { - "codepoint": "U+EBF3", - "description": "Hold note" - }, - "luteItalianReleaseFinger": { - "codepoint": "U+EBF5", - "description": "Release finger" - }, - "luteItalianTempoFast": { - "codepoint": "U+EBEA", - "description": "Fast tempo indication (de Mudarra)" - }, - "luteItalianTempoNeitherFastNorSlow": { - "codepoint": "U+EBEC", - "description": "Neither fast nor slow tempo indication (de Mudarra)" - }, - "luteItalianTempoSlow": { - "codepoint": "U+EBED", - "description": "Slow tempo indication (de Mudarra)" - }, - "luteItalianTempoSomewhatFast": { - "codepoint": "U+EBEB", - "description": "Somewhat fast tempo indication (de Narvaez)" - }, - "luteItalianTempoVerySlow": { - "codepoint": "U+EBEE", - "description": "Very slow indication (de Narvaez)" - }, - "luteItalianTimeTriple": { - "codepoint": "U+EBEF", - "description": "Triple time indication" - }, - "luteItalianTremolo": { - "codepoint": "U+EBF2", - "description": "Single-finger tremolo or mordent" - }, - "luteItalianVibrato": { - "codepoint": "U+EBF6", - "description": "Vibrato (verre cass\u00e9)" - }, - "luteStaff6Lines": { - "codepoint": "U+EBA0", - "description": "Lute tablature staff, 6 courses" - }, - "luteStaff6LinesNarrow": { - "codepoint": "U+EBA2", - "description": "Lute tablature staff, 6 courses (narrow)" - }, - "luteStaff6LinesWide": { - "codepoint": "U+EBA1", - "description": "Lute tablature staff, 6 courses (wide)" - }, - "lyricsElision": { - "codepoint": "U+E551", - "description": "Elision" - }, - "lyricsElisionNarrow": { - "codepoint": "U+E550", - "description": "Narrow elision" - }, - "lyricsElisionWide": { - "codepoint": "U+E552", - "description": "Wide elision" - }, - "lyricsHyphenBaseline": { - "codepoint": "U+E553", - "description": "Baseline hyphen" - }, - "lyricsHyphenBaselineNonBreaking": { - "codepoint": "U+E554", - "description": "Non-breaking baseline hyphen" - }, - "lyricsTextRepeat": { - "codepoint": "U+E555", - "description": "Text repeats" - }, - "medRenFlatHardB": { - "codepoint": "U+E9E1", - "description": "Flat, hard b (mi)" - }, - "medRenFlatSoftB": { - "alternateCodepoint": "U+1D1D2", - "codepoint": "U+E9E0", - "description": "Flat, soft b (fa)" - }, - "medRenFlatWithDot": { - "codepoint": "U+E9E4", - "description": "Flat with dot" - }, - "medRenGClefCMN": { - "codepoint": "U+EA24", - "description": "G clef (Corpus Monodicum)" - }, - "medRenLiquescenceCMN": { - "codepoint": "U+EA22", - "description": "Liquescence" - }, - "medRenLiquescentAscCMN": { - "codepoint": "U+EA26", - "description": "Liquescent ascending (Corpus Monodicum)" - }, - "medRenLiquescentDescCMN": { - "codepoint": "U+EA27", - "description": "Liquescent descending (Corpus Monodicum)" - }, - "medRenNatural": { - "codepoint": "U+E9E2", - "description": "Natural" - }, - "medRenNaturalWithCross": { - "codepoint": "U+E9E5", - "description": "Natural with interrupted cross" - }, - "medRenOriscusCMN": { - "codepoint": "U+EA2A", - "description": "Oriscus (Corpus Monodicum)" - }, - "medRenPlicaCMN": { - "codepoint": "U+EA23", - "description": "Plica" - }, - "medRenPunctumCMN": { - "codepoint": "U+EA25", - "description": "Punctum (Corpus Monodicum)" - }, - "medRenQuilismaCMN": { - "codepoint": "U+EA28", - "description": "Quilisma (Corpus Monodicum)" - }, - "medRenSharpCroix": { - "alternateCodepoint": "U+1D1CF", - "codepoint": "U+E9E3", - "description": "Croix" - }, - "medRenStrophicusCMN": { - "codepoint": "U+EA29", - "description": "Strophicus (Corpus Monodicum)" - }, - "mensuralAlterationSign": { - "codepoint": "U+EA10", - "description": "Alteration sign" - }, - "mensuralBlackBrevis": { - "codepoint": "U+E952", - "description": "Black mensural brevis" - }, - "mensuralBlackBrevisVoid": { - "codepoint": "U+E956", - "description": "Black mensural void brevis" - }, - "mensuralBlackDragma": { - "codepoint": "U+E95A", - "description": "Black mensural dragma" - }, - "mensuralBlackLonga": { - "codepoint": "U+E951", - "description": "Black mensural longa" - }, - "mensuralBlackMaxima": { - "codepoint": "U+E950", - "description": "Black mensural maxima" - }, - "mensuralBlackMinima": { - "alternateCodepoint": "U+1D1BC", - "codepoint": "U+E954", - "description": "Black mensural minima" - }, - "mensuralBlackMinimaVoid": { - "alternateCodepoint": "U+1D1BB", - "codepoint": "U+E958", - "description": "Black mensural void minima" - }, - "mensuralBlackSemibrevis": { - "alternateCodepoint": "U+1D1BA", - "codepoint": "U+E953", - "description": "Black mensural semibrevis" - }, - "mensuralBlackSemibrevisCaudata": { - "codepoint": "U+E959", - "description": "Black mensural semibrevis caudata" - }, - "mensuralBlackSemibrevisOblique": { - "codepoint": "U+E95B", - "description": "Black mensural oblique semibrevis" - }, - "mensuralBlackSemibrevisVoid": { - "alternateCodepoint": "U+1D1B9", - "codepoint": "U+E957", - "description": "Black mensural void semibrevis" - }, - "mensuralBlackSemiminima": { - "codepoint": "U+E955", - "description": "Black mensural semiminima" - }, - "mensuralCclef": { - "codepoint": "U+E905", - "description": "Mensural C clef" - }, - "mensuralCclefPetrucciPosHigh": { - "codepoint": "U+E90A", - "description": "Petrucci C clef, high position" - }, - "mensuralCclefPetrucciPosHighest": { - "codepoint": "U+E90B", - "description": "Petrucci C clef, highest position" - }, - "mensuralCclefPetrucciPosLow": { - "codepoint": "U+E908", - "description": "Petrucci C clef, low position" - }, - "mensuralCclefPetrucciPosLowest": { - "codepoint": "U+E907", - "description": "Petrucci C clef, lowest position" - }, - "mensuralCclefPetrucciPosMiddle": { - "codepoint": "U+E909", - "description": "Petrucci C clef, middle position" - }, - "mensuralColorationEndRound": { - "codepoint": "U+EA0F", - "description": "Coloration end, round" - }, - "mensuralColorationEndSquare": { - "codepoint": "U+EA0D", - "description": "Coloration end, square" - }, - "mensuralColorationStartRound": { - "codepoint": "U+EA0E", - "description": "Coloration start, round" - }, - "mensuralColorationStartSquare": { - "codepoint": "U+EA0C", - "description": "Coloration start, square" - }, - "mensuralCombStemDiagonal": { - "codepoint": "U+E940", - "description": "Combining stem diagonal" - }, - "mensuralCombStemDown": { - "codepoint": "U+E93F", - "description": "Combining stem down" - }, - "mensuralCombStemDownFlagExtended": { - "codepoint": "U+E948", - "description": "Combining stem with extended flag down" - }, - "mensuralCombStemDownFlagFlared": { - "codepoint": "U+E946", - "description": "Combining stem with flared flag down" - }, - "mensuralCombStemDownFlagFusa": { - "codepoint": "U+E94C", - "description": "Combining stem with fusa flag down" - }, - "mensuralCombStemDownFlagLeft": { - "codepoint": "U+E944", - "description": "Combining stem with flag left down" - }, - "mensuralCombStemDownFlagRight": { - "codepoint": "U+E942", - "description": "Combining stem with flag right down" - }, - "mensuralCombStemDownFlagSemiminima": { - "codepoint": "U+E94A", - "description": "Combining stem with semiminima flag down" - }, - "mensuralCombStemUp": { - "codepoint": "U+E93E", - "description": "Combining stem up" - }, - "mensuralCombStemUpFlagExtended": { - "codepoint": "U+E947", - "description": "Combining stem with extended flag up" - }, - "mensuralCombStemUpFlagFlared": { - "codepoint": "U+E945", - "description": "Combining stem with flared flag up" - }, - "mensuralCombStemUpFlagFusa": { - "codepoint": "U+E94B", - "description": "Combining stem with fusa flag up" - }, - "mensuralCombStemUpFlagLeft": { - "codepoint": "U+E943", - "description": "Combining stem with flag left up" - }, - "mensuralCombStemUpFlagRight": { - "codepoint": "U+E941", - "description": "Combining stem with flag right up" - }, - "mensuralCombStemUpFlagSemiminima": { - "codepoint": "U+E949", - "description": "Combining stem with semiminima flag up" - }, - "mensuralCustosCheckmark": { - "codepoint": "U+EA0A", - "description": "Checkmark custos" - }, - "mensuralCustosDown": { - "codepoint": "U+EA03", - "description": "Mensural custos down" - }, - "mensuralCustosTurn": { - "codepoint": "U+EA0B", - "description": "Turn-like custos" - }, - "mensuralCustosUp": { - "codepoint": "U+EA02", - "description": "Mensural custos up" - }, - "mensuralFclef": { - "codepoint": "U+E903", - "description": "Mensural F clef" - }, - "mensuralFclefPetrucci": { - "codepoint": "U+E904", - "description": "Petrucci F clef" - }, - "mensuralGclef": { - "codepoint": "U+E900", - "description": "Mensural G clef" - }, - "mensuralGclefPetrucci": { - "codepoint": "U+E901", - "description": "Petrucci G clef" - }, - "mensuralModusImperfectumVert": { - "codepoint": "U+E92D", - "description": "Modus imperfectum, vertical" - }, - "mensuralModusPerfectumVert": { - "codepoint": "U+E92C", - "description": "Modus perfectum, vertical" - }, - "mensuralNoteheadLongaBlack": { - "codepoint": "U+E934", - "description": "Longa/brevis notehead, black" - }, - "mensuralNoteheadLongaBlackVoid": { - "codepoint": "U+E936", - "description": "Longa/brevis notehead, black and void" - }, - "mensuralNoteheadLongaVoid": { - "alternateCodepoint": "U+1D1B7", - "codepoint": "U+E935", - "description": "Longa/brevis notehead, void" - }, - "mensuralNoteheadLongaWhite": { - "codepoint": "U+E937", - "description": "Longa/brevis notehead, white" - }, - "mensuralNoteheadMaximaBlack": { - "codepoint": "U+E930", - "description": "Maxima notehead, black" - }, - "mensuralNoteheadMaximaBlackVoid": { - "codepoint": "U+E932", - "description": "Maxima notehead, black and void" - }, - "mensuralNoteheadMaximaVoid": { - "alternateCodepoint": "U+1D1B6", - "codepoint": "U+E931", - "description": "Maxima notehead, void" - }, - "mensuralNoteheadMaximaWhite": { - "codepoint": "U+E933", - "description": "Maxima notehead, white" - }, - "mensuralNoteheadMinimaWhite": { - "codepoint": "U+E93C", - "description": "Minima notehead, white" - }, - "mensuralNoteheadSemibrevisBlack": { - "alternateCodepoint": "U+1D1BA", - "codepoint": "U+E938", - "description": "Semibrevis notehead, black" - }, - "mensuralNoteheadSemibrevisBlackVoid": { - "codepoint": "U+E93A", - "description": "Semibrevis notehead, black and void" - }, - "mensuralNoteheadSemibrevisBlackVoidTurned": { - "codepoint": "U+E93B", - "description": "Semibrevis notehead, black and void (turned)" - }, - "mensuralNoteheadSemibrevisVoid": { - "alternateCodepoint": "U+1D1B9", - "codepoint": "U+E939", - "description": "Semibrevis notehead, void" - }, - "mensuralNoteheadSemiminimaWhite": { - "codepoint": "U+E93D", - "description": "Semiminima/fusa notehead, white" - }, - "mensuralObliqueAsc2ndBlack": { - "codepoint": "U+E970", - "description": "Oblique form, ascending 2nd, black" - }, - "mensuralObliqueAsc2ndBlackVoid": { - "codepoint": "U+E972", - "description": "Oblique form, ascending 2nd, black and void" - }, - "mensuralObliqueAsc2ndVoid": { - "codepoint": "U+E971", - "description": "Oblique form, ascending 2nd, void" - }, - "mensuralObliqueAsc2ndWhite": { - "codepoint": "U+E973", - "description": "Oblique form, ascending 2nd, white" - }, - "mensuralObliqueAsc3rdBlack": { - "codepoint": "U+E974", - "description": "Oblique form, ascending 3rd, black" - }, - "mensuralObliqueAsc3rdBlackVoid": { - "codepoint": "U+E976", - "description": "Oblique form, ascending 3rd, black and void" - }, - "mensuralObliqueAsc3rdVoid": { - "codepoint": "U+E975", - "description": "Oblique form, ascending 3rd, void" - }, - "mensuralObliqueAsc3rdWhite": { - "codepoint": "U+E977", - "description": "Oblique form, ascending 3rd, white" - }, - "mensuralObliqueAsc4thBlack": { - "codepoint": "U+E978", - "description": "Oblique form, ascending 4th, black" - }, - "mensuralObliqueAsc4thBlackVoid": { - "codepoint": "U+E97A", - "description": "Oblique form, ascending 4th, black and void" - }, - "mensuralObliqueAsc4thVoid": { - "codepoint": "U+E979", - "description": "Oblique form, ascending 4th, void" - }, - "mensuralObliqueAsc4thWhite": { - "codepoint": "U+E97B", - "description": "Oblique form, ascending 4th, white" - }, - "mensuralObliqueAsc5thBlack": { - "codepoint": "U+E97C", - "description": "Oblique form, ascending 5th, black" - }, - "mensuralObliqueAsc5thBlackVoid": { - "codepoint": "U+E97E", - "description": "Oblique form, ascending 5th, black and void" - }, - "mensuralObliqueAsc5thVoid": { - "codepoint": "U+E97D", - "description": "Oblique form, ascending 5th, void" - }, - "mensuralObliqueAsc5thWhite": { - "codepoint": "U+E97F", - "description": "Oblique form, ascending 5th, white" - }, - "mensuralObliqueDesc2ndBlack": { - "codepoint": "U+E980", - "description": "Oblique form, descending 2nd, black" - }, - "mensuralObliqueDesc2ndBlackVoid": { - "codepoint": "U+E982", - "description": "Oblique form, descending 2nd, black and void" - }, - "mensuralObliqueDesc2ndVoid": { - "codepoint": "U+E981", - "description": "Oblique form, descending 2nd, void" - }, - "mensuralObliqueDesc2ndWhite": { - "codepoint": "U+E983", - "description": "Oblique form, descending 2nd, white" - }, - "mensuralObliqueDesc3rdBlack": { - "codepoint": "U+E984", - "description": "Oblique form, descending 3rd, black" - }, - "mensuralObliqueDesc3rdBlackVoid": { - "codepoint": "U+E986", - "description": "Oblique form, descending 3rd, black and void" - }, - "mensuralObliqueDesc3rdVoid": { - "codepoint": "U+E985", - "description": "Oblique form, descending 3rd, void" - }, - "mensuralObliqueDesc3rdWhite": { - "codepoint": "U+E987", - "description": "Oblique form, descending 3rd, white" - }, - "mensuralObliqueDesc4thBlack": { - "codepoint": "U+E988", - "description": "Oblique form, descending 4th, black" - }, - "mensuralObliqueDesc4thBlackVoid": { - "codepoint": "U+E98A", - "description": "Oblique form, descending 4th, black and void" - }, - "mensuralObliqueDesc4thVoid": { - "codepoint": "U+E989", - "description": "Oblique form, descending 4th, void" - }, - "mensuralObliqueDesc4thWhite": { - "codepoint": "U+E98B", - "description": "Oblique form, descending 4th, white" - }, - "mensuralObliqueDesc5thBlack": { - "codepoint": "U+E98C", - "description": "Oblique form, descending 5th, black" - }, - "mensuralObliqueDesc5thBlackVoid": { - "codepoint": "U+E98E", - "description": "Oblique form, descending 5th, black and void" - }, - "mensuralObliqueDesc5thVoid": { - "codepoint": "U+E98D", - "description": "Oblique form, descending 5th, void" - }, - "mensuralObliqueDesc5thWhite": { - "codepoint": "U+E98F", - "description": "Oblique form, descending 5th, white" - }, - "mensuralProlation1": { - "alternateCodepoint": "U+1D1C7", - "codepoint": "U+E910", - "description": "Tempus perfectum cum prolatione perfecta (9/8)" - }, - "mensuralProlation10": { - "alternateCodepoint": "U+1D1CE", - "codepoint": "U+E919", - "description": "Tempus imperfectum cum prolatione imperfecta diminution 4" - }, - "mensuralProlation11": { - "codepoint": "U+E91A", - "description": "Tempus imperfectum cum prolatione imperfecta diminution 5" - }, - "mensuralProlation2": { - "alternateCodepoint": "U+1D1C8", - "codepoint": "U+E911", - "description": "Tempus perfectum cum prolatione imperfecta (3/4)" - }, - "mensuralProlation3": { - "alternateCodepoint": "U+1D1C9", - "codepoint": "U+E912", - "description": "Tempus perfectum cum prolatione imperfecta diminution 1 (3/8)" - }, - "mensuralProlation4": { - "codepoint": "U+E913", - "description": "Tempus perfectum cum prolatione perfecta diminution 2 (9/16)" - }, - "mensuralProlation5": { - "alternateCodepoint": "U+1D1CA", - "codepoint": "U+E914", - "description": "Tempus imperfectum cum prolatione perfecta (6/8)" - }, - "mensuralProlation6": { - "alternateCodepoint": "U+1D1CB", - "codepoint": "U+E915", - "description": "Tempus imperfectum cum prolatione imperfecta (2/4)" - }, - "mensuralProlation7": { - "alternateCodepoint": "U+1D1CC", - "codepoint": "U+E916", - "description": "Tempus imperfectum cum prolatione imperfecta diminution 1 (2/2)" - }, - "mensuralProlation8": { - "codepoint": "U+E917", - "description": "Tempus imperfectum cum prolatione imperfecta diminution 2 (6/16)" - }, - "mensuralProlation9": { - "alternateCodepoint": "U+1D1CD", - "codepoint": "U+E918", - "description": "Tempus imperfectum cum prolatione imperfecta diminution 3 (2/2)" - }, - "mensuralProlationCombiningDot": { - "codepoint": "U+E920", - "description": "Combining dot" - }, - "mensuralProlationCombiningDotVoid": { - "codepoint": "U+E924", - "description": "Combining void dot" - }, - "mensuralProlationCombiningStroke": { - "codepoint": "U+E925", - "description": "Combining vertical stroke" - }, - "mensuralProlationCombiningThreeDots": { - "codepoint": "U+E922", - "description": "Combining three dots horizontal" - }, - "mensuralProlationCombiningThreeDotsTri": { - "codepoint": "U+E923", - "description": "Combining three dots triangular" - }, - "mensuralProlationCombiningTwoDots": { - "codepoint": "U+E921", - "description": "Combining two dots" - }, - "mensuralProportion1": { - "codepoint": "U+E926", - "description": "Mensural proportion 1" - }, - "mensuralProportion2": { - "codepoint": "U+E927", - "description": "Mensural proportion 2" - }, - "mensuralProportion3": { - "codepoint": "U+E928", - "description": "Mensural proportion 3" - }, - "mensuralProportion4": { - "codepoint": "U+E929", - "description": "Mensural proportion 4" - }, - "mensuralProportionMajor": { - "codepoint": "U+E92B", - "description": "Mensural proportion major" - }, - "mensuralProportionMinor": { - "codepoint": "U+E92A", - "description": "Mensural proportion minor" - }, - "mensuralProportionProportioDupla1": { - "codepoint": "U+E91C", - "description": "Proportio dupla 1" - }, - "mensuralProportionProportioDupla2": { - "codepoint": "U+E91D", - "description": "Proportio dupla 2" - }, - "mensuralProportionProportioQuadrupla": { - "codepoint": "U+E91F", - "description": "Proportio quadrupla" - }, - "mensuralProportionProportioTripla": { - "codepoint": "U+E91E", - "description": "Proportio tripla" - }, - "mensuralProportionTempusPerfectum": { - "codepoint": "U+E91B", - "description": "Tempus perfectum" - }, - "mensuralRestBrevis": { - "alternateCodepoint": "U+1D1C3", - "codepoint": "U+E9F3", - "description": "Brevis rest" - }, - "mensuralRestFusa": { - "codepoint": "U+E9F7", - "description": "Fusa rest" - }, - "mensuralRestLongaImperfecta": { - "alternateCodepoint": "U+1D1C2", - "codepoint": "U+E9F2", - "description": "Longa imperfecta rest" - }, - "mensuralRestLongaPerfecta": { - "alternateCodepoint": "U+1D1C1", - "codepoint": "U+E9F1", - "description": "Longa perfecta rest" - }, - "mensuralRestMaxima": { - "codepoint": "U+E9F0", - "description": "Maxima rest" - }, - "mensuralRestMinima": { - "alternateCodepoint": "U+1D1C5", - "codepoint": "U+E9F5", - "description": "Minima rest" - }, - "mensuralRestSemibrevis": { - "alternateCodepoint": "U+1D1C4", - "codepoint": "U+E9F4", - "description": "Semibrevis rest" - }, - "mensuralRestSemifusa": { - "codepoint": "U+E9F8", - "description": "Semifusa rest" - }, - "mensuralRestSemiminima": { - "alternateCodepoint": "U+1D1C6", - "codepoint": "U+E9F6", - "description": "Semiminima rest" - }, - "mensuralSignumDown": { - "codepoint": "U+EA01", - "description": "Signum congruentiae down" - }, - "mensuralSignumUp": { - "codepoint": "U+EA00", - "description": "Signum congruentiae up" - }, - "mensuralTempusImperfectumHoriz": { - "codepoint": "U+E92F", - "description": "Tempus imperfectum, horizontal" - }, - "mensuralTempusPerfectumHoriz": { - "codepoint": "U+E92E", - "description": "Tempus perfectum, horizontal" - }, - "mensuralWhiteBrevis": { - "alternateCodepoint": "U+1D1B8", - "codepoint": "U+E95E", - "description": "White mensural brevis" - }, - "mensuralWhiteFusa": { - "alternateCodepoint": "U+1D1BE", - "codepoint": "U+E961", - "description": "White mensural fusa" - }, - "mensuralWhiteLonga": { - "alternateCodepoint": "U+1D1B7", - "codepoint": "U+E95D", - "description": "White mensural longa" - }, - "mensuralWhiteMaxima": { - "alternateCodepoint": "U+1D1B6", - "codepoint": "U+E95C", - "description": "White mensural maxima" - }, - "mensuralWhiteMinima": { - "codepoint": "U+E95F", - "description": "White mensural minima" - }, - "mensuralWhiteSemiminima": { - "alternateCodepoint": "U+1D1BC", - "codepoint": "U+E960", - "description": "White mensural semiminima" - }, - "metAugmentationDot": { - "codepoint": "U+ECB7", - "description": "Augmentation dot" - }, - "metNote1024thDown": { - "codepoint": "U+ECB6", - "description": "1024th note (semihemidemisemihemidemisemiquaver) stem down" - }, - "metNote1024thUp": { - "codepoint": "U+ECB5", - "description": "1024th note (semihemidemisemihemidemisemiquaver) stem up" - }, - "metNote128thDown": { - "codepoint": "U+ECB0", - "description": "128th note (semihemidemisemiquaver) stem down" - }, - "metNote128thUp": { - "codepoint": "U+ECAF", - "description": "128th note (semihemidemisemiquaver) stem up" - }, - "metNote16thDown": { - "codepoint": "U+ECAA", - "description": "16th note (semiquaver) stem down" - }, - "metNote16thUp": { - "codepoint": "U+ECA9", - "description": "16th note (semiquaver) stem up" - }, - "metNote256thDown": { - "codepoint": "U+ECB2", - "description": "256th note (demisemihemidemisemiquaver) stem down" - }, - "metNote256thUp": { - "codepoint": "U+ECB1", - "description": "256th note (demisemihemidemisemiquaver) stem up" - }, - "metNote32ndDown": { - "codepoint": "U+ECAC", - "description": "32nd note (demisemiquaver) stem down" - }, - "metNote32ndUp": { - "codepoint": "U+ECAB", - "description": "32nd note (demisemiquaver) stem up" - }, - "metNote512thDown": { - "codepoint": "U+ECB4", - "description": "512th note (hemidemisemihemidemisemiquaver) stem down" - }, - "metNote512thUp": { - "codepoint": "U+ECB3", - "description": "512th note (hemidemisemihemidemisemiquaver) stem up" - }, - "metNote64thDown": { - "codepoint": "U+ECAE", - "description": "64th note (hemidemisemiquaver) stem down" - }, - "metNote64thUp": { - "codepoint": "U+ECAD", - "description": "64th note (hemidemisemiquaver) stem up" - }, - "metNote8thDown": { - "codepoint": "U+ECA8", - "description": "Eighth note (quaver) stem down" - }, - "metNote8thUp": { - "codepoint": "U+ECA7", - "description": "Eighth note (quaver) stem up" - }, - "metNoteDoubleWhole": { - "codepoint": "U+ECA0", - "description": "Double whole note (breve)" - }, - "metNoteDoubleWholeSquare": { - "codepoint": "U+ECA1", - "description": "Double whole note (square)" - }, - "metNoteHalfDown": { - "codepoint": "U+ECA4", - "description": "Half note (minim) stem down" - }, - "metNoteHalfUp": { - "codepoint": "U+ECA3", - "description": "Half note (minim) stem up" - }, - "metNoteQuarterDown": { - "codepoint": "U+ECA6", - "description": "Quarter note (crotchet) stem down" - }, - "metNoteQuarterUp": { - "codepoint": "U+ECA5", - "description": "Quarter note (crotchet) stem up" - }, - "metNoteWhole": { - "codepoint": "U+ECA2", - "description": "Whole note (semibreve)" - }, - "metricModulationArrowLeft": { - "codepoint": "U+EC63", - "description": "Left-pointing arrow for metric modulation" - }, - "metricModulationArrowRight": { - "codepoint": "U+EC64", - "description": "Right-pointing arrow for metric modulation" - }, - "miscDoNotCopy": { - "codepoint": "U+EC61", - "description": "Do not copy" - }, - "miscDoNotPhotocopy": { - "codepoint": "U+EC60", - "description": "Do not photocopy" - }, - "miscEyeglasses": { - "codepoint": "U+EC62", - "description": "Eyeglasses" - }, - "note1024thDown": { - "codepoint": "U+E1E6", - "description": "1024th note (semihemidemisemihemidemisemiquaver) stem down" - }, - "note1024thUp": { - "codepoint": "U+E1E5", - "description": "1024th note (semihemidemisemihemidemisemiquaver) stem up" - }, - "note128thDown": { - "codepoint": "U+E1E0", - "description": "128th note (semihemidemisemiquaver) stem down" - }, - "note128thUp": { - "alternateCodepoint": "U+1D164", - "codepoint": "U+E1DF", - "description": "128th note (semihemidemisemiquaver) stem up" - }, - "note16thDown": { - "codepoint": "U+E1DA", - "description": "16th note (semiquaver) stem down" - }, - "note16thUp": { - "alternateCodepoint": "U+1D161", - "codepoint": "U+E1D9", - "description": "16th note (semiquaver) stem up" - }, - "note256thDown": { - "codepoint": "U+E1E2", - "description": "256th note (demisemihemidemisemiquaver) stem down" - }, - "note256thUp": { - "codepoint": "U+E1E1", - "description": "256th note (demisemihemidemisemiquaver) stem up" - }, - "note32ndDown": { - "codepoint": "U+E1DC", - "description": "32nd note (demisemiquaver) stem down" - }, - "note32ndUp": { - "alternateCodepoint": "U+1D162", - "codepoint": "U+E1DB", - "description": "32nd note (demisemiquaver) stem up" - }, - "note512thDown": { - "codepoint": "U+E1E4", - "description": "512th note (hemidemisemihemidemisemiquaver) stem down" - }, - "note512thUp": { - "codepoint": "U+E1E3", - "description": "512th note (hemidemisemihemidemisemiquaver) stem up" - }, - "note64thDown": { - "codepoint": "U+E1DE", - "description": "64th note (hemidemisemiquaver) stem down" - }, - "note64thUp": { - "alternateCodepoint": "U+1D163", - "codepoint": "U+E1DD", - "description": "64th note (hemidemisemiquaver) stem up" - }, - "note8thDown": { - "codepoint": "U+E1D8", - "description": "Eighth note (quaver) stem down" - }, - "note8thUp": { - "alternateCodepoint": "U+1D160", - "codepoint": "U+E1D7", - "description": "Eighth note (quaver) stem up" - }, - "noteABlack": { - "codepoint": "U+E197", - "description": "A (black note)" - }, - "noteAFlatBlack": { - "codepoint": "U+E196", - "description": "A flat (black note)" - }, - "noteAFlatHalf": { - "codepoint": "U+E17F", - "description": "A flat (half note)" - }, - "noteAFlatWhole": { - "codepoint": "U+E168", - "description": "A flat (whole note)" - }, - "noteAHalf": { - "codepoint": "U+E180", - "description": "A (half note)" - }, - "noteASharpBlack": { - "codepoint": "U+E198", - "description": "A sharp (black note)" - }, - "noteASharpHalf": { - "codepoint": "U+E181", - "description": "A sharp (half note)" - }, - "noteASharpWhole": { - "codepoint": "U+E16A", - "description": "A sharp (whole note)" - }, - "noteAWhole": { - "codepoint": "U+E169", - "description": "A (whole note)" - }, - "noteBBlack": { - "codepoint": "U+E19A", - "description": "B (black note)" - }, - "noteBFlatBlack": { - "codepoint": "U+E199", - "description": "B flat (black note)" - }, - "noteBFlatHalf": { - "codepoint": "U+E182", - "description": "B flat (half note)" - }, - "noteBFlatWhole": { - "codepoint": "U+E16B", - "description": "B flat (whole note)" - }, - "noteBHalf": { - "codepoint": "U+E183", - "description": "B (half note)" - }, - "noteBSharpBlack": { - "codepoint": "U+E19B", - "description": "B sharp (black note)" - }, - "noteBSharpHalf": { - "codepoint": "U+E184", - "description": "B sharp (half note)" - }, - "noteBSharpWhole": { - "codepoint": "U+E16D", - "description": "B sharp (whole note)" - }, - "noteBWhole": { - "codepoint": "U+E16C", - "description": "B (whole note)" - }, - "noteCBlack": { - "codepoint": "U+E19D", - "description": "C (black note)" - }, - "noteCFlatBlack": { - "codepoint": "U+E19C", - "description": "C flat (black note)" - }, - "noteCFlatHalf": { - "codepoint": "U+E185", - "description": "C flat (half note)" - }, - "noteCFlatWhole": { - "codepoint": "U+E16E", - "description": "C flat (whole note)" - }, - "noteCHalf": { - "codepoint": "U+E186", - "description": "C (half note)" - }, - "noteCSharpBlack": { - "codepoint": "U+E19E", - "description": "C sharp (black note)" - }, - "noteCSharpHalf": { - "codepoint": "U+E187", - "description": "C sharp (half note)" - }, - "noteCSharpWhole": { - "codepoint": "U+E170", - "description": "C sharp (whole note)" - }, - "noteCWhole": { - "codepoint": "U+E16F", - "description": "C (whole note)" - }, - "noteDBlack": { - "codepoint": "U+E1A0", - "description": "D (black note)" - }, - "noteDFlatBlack": { - "codepoint": "U+E19F", - "description": "D flat (black note)" - }, - "noteDFlatHalf": { - "codepoint": "U+E188", - "description": "D flat (half note)" - }, - "noteDFlatWhole": { - "codepoint": "U+E171", - "description": "D flat (whole note)" - }, - "noteDHalf": { - "codepoint": "U+E189", - "description": "D (half note)" - }, - "noteDSharpBlack": { - "codepoint": "U+E1A1", - "description": "D sharp (black note)" - }, - "noteDSharpHalf": { - "codepoint": "U+E18A", - "description": "D sharp (half note)" - }, - "noteDSharpWhole": { - "codepoint": "U+E173", - "description": "D sharp (whole note)" - }, - "noteDWhole": { - "codepoint": "U+E172", - "description": "D (whole note)" - }, - "noteDoBlack": { - "codepoint": "U+E160", - "description": "Do (black note)" - }, - "noteDoHalf": { - "codepoint": "U+E158", - "description": "Do (half note)" - }, - "noteDoWhole": { - "codepoint": "U+E150", - "description": "Do (whole note)" - }, - "noteDoubleWhole": { - "alternateCodepoint": "U+1D15C", - "codepoint": "U+E1D0", - "description": "Double whole note (breve)" - }, - "noteDoubleWholeSquare": { - "codepoint": "U+E1D1", - "description": "Double whole note (square)" - }, - "noteEBlack": { - "codepoint": "U+E1A3", - "description": "E (black note)" - }, - "noteEFlatBlack": { - "codepoint": "U+E1A2", - "description": "E flat (black note)" - }, - "noteEFlatHalf": { - "codepoint": "U+E18B", - "description": "E flat (half note)" - }, - "noteEFlatWhole": { - "codepoint": "U+E174", - "description": "E flat (whole note)" - }, - "noteEHalf": { - "codepoint": "U+E18C", - "description": "E (half note)" - }, - "noteESharpBlack": { - "codepoint": "U+E1A4", - "description": "E sharp (black note)" - }, - "noteESharpHalf": { - "codepoint": "U+E18D", - "description": "E sharp (half note)" - }, - "noteESharpWhole": { - "codepoint": "U+E176", - "description": "E sharp (whole note)" - }, - "noteEWhole": { - "codepoint": "U+E175", - "description": "E (whole note)" - }, - "noteEmptyBlack": { - "codepoint": "U+E1AF", - "description": "Empty black note" - }, - "noteEmptyHalf": { - "codepoint": "U+E1AE", - "description": "Empty half note" - }, - "noteEmptyWhole": { - "codepoint": "U+E1AD", - "description": "Empty whole note" - }, - "noteFBlack": { - "codepoint": "U+E1A6", - "description": "F (black note)" - }, - "noteFFlatBlack": { - "codepoint": "U+E1A5", - "description": "F flat (black note)" - }, - "noteFFlatHalf": { - "codepoint": "U+E18E", - "description": "F flat (half note)" - }, - "noteFFlatWhole": { - "codepoint": "U+E177", - "description": "F flat (whole note)" - }, - "noteFHalf": { - "codepoint": "U+E18F", - "description": "F (half note)" - }, - "noteFSharpBlack": { - "codepoint": "U+E1A7", - "description": "F sharp (black note)" - }, - "noteFSharpHalf": { - "codepoint": "U+E190", - "description": "F sharp (half note)" - }, - "noteFSharpWhole": { - "codepoint": "U+E179", - "description": "F sharp (whole note)" - }, - "noteFWhole": { - "codepoint": "U+E178", - "description": "F (whole note)" - }, - "noteFaBlack": { - "codepoint": "U+E163", - "description": "Fa (black note)" - }, - "noteFaHalf": { - "codepoint": "U+E15B", - "description": "Fa (half note)" - }, - "noteFaWhole": { - "codepoint": "U+E153", - "description": "Fa (whole note)" - }, - "noteGBlack": { - "codepoint": "U+E1A9", - "description": "G (black note)" - }, - "noteGFlatBlack": { - "codepoint": "U+E1A8", - "description": "G flat (black note)" - }, - "noteGFlatHalf": { - "codepoint": "U+E191", - "description": "G flat (half note)" - }, - "noteGFlatWhole": { - "codepoint": "U+E17A", - "description": "G flat (whole note)" - }, - "noteGHalf": { - "codepoint": "U+E192", - "description": "G (half note)" - }, - "noteGSharpBlack": { - "codepoint": "U+E1AA", - "description": "G sharp (black note)" - }, - "noteGSharpHalf": { - "codepoint": "U+E193", - "description": "G sharp (half note)" - }, - "noteGSharpWhole": { - "codepoint": "U+E17C", - "description": "G sharp (whole note)" - }, - "noteGWhole": { - "codepoint": "U+E17B", - "description": "G (whole note)" - }, - "noteHBlack": { - "codepoint": "U+E1AB", - "description": "H (black note)" - }, - "noteHHalf": { - "codepoint": "U+E194", - "description": "H (half note)" - }, - "noteHSharpBlack": { - "codepoint": "U+E1AC", - "description": "H sharp (black note)" - }, - "noteHSharpHalf": { - "codepoint": "U+E195", - "description": "H sharp (half note)" - }, - "noteHSharpWhole": { - "codepoint": "U+E17E", - "description": "H sharp (whole note)" - }, - "noteHWhole": { - "codepoint": "U+E17D", - "description": "H (whole note)" - }, - "noteHalfDown": { - "codepoint": "U+E1D4", - "description": "Half note (minim) stem down" - }, - "noteHalfUp": { - "alternateCodepoint": "U+1D15E", - "codepoint": "U+E1D3", - "description": "Half note (minim) stem up" - }, - "noteLaBlack": { - "codepoint": "U+E165", - "description": "La (black note)" - }, - "noteLaHalf": { - "codepoint": "U+E15D", - "description": "La (half note)" - }, - "noteLaWhole": { - "codepoint": "U+E155", - "description": "La (whole note)" - }, - "noteMiBlack": { - "codepoint": "U+E162", - "description": "Mi (black note)" - }, - "noteMiHalf": { - "codepoint": "U+E15A", - "description": "Mi (half note)" - }, - "noteMiWhole": { - "codepoint": "U+E152", - "description": "Mi (whole note)" - }, - "noteQuarterDown": { - "codepoint": "U+E1D6", - "description": "Quarter note (crotchet) stem down" - }, - "noteQuarterUp": { - "alternateCodepoint": "U+1D15F", - "codepoint": "U+E1D5", - "description": "Quarter note (crotchet) stem up" - }, - "noteReBlack": { - "codepoint": "U+E161", - "description": "Re (black note)" - }, - "noteReHalf": { - "codepoint": "U+E159", - "description": "Re (half note)" - }, - "noteReWhole": { - "codepoint": "U+E151", - "description": "Re (whole note)" - }, - "noteShapeArrowheadLeftBlack": { - "codepoint": "U+E1C9", - "description": "Arrowhead left black (Funk 7-shape re)" - }, - "noteShapeArrowheadLeftDoubleWhole": { - "codepoint": "U+ECDC", - "description": "Arrowhead left double whole (Funk 7-shape re)" - }, - "noteShapeArrowheadLeftWhite": { - "codepoint": "U+E1C8", - "description": "Arrowhead left white (Funk 7-shape re)" - }, - "noteShapeDiamondBlack": { - "codepoint": "U+E1B9", - "description": "Diamond black (4-shape mi; 7-shape mi)" - }, - "noteShapeDiamondDoubleWhole": { - "codepoint": "U+ECD4", - "description": "Diamond double whole (4-shape mi; 7-shape mi)" - }, - "noteShapeDiamondWhite": { - "codepoint": "U+E1B8", - "description": "Diamond white (4-shape mi; 7-shape mi)" - }, - "noteShapeIsoscelesTriangleBlack": { - "codepoint": "U+E1C5", - "description": "Isosceles triangle black (Walker 7-shape ti)" - }, - "noteShapeIsoscelesTriangleDoubleWhole": { - "codepoint": "U+ECDA", - "description": "Isosceles triangle double whole (Walker 7-shape ti)" - }, - "noteShapeIsoscelesTriangleWhite": { - "codepoint": "U+E1C4", - "description": "Isosceles triangle white (Walker 7-shape ti)" - }, - "noteShapeKeystoneBlack": { - "codepoint": "U+E1C1", - "description": "Inverted keystone black (Walker 7-shape do)" - }, - "noteShapeKeystoneDoubleWhole": { - "codepoint": "U+ECD8", - "description": "Inverted keystone double whole (Walker 7-shape do)" - }, - "noteShapeKeystoneWhite": { - "codepoint": "U+E1C0", - "description": "Inverted keystone white (Walker 7-shape do)" - }, - "noteShapeMoonBlack": { - "codepoint": "U+E1BD", - "description": "Moon black (Aikin 7-shape re)" - }, - "noteShapeMoonDoubleWhole": { - "codepoint": "U+ECD6", - "description": "Moon double whole (Aikin 7-shape re)" - }, - "noteShapeMoonLeftBlack": { - "codepoint": "U+E1C7", - "description": "Moon left black (Funk 7-shape do)" - }, - "noteShapeMoonLeftDoubleWhole": { - "codepoint": "U+ECDB", - "description": "Moon left double whole (Funk 7-shape do)" - }, - "noteShapeMoonLeftWhite": { - "codepoint": "U+E1C6", - "description": "Moon left white (Funk 7-shape do)" - }, - "noteShapeMoonWhite": { - "codepoint": "U+E1BC", - "description": "Moon white (Aikin 7-shape re)" - }, - "noteShapeQuarterMoonBlack": { - "codepoint": "U+E1C3", - "description": "Quarter moon black (Walker 7-shape re)" - }, - "noteShapeQuarterMoonDoubleWhole": { - "codepoint": "U+ECD9", - "description": "Quarter moon double whole (Walker 7-shape re)" - }, - "noteShapeQuarterMoonWhite": { - "codepoint": "U+E1C2", - "description": "Quarter moon white (Walker 7-shape re)" - }, - "noteShapeRoundBlack": { - "codepoint": "U+E1B1", - "description": "Round black (4-shape sol; 7-shape so)" - }, - "noteShapeRoundDoubleWhole": { - "codepoint": "U+ECD0", - "description": "Round double whole (4-shape sol; 7-shape so)" - }, - "noteShapeRoundWhite": { - "codepoint": "U+E1B0", - "description": "Round white (4-shape sol; 7-shape so)" - }, - "noteShapeSquareBlack": { - "codepoint": "U+E1B3", - "description": "Square black (4-shape la; Aikin 7-shape la)" - }, - "noteShapeSquareDoubleWhole": { - "codepoint": "U+ECD1", - "description": "Square double whole (4-shape la; Aikin 7-shape la)" - }, - "noteShapeSquareWhite": { - "codepoint": "U+E1B2", - "description": "Square white (4-shape la; Aikin 7-shape la)" - }, - "noteShapeTriangleLeftBlack": { - "codepoint": "U+E1B7", - "description": "Triangle left black (stem up; 4-shape fa; 7-shape fa)" - }, - "noteShapeTriangleLeftDoubleWhole": { - "codepoint": "U+ECD3", - "description": "Triangle left double whole (stem up; 4-shape fa; 7-shape fa)" - }, - "noteShapeTriangleLeftWhite": { - "codepoint": "U+E1B6", - "description": "Triangle left white (stem up; 4-shape fa; 7-shape fa)" - }, - "noteShapeTriangleRightBlack": { - "codepoint": "U+E1B5", - "description": "Triangle right black (stem down; 4-shape fa; 7-shape fa)" - }, - "noteShapeTriangleRightDoubleWhole": { - "codepoint": "U+ECD2", - "description": "Triangle right double whole (stem down; 4-shape fa; 7-shape fa)" - }, - "noteShapeTriangleRightWhite": { - "codepoint": "U+E1B4", - "description": "Triangle right white (stem down; 4-shape fa; 7-shape fa)" - }, - "noteShapeTriangleRoundBlack": { - "codepoint": "U+E1BF", - "description": "Triangle-round black (Aikin 7-shape ti)" - }, - "noteShapeTriangleRoundDoubleWhole": { - "codepoint": "U+ECD7", - "description": "Triangle-round white (Aikin 7-shape ti)" - }, - "noteShapeTriangleRoundLeftBlack": { - "codepoint": "U+E1CB", - "description": "Triangle-round left black (Funk 7-shape ti)" - }, - "noteShapeTriangleRoundLeftDoubleWhole": { - "codepoint": "U+ECDD", - "description": "Triangle-round left double whole (Funk 7-shape ti)" - }, - "noteShapeTriangleRoundLeftWhite": { - "codepoint": "U+E1CA", - "description": "Triangle-round left white (Funk 7-shape ti)" - }, - "noteShapeTriangleRoundWhite": { - "codepoint": "U+E1BE", - "description": "Triangle-round white (Aikin 7-shape ti)" - }, - "noteShapeTriangleUpBlack": { - "codepoint": "U+E1BB", - "description": "Triangle up black (Aikin 7-shape do)" - }, - "noteShapeTriangleUpDoubleWhole": { - "codepoint": "U+ECD5", - "description": "Triangle up double whole (Aikin 7-shape do)" - }, - "noteShapeTriangleUpWhite": { - "codepoint": "U+E1BA", - "description": "Triangle up white (Aikin 7-shape do)" - }, - "noteSiBlack": { - "codepoint": "U+E167", - "description": "Si (black note)" - }, - "noteSiHalf": { - "codepoint": "U+E15F", - "description": "Si (half note)" - }, - "noteSiWhole": { - "codepoint": "U+E157", - "description": "Si (whole note)" - }, - "noteSoBlack": { - "codepoint": "U+E164", - "description": "So (black note)" - }, - "noteSoHalf": { - "codepoint": "U+E15C", - "description": "So (half note)" - }, - "noteSoWhole": { - "codepoint": "U+E154", - "description": "So (whole note)" - }, - "noteTiBlack": { - "codepoint": "U+E166", - "description": "Ti (black note)" - }, - "noteTiHalf": { - "codepoint": "U+E15E", - "description": "Ti (half note)" - }, - "noteTiWhole": { - "codepoint": "U+E156", - "description": "Ti (whole note)" - }, - "noteWhole": { - "alternateCodepoint": "U+1D15D", - "codepoint": "U+E1D2", - "description": "Whole note (semibreve)" - }, - "noteheadBlack": { - "alternateCodepoint": "U+1D158", - "codepoint": "U+E0A4", - "description": "Black notehead" - }, - "noteheadCircleSlash": { - "codepoint": "U+E0F7", - "description": "Circle slash notehead" - }, - "noteheadCircleX": { - "alternateCodepoint": "U+1D145", - "codepoint": "U+E0B3", - "description": "Circle X notehead" - }, - "noteheadCircleXDoubleWhole": { - "codepoint": "U+E0B0", - "description": "Circle X double whole" - }, - "noteheadCircleXHalf": { - "codepoint": "U+E0B2", - "description": "Circle X half" - }, - "noteheadCircleXWhole": { - "codepoint": "U+E0B1", - "description": "Circle X whole" - }, - "noteheadCircledBlack": { - "codepoint": "U+E0E4", - "description": "Circled black notehead" - }, - "noteheadCircledBlackLarge": { - "codepoint": "U+E0E8", - "description": "Black notehead in large circle" - }, - "noteheadCircledDoubleWhole": { - "codepoint": "U+E0E7", - "description": "Circled double whole notehead" - }, - "noteheadCircledDoubleWholeLarge": { - "codepoint": "U+E0EB", - "description": "Double whole notehead in large circle" - }, - "noteheadCircledHalf": { - "codepoint": "U+E0E5", - "description": "Circled half notehead" - }, - "noteheadCircledHalfLarge": { - "codepoint": "U+E0E9", - "description": "Half notehead in large circle" - }, - "noteheadCircledWhole": { - "codepoint": "U+E0E6", - "description": "Circled whole notehead" - }, - "noteheadCircledWholeLarge": { - "codepoint": "U+E0EA", - "description": "Whole notehead in large circle" - }, - "noteheadCircledXLarge": { - "codepoint": "U+E0EC", - "description": "Cross notehead in large circle" - }, - "noteheadClusterDoubleWhole2nd": { - "codepoint": "U+E124", - "description": "Double whole note cluster, 2nd" - }, - "noteheadClusterDoubleWhole3rd": { - "codepoint": "U+E128", - "description": "Double whole note cluster, 3rd" - }, - "noteheadClusterDoubleWholeBottom": { - "codepoint": "U+E12E", - "description": "Combining double whole note cluster, bottom" - }, - "noteheadClusterDoubleWholeMiddle": { - "codepoint": "U+E12D", - "description": "Combining double whole note cluster, middle" - }, - "noteheadClusterDoubleWholeTop": { - "codepoint": "U+E12C", - "description": "Combining double whole note cluster, top" - }, - "noteheadClusterHalf2nd": { - "codepoint": "U+E126", - "description": "Half note cluster, 2nd" - }, - "noteheadClusterHalf3rd": { - "codepoint": "U+E12A", - "description": "Half note cluster, 3rd" - }, - "noteheadClusterHalfBottom": { - "codepoint": "U+E134", - "description": "Combining half note cluster, bottom" - }, - "noteheadClusterHalfMiddle": { - "codepoint": "U+E133", - "description": "Combining half note cluster, middle" - }, - "noteheadClusterHalfTop": { - "codepoint": "U+E132", - "description": "Combining half note cluster, top" - }, - "noteheadClusterQuarter2nd": { - "codepoint": "U+E127", - "description": "Quarter note cluster, 2nd" - }, - "noteheadClusterQuarter3rd": { - "codepoint": "U+E12B", - "description": "Quarter note cluster, 3rd" - }, - "noteheadClusterQuarterBottom": { - "codepoint": "U+E137", - "description": "Combining quarter note cluster, bottom" - }, - "noteheadClusterQuarterMiddle": { - "codepoint": "U+E136", - "description": "Combining quarter note cluster, middle" - }, - "noteheadClusterQuarterTop": { - "codepoint": "U+E135", - "description": "Combining quarter note cluster, top" - }, - "noteheadClusterRoundBlack": { - "codepoint": "U+E123", - "description": "Cluster notehead black (round)" - }, - "noteheadClusterRoundWhite": { - "codepoint": "U+E122", - "description": "Cluster notehead white (round)" - }, - "noteheadClusterSquareBlack": { - "alternateCodepoint": "U+1D15B", - "codepoint": "U+E121", - "description": "Cluster notehead black (square)" - }, - "noteheadClusterSquareWhite": { - "alternateCodepoint": "U+1D15A", - "codepoint": "U+E120", - "description": "Cluster notehead white (square)" - }, - "noteheadClusterWhole2nd": { - "codepoint": "U+E125", - "description": "Whole note cluster, 2nd" - }, - "noteheadClusterWhole3rd": { - "codepoint": "U+E129", - "description": "Whole note cluster, 3rd" - }, - "noteheadClusterWholeBottom": { - "codepoint": "U+E131", - "description": "Combining whole note cluster, bottom" - }, - "noteheadClusterWholeMiddle": { - "codepoint": "U+E130", - "description": "Combining whole note cluster, middle" - }, - "noteheadClusterWholeTop": { - "codepoint": "U+E12F", - "description": "Combining whole note cluster, top" - }, - "noteheadDiamondBlack": { - "codepoint": "U+E0DB", - "description": "Diamond black notehead" - }, - "noteheadDiamondBlackOld": { - "codepoint": "U+E0E2", - "description": "Diamond black notehead (old)" - }, - "noteheadDiamondBlackWide": { - "codepoint": "U+E0DC", - "description": "Diamond black notehead (wide)" - }, - "noteheadDiamondClusterBlack2nd": { - "codepoint": "U+E139", - "description": "Black diamond cluster, 2nd" - }, - "noteheadDiamondClusterBlack3rd": { - "codepoint": "U+E13B", - "description": "Black diamond cluster, 3rd" - }, - "noteheadDiamondClusterBlackBottom": { - "codepoint": "U+E141", - "description": "Combining black diamond cluster, bottom" - }, - "noteheadDiamondClusterBlackMiddle": { - "codepoint": "U+E140", - "description": "Combining black diamond cluster, middle" - }, - "noteheadDiamondClusterBlackTop": { - "codepoint": "U+E13F", - "description": "Combining black diamond cluster, top" - }, - "noteheadDiamondClusterWhite2nd": { - "codepoint": "U+E138", - "description": "White diamond cluster, 2nd" - }, - "noteheadDiamondClusterWhite3rd": { - "codepoint": "U+E13A", - "description": "White diamond cluster, 3rd" - }, - "noteheadDiamondClusterWhiteBottom": { - "codepoint": "U+E13E", - "description": "Combining white diamond cluster, bottom" - }, - "noteheadDiamondClusterWhiteMiddle": { - "codepoint": "U+E13D", - "description": "Combining white diamond cluster, middle" - }, - "noteheadDiamondClusterWhiteTop": { - "codepoint": "U+E13C", - "description": "Combining white diamond cluster, top" - }, - "noteheadDiamondDoubleWhole": { - "codepoint": "U+E0D7", - "description": "Diamond double whole notehead" - }, - "noteheadDiamondDoubleWholeOld": { - "codepoint": "U+E0DF", - "description": "Diamond double whole notehead (old)" - }, - "noteheadDiamondHalf": { - "codepoint": "U+E0D9", - "description": "Diamond half notehead" - }, - "noteheadDiamondHalfFilled": { - "codepoint": "U+E0E3", - "description": "Half-filled diamond notehead" - }, - "noteheadDiamondHalfOld": { - "codepoint": "U+E0E1", - "description": "Diamond half notehead (old)" - }, - "noteheadDiamondHalfWide": { - "codepoint": "U+E0DA", - "description": "Diamond half notehead (wide)" - }, - "noteheadDiamondOpen": { - "codepoint": "U+E0FC", - "description": "Open diamond notehead" - }, - "noteheadDiamondWhite": { - "codepoint": "U+E0DD", - "description": "Diamond white notehead" - }, - "noteheadDiamondWhiteWide": { - "codepoint": "U+E0DE", - "description": "Diamond white notehead (wide)" - }, - "noteheadDiamondWhole": { - "codepoint": "U+E0D8", - "description": "Diamond whole notehead" - }, - "noteheadDiamondWholeOld": { - "codepoint": "U+E0E0", - "description": "Diamond whole notehead (old)" - }, - "noteheadDoubleWhole": { - "codepoint": "U+E0A0", - "description": "Double whole (breve) notehead" - }, - "noteheadDoubleWholeSquare": { - "codepoint": "U+E0A1", - "description": "Double whole (breve) notehead (square)" - }, - "noteheadDoubleWholeWithX": { - "codepoint": "U+E0B4", - "description": "Double whole notehead with X" - }, - "noteheadHalf": { - "alternateCodepoint": "U+1D157", - "codepoint": "U+E0A3", - "description": "Half (minim) notehead" - }, - "noteheadHalfFilled": { - "codepoint": "U+E0FB", - "description": "Filled half (minim) notehead" - }, - "noteheadHalfWithX": { - "codepoint": "U+E0B6", - "description": "Half notehead with X" - }, - "noteheadHeavyX": { - "codepoint": "U+E0F8", - "description": "Heavy X notehead" - }, - "noteheadHeavyXHat": { - "codepoint": "U+E0F9", - "description": "Heavy X with hat notehead" - }, - "noteheadLargeArrowDownBlack": { - "codepoint": "U+E0F4", - "description": "Large arrow down (lowest pitch) black notehead" - }, - "noteheadLargeArrowDownDoubleWhole": { - "codepoint": "U+E0F1", - "description": "Large arrow down (lowest pitch) double whole notehead" - }, - "noteheadLargeArrowDownHalf": { - "codepoint": "U+E0F3", - "description": "Large arrow down (lowest pitch) half notehead" - }, - "noteheadLargeArrowDownWhole": { - "codepoint": "U+E0F2", - "description": "Large arrow down (lowest pitch) whole notehead" - }, - "noteheadLargeArrowUpBlack": { - "codepoint": "U+E0F0", - "description": "Large arrow up (highest pitch) black notehead" - }, - "noteheadLargeArrowUpDoubleWhole": { - "codepoint": "U+E0ED", - "description": "Large arrow up (highest pitch) double whole notehead" - }, - "noteheadLargeArrowUpHalf": { - "codepoint": "U+E0EF", - "description": "Large arrow up (highest pitch) half notehead" - }, - "noteheadLargeArrowUpWhole": { - "codepoint": "U+E0EE", - "description": "Large arrow up (highest pitch) whole notehead" - }, - "noteheadMoonBlack": { - "alternateCodepoint": "U+1D153", - "codepoint": "U+E0CB", - "description": "Moon notehead black" - }, - "noteheadMoonWhite": { - "alternateCodepoint": "U+1D152", - "codepoint": "U+E0CA", - "description": "Moon notehead white" - }, - "noteheadNull": { - "alternateCodepoint": "U+1D159", - "codepoint": "U+E0A5", - "description": "Null notehead" - }, - "noteheadParenthesis": { - "alternateCodepoint": "U+1D156", - "codepoint": "U+E0CE", - "description": "Parenthesis notehead" - }, - "noteheadParenthesisLeft": { - "codepoint": "U+E0F5", - "description": "Opening parenthesis" - }, - "noteheadParenthesisRight": { - "codepoint": "U+E0F6", - "description": "Closing parenthesis" - }, - "noteheadPlusBlack": { - "alternateCodepoint": "U+1D144", - "codepoint": "U+E0AF", - "description": "Plus notehead black" - }, - "noteheadPlusDoubleWhole": { - "codepoint": "U+E0AC", - "description": "Plus notehead double whole" - }, - "noteheadPlusHalf": { - "codepoint": "U+E0AE", - "description": "Plus notehead half" - }, - "noteheadPlusWhole": { - "codepoint": "U+E0AD", - "description": "Plus notehead whole" - }, - "noteheadRectangularClusterBlackBottom": { - "codepoint": "U+E144", - "description": "Combining black rectangular cluster, bottom" - }, - "noteheadRectangularClusterBlackMiddle": { - "codepoint": "U+E143", - "description": "Combining black rectangular cluster, middle" - }, - "noteheadRectangularClusterBlackTop": { - "codepoint": "U+E142", - "description": "Combining black rectangular cluster, top" - }, - "noteheadRectangularClusterWhiteBottom": { - "codepoint": "U+E147", - "description": "Combining white rectangular cluster, bottom" - }, - "noteheadRectangularClusterWhiteMiddle": { - "codepoint": "U+E146", - "description": "Combining white rectangular cluster, middle" - }, - "noteheadRectangularClusterWhiteTop": { - "codepoint": "U+E145", - "description": "Combining white rectangular cluster, top" - }, - "noteheadRoundBlack": { - "codepoint": "U+E113", - "description": "Round black notehead" - }, - "noteheadRoundBlackDoubleSlashed": { - "codepoint": "U+E11C", - "description": "Round black notehead, double slashed" - }, - "noteheadRoundBlackLarge": { - "codepoint": "U+E110", - "description": "Large round black notehead" - }, - "noteheadRoundBlackSlashed": { - "codepoint": "U+E118", - "description": "Round black notehead, slashed" - }, - "noteheadRoundBlackSlashedLarge": { - "codepoint": "U+E116", - "description": "Large round black notehead, slashed" - }, - "noteheadRoundWhite": { - "codepoint": "U+E114", - "description": "Round white notehead" - }, - "noteheadRoundWhiteDoubleSlashed": { - "codepoint": "U+E11D", - "description": "Round white notehead, double slashed" - }, - "noteheadRoundWhiteLarge": { - "codepoint": "U+E111", - "description": "Large round white notehead" - }, - "noteheadRoundWhiteSlashed": { - "codepoint": "U+E119", - "description": "Round white notehead, slashed" - }, - "noteheadRoundWhiteSlashedLarge": { - "codepoint": "U+E117", - "description": "Large round white notehead, slashed" - }, - "noteheadRoundWhiteWithDot": { - "codepoint": "U+E115", - "description": "Round white notehead with dot" - }, - "noteheadRoundWhiteWithDotLarge": { - "codepoint": "U+E112", - "description": "Large round white notehead with dot" - }, - "noteheadSlashDiamondWhite": { - "codepoint": "U+E104", - "description": "Large white diamond" - }, - "noteheadSlashHorizontalEnds": { - "alternateCodepoint": "U+1D10D", - "codepoint": "U+E101", - "description": "Slash with horizontal ends" - }, - "noteheadSlashHorizontalEndsMuted": { - "codepoint": "U+E108", - "description": "Muted slash with horizontal ends" - }, - "noteheadSlashVerticalEnds": { - "codepoint": "U+E100", - "description": "Slash with vertical ends" - }, - "noteheadSlashVerticalEndsMuted": { - "codepoint": "U+E107", - "description": "Muted slash with vertical ends" - }, - "noteheadSlashVerticalEndsSmall": { - "codepoint": "U+E105", - "description": "Small slash with vertical ends" - }, - "noteheadSlashWhiteDoubleWhole": { - "codepoint": "U+E10A", - "description": "White slash double whole" - }, - "noteheadSlashWhiteHalf": { - "codepoint": "U+E103", - "description": "White slash half" - }, - "noteheadSlashWhiteMuted": { - "codepoint": "U+E109", - "description": "Muted white slash" - }, - "noteheadSlashWhiteWhole": { - "codepoint": "U+E102", - "description": "White slash whole" - }, - "noteheadSlashX": { - "codepoint": "U+E106", - "description": "Large X notehead" - }, - "noteheadSlashedBlack1": { - "codepoint": "U+E0CF", - "description": "Slashed black notehead (bottom left to top right)" - }, - "noteheadSlashedBlack2": { - "codepoint": "U+E0D0", - "description": "Slashed black notehead (top left to bottom right)" - }, - "noteheadSlashedDoubleWhole1": { - "codepoint": "U+E0D5", - "description": "Slashed double whole notehead (bottom left to top right)" - }, - "noteheadSlashedDoubleWhole2": { - "codepoint": "U+E0D6", - "description": "Slashed double whole notehead (top left to bottom right)" - }, - "noteheadSlashedHalf1": { - "codepoint": "U+E0D1", - "description": "Slashed half notehead (bottom left to top right)" - }, - "noteheadSlashedHalf2": { - "codepoint": "U+E0D2", - "description": "Slashed half notehead (top left to bottom right)" - }, - "noteheadSlashedWhole1": { - "codepoint": "U+E0D3", - "description": "Slashed whole notehead (bottom left to top right)" - }, - "noteheadSlashedWhole2": { - "codepoint": "U+E0D4", - "description": "Slashed whole notehead (top left to bottom right)" - }, - "noteheadSquareBlack": { - "alternateCodepoint": "U+1D147", - "codepoint": "U+E0B9", - "description": "Square notehead black" - }, - "noteheadSquareBlackLarge": { - "codepoint": "U+E11A", - "description": "Large square black notehead" - }, - "noteheadSquareBlackWhite": { - "codepoint": "U+E11B", - "description": "Large square white notehead" - }, - "noteheadSquareWhite": { - "alternateCodepoint": "U+1D146", - "codepoint": "U+E0B8", - "description": "Square notehead white" - }, - "noteheadTriangleDownBlack": { - "alternateCodepoint": "U+1D14F", - "codepoint": "U+E0C7", - "description": "Triangle notehead down black" - }, - "noteheadTriangleDownDoubleWhole": { - "codepoint": "U+E0C3", - "description": "Triangle notehead down double whole" - }, - "noteheadTriangleDownHalf": { - "codepoint": "U+E0C5", - "description": "Triangle notehead down half" - }, - "noteheadTriangleDownWhite": { - "alternateCodepoint": "U+1D14E", - "codepoint": "U+E0C6", - "description": "Triangle notehead down white" - }, - "noteheadTriangleDownWhole": { - "codepoint": "U+E0C4", - "description": "Triangle notehead down whole" - }, - "noteheadTriangleLeftBlack": { - "alternateCodepoint": "U+1D14B", - "codepoint": "U+E0C0", - "description": "Triangle notehead left black" - }, - "noteheadTriangleLeftWhite": { - "alternateCodepoint": "U+1D14A", - "codepoint": "U+E0BF", - "description": "Triangle notehead left white" - }, - "noteheadTriangleRightBlack": { - "alternateCodepoint": "U+1D14D", - "codepoint": "U+E0C2", - "description": "Triangle notehead right black" - }, - "noteheadTriangleRightWhite": { - "alternateCodepoint": "U+1D14C", - "codepoint": "U+E0C1", - "description": "Triangle notehead right white" - }, - "noteheadTriangleRoundDownBlack": { - "alternateCodepoint": "U+1D155", - "codepoint": "U+E0CD", - "description": "Triangle-round notehead down black" - }, - "noteheadTriangleRoundDownWhite": { - "alternateCodepoint": "U+1D154", - "codepoint": "U+E0CC", - "description": "Triangle-round notehead down white" - }, - "noteheadTriangleUpBlack": { - "alternateCodepoint": "U+1D149", - "codepoint": "U+E0BE", - "description": "Triangle notehead up black" - }, - "noteheadTriangleUpDoubleWhole": { - "codepoint": "U+E0BA", - "description": "Triangle notehead up double whole" - }, - "noteheadTriangleUpHalf": { - "codepoint": "U+E0BC", - "description": "Triangle notehead up half" - }, - "noteheadTriangleUpRightBlack": { - "alternateCodepoint": "U+1D151", - "codepoint": "U+E0C9", - "description": "Triangle notehead up right black" - }, - "noteheadTriangleUpRightWhite": { - "alternateCodepoint": "U+1D150", - "codepoint": "U+E0C8", - "description": "Triangle notehead up right white" - }, - "noteheadTriangleUpWhite": { - "alternateCodepoint": "U+1D148", - "codepoint": "U+E0BD", - "description": "Triangle notehead up white" - }, - "noteheadTriangleUpWhole": { - "codepoint": "U+E0BB", - "description": "Triangle notehead up whole" - }, - "noteheadVoidWithX": { - "codepoint": "U+E0B7", - "description": "Void notehead with X" - }, - "noteheadWhole": { - "codepoint": "U+E0A2", - "description": "Whole (semibreve) notehead" - }, - "noteheadWholeFilled": { - "codepoint": "U+E0FA", - "description": "Filled whole (semibreve) notehead" - }, - "noteheadWholeWithX": { - "codepoint": "U+E0B5", - "description": "Whole notehead with X" - }, - "noteheadXBlack": { - "alternateCodepoint": "U+1D143", - "codepoint": "U+E0A9", - "description": "X notehead black" - }, - "noteheadXDoubleWhole": { - "codepoint": "U+E0A6", - "description": "X notehead double whole" - }, - "noteheadXHalf": { - "codepoint": "U+E0A8", - "description": "X notehead half" - }, - "noteheadXOrnate": { - "codepoint": "U+E0AA", - "description": "Ornate X notehead" - }, - "noteheadXOrnateEllipse": { - "codepoint": "U+E0AB", - "description": "Ornate X notehead in ellipse" - }, - "noteheadXWhole": { - "codepoint": "U+E0A7", - "description": "X notehead whole" - }, - "octaveBaselineA": { - "codepoint": "U+EC91", - "description": "a (baseline)" - }, - "octaveBaselineB": { - "codepoint": "U+EC93", - "description": "b (baseline)" - }, - "octaveBaselineM": { - "codepoint": "U+EC95", - "description": "m (baseline)" - }, - "octaveBaselineV": { - "codepoint": "U+EC97", - "description": "v (baseline)" - }, - "octaveBassa": { - "codepoint": "U+E51F", - "description": "Bassa" - }, - "octaveLoco": { - "codepoint": "U+EC90", - "description": "Loco" - }, - "octaveParensLeft": { - "codepoint": "U+E51A", - "description": "Left parenthesis for octave signs" - }, - "octaveParensRight": { - "codepoint": "U+E51B", - "description": "Right parenthesis for octave signs" - }, - "octaveSuperscriptA": { - "codepoint": "U+EC92", - "description": "a (superscript)" - }, - "octaveSuperscriptB": { - "codepoint": "U+EC94", - "description": "b (superscript)" - }, - "octaveSuperscriptM": { - "codepoint": "U+EC96", - "description": "m (superscript)" - }, - "octaveSuperscriptV": { - "codepoint": "U+EC98", - "description": "v (superscript)" - }, - "oneHandedRollStevens": { - "codepoint": "U+E233", - "description": "One-handed roll (Stevens)" - }, - "organGerman2Fusae": { - "codepoint": "U+EE2E", - "description": "Two Fusae" - }, - "organGerman2Minimae": { - "codepoint": "U+EE2C", - "description": "Two Minimae" - }, - "organGerman2OctaveUp": { - "codepoint": "U+EE19", - "description": "Combining double octave line above" - }, - "organGerman2Semifusae": { - "codepoint": "U+EE2F", - "description": "Two Semifusae" - }, - "organGerman2Semiminimae": { - "codepoint": "U+EE2D", - "description": "Two Semiminimae" - }, - "organGerman3Fusae": { - "codepoint": "U+EE32", - "description": "Three Fusae" - }, - "organGerman3Minimae": { - "codepoint": "U+EE30", - "description": "Three Minimae" - }, - "organGerman3Semifusae": { - "codepoint": "U+EE33", - "description": "Three Semifusae" - }, - "organGerman3Semiminimae": { - "codepoint": "U+EE31", - "description": "Three Semiminimae" - }, - "organGerman4Fusae": { - "codepoint": "U+EE36", - "description": "Four Fusae" - }, - "organGerman4Minimae": { - "codepoint": "U+EE34", - "description": "Four Minimae" - }, - "organGerman4Semifusae": { - "codepoint": "U+EE37", - "description": "Four Semifusae" - }, - "organGerman4Semiminimae": { - "codepoint": "U+EE35", - "description": "Four Semiminimae" - }, - "organGerman5Fusae": { - "codepoint": "U+EE3A", - "description": "Five Fusae" - }, - "organGerman5Minimae": { - "codepoint": "U+EE38", - "description": "Five Minimae" - }, - "organGerman5Semifusae": { - "codepoint": "U+EE3B", - "description": "Five Semifusae" - }, - "organGerman5Semiminimae": { - "codepoint": "U+EE39", - "description": "Five Semiminimae" - }, - "organGerman6Fusae": { - "codepoint": "U+EE3E", - "description": "Six Fusae" - }, - "organGerman6Minimae": { - "codepoint": "U+EE3C", - "description": "Six Minimae" - }, - "organGerman6Semifusae": { - "codepoint": "U+EE3F", - "description": "Six Semifusae" - }, - "organGerman6Semiminimae": { - "codepoint": "U+EE3D", - "description": "Six Semiminimae" - }, - "organGermanALower": { - "codepoint": "U+EE15", - "description": "German organ tablature small A" - }, - "organGermanAUpper": { - "codepoint": "U+EE09", - "description": "German organ tablature great A" - }, - "organGermanAugmentationDot": { - "codepoint": "U+EE1C", - "description": "Rhythm Dot" - }, - "organGermanBLower": { - "codepoint": "U+EE16", - "description": "German organ tablature small B" - }, - "organGermanBUpper": { - "codepoint": "U+EE0A", - "description": "German organ tablature great B" - }, - "organGermanBuxheimerBrevis2": { - "codepoint": "U+EE25", - "description": "Brevis (Binary) Buxheimer Orgelbuch" - }, - "organGermanBuxheimerBrevis3": { - "codepoint": "U+EE24", - "description": "Brevis (Ternary) Buxheimer Orgelbuch" - }, - "organGermanBuxheimerMinimaRest": { - "codepoint": "U+EE1E", - "description": "Minima Rest Buxheimer Orgelbuch" - }, - "organGermanBuxheimerSemibrevis": { - "codepoint": "U+EE26", - "description": "Semibrevis Buxheimer Orgelbuch" - }, - "organGermanBuxheimerSemibrevisRest": { - "codepoint": "U+EE1D", - "description": "Semibrevis Rest Buxheimer Orgelbuch" - }, - "organGermanCLower": { - "codepoint": "U+EE0C", - "description": "German organ tablature small C" - }, - "organGermanCUpper": { - "codepoint": "U+EE00", - "description": "German organ tablature great C" - }, - "organGermanCisLower": { - "codepoint": "U+EE0D", - "description": "German organ tablature small Cis" - }, - "organGermanCisUpper": { - "codepoint": "U+EE01", - "description": "German organ tablature great Cis" - }, - "organGermanDLower": { - "codepoint": "U+EE0E", - "description": "German organ tablature small D" - }, - "organGermanDUpper": { - "codepoint": "U+EE02", - "description": "German organ tablature great D" - }, - "organGermanDisLower": { - "codepoint": "U+EE0F", - "description": "German organ tablature small Dis" - }, - "organGermanDisUpper": { - "codepoint": "U+EE03", - "description": "German organ tablature great Dis" - }, - "organGermanELower": { - "codepoint": "U+EE10", - "description": "German organ tablature small E" - }, - "organGermanEUpper": { - "codepoint": "U+EE04", - "description": "German organ tablature great E" - }, - "organGermanFLower": { - "codepoint": "U+EE11", - "description": "German organ tablature small F" - }, - "organGermanFUpper": { - "codepoint": "U+EE05", - "description": "German organ tablature great F" - }, - "organGermanFisLower": { - "codepoint": "U+EE12", - "description": "German organ tablature small Fis" - }, - "organGermanFisUpper": { - "codepoint": "U+EE06", - "description": "German organ tablature great Fis" - }, - "organGermanFusa": { - "codepoint": "U+EE2A", - "description": "Fusa" - }, - "organGermanFusaRest": { - "codepoint": "U+EE22", - "description": "Fusa Rest" - }, - "organGermanGLower": { - "codepoint": "U+EE13", - "description": "German organ tablature small G" - }, - "organGermanGUpper": { - "codepoint": "U+EE07", - "description": "German organ tablature great G" - }, - "organGermanGisLower": { - "codepoint": "U+EE14", - "description": "German organ tablature small Gis" - }, - "organGermanGisUpper": { - "codepoint": "U+EE08", - "description": "German organ tablature great Gis" - }, - "organGermanHLower": { - "codepoint": "U+EE17", - "description": "German organ tablature small H" - }, - "organGermanHUpper": { - "codepoint": "U+EE0B", - "description": "German organ tablature great H" - }, - "organGermanMinima": { - "codepoint": "U+EE28", - "description": "Minima" - }, - "organGermanMinimaRest": { - "codepoint": "U+EE20", - "description": "Minima Rest" - }, - "organGermanOctaveDown": { - "codepoint": "U+EE1A", - "description": "Combining single octave line below" - }, - "organGermanOctaveUp": { - "codepoint": "U+EE18", - "description": "Combining single octave line above" - }, - "organGermanSemibrevis": { - "codepoint": "U+EE27", - "description": "Semibrevis" - }, - "organGermanSemibrevisRest": { - "codepoint": "U+EE1F", - "description": "Semibrevis Rest" - }, - "organGermanSemifusa": { - "codepoint": "U+EE2B", - "description": "Semifusa" - }, - "organGermanSemifusaRest": { - "codepoint": "U+EE23", - "description": "Semifusa Rest" - }, - "organGermanSemiminima": { - "codepoint": "U+EE29", - "description": "Semiminima" - }, - "organGermanSemiminimaRest": { - "codepoint": "U+EE21", - "description": "Semiminima Rest" - }, - "organGermanTie": { - "codepoint": "U+EE1B", - "description": "Tie" - }, - "ornamentBottomLeftConcaveStroke": { - "codepoint": "U+E59A", - "description": "Ornament bottom left concave stroke" - }, - "ornamentBottomLeftConcaveStrokeLarge": { - "alternateCodepoint": "U+1D1A1", - "codepoint": "U+E59B", - "description": "Ornament bottom left concave stroke, large" - }, - "ornamentBottomLeftConvexStroke": { - "codepoint": "U+E59C", - "description": "Ornament bottom left convex stroke" - }, - "ornamentBottomRightConcaveStroke": { - "alternateCodepoint": "U+1D19F", - "codepoint": "U+E5A7", - "description": "Ornament bottom right concave stroke" - }, - "ornamentBottomRightConvexStroke": { - "codepoint": "U+E5A8", - "description": "Ornament bottom right convex stroke" - }, - "ornamentComma": { - "codepoint": "U+E581", - "description": "Comma" - }, - "ornamentDoubleObliqueLinesAfterNote": { - "codepoint": "U+E57E", - "description": "Double oblique straight lines NW-SE" - }, - "ornamentDoubleObliqueLinesBeforeNote": { - "codepoint": "U+E57D", - "description": "Double oblique straight lines SW-NE" - }, - "ornamentDownCurve": { - "codepoint": "U+E578", - "description": "Curve below" - }, - "ornamentHaydn": { - "codepoint": "U+E56F", - "description": "Haydn ornament" - }, - "ornamentHighLeftConcaveStroke": { - "codepoint": "U+E592", - "description": "Ornament high left concave stroke" - }, - "ornamentHighLeftConvexStroke": { - "alternateCodepoint": "U+1D1A2", - "codepoint": "U+E593", - "description": "Ornament high left convex stroke" - }, - "ornamentHighRightConcaveStroke": { - "codepoint": "U+E5A2", - "description": "Ornament high right concave stroke" - }, - "ornamentHighRightConvexStroke": { - "codepoint": "U+E5A3", - "description": "Ornament high right convex stroke" - }, - "ornamentHookAfterNote": { - "codepoint": "U+E576", - "description": "Hook after note" - }, - "ornamentHookBeforeNote": { - "codepoint": "U+E575", - "description": "Hook before note" - }, - "ornamentLeftFacingHalfCircle": { - "codepoint": "U+E572", - "description": "Left-facing half circle" - }, - "ornamentLeftFacingHook": { - "codepoint": "U+E574", - "description": "Left-facing hook" - }, - "ornamentLeftPlus": { - "codepoint": "U+E597", - "description": "Ornament left +" - }, - "ornamentLeftShakeT": { - "codepoint": "U+E596", - "description": "Ornament left shake t" - }, - "ornamentLeftVerticalStroke": { - "alternateCodepoint": "U+1D19B", - "codepoint": "U+E594", - "description": "Ornament left vertical stroke" - }, - "ornamentLeftVerticalStrokeWithCross": { - "codepoint": "U+E595", - "description": "Ornament left vertical stroke with cross (+)" - }, - "ornamentLowLeftConcaveStroke": { - "codepoint": "U+E598", - "description": "Ornament low left concave stroke" - }, - "ornamentLowLeftConvexStroke": { - "alternateCodepoint": "U+1D1A4", - "codepoint": "U+E599", - "description": "Ornament low left convex stroke" - }, - "ornamentLowRightConcaveStroke": { - "alternateCodepoint": "U+1D1A3", - "codepoint": "U+E5A5", - "description": "Ornament low right concave stroke" - }, - "ornamentLowRightConvexStroke": { - "codepoint": "U+E5A6", - "description": "Ornament low right convex stroke" - }, - "ornamentMiddleVerticalStroke": { - "alternateCodepoint": "U+1D1A0", - "codepoint": "U+E59F", - "description": "Ornament middle vertical stroke" - }, - "ornamentMordent": { - "codepoint": "U+E56D", - "description": "Mordent" - }, - "ornamentObliqueLineAfterNote": { - "codepoint": "U+E57C", - "description": "Oblique straight line NW-SE" - }, - "ornamentObliqueLineBeforeNote": { - "codepoint": "U+E57B", - "description": "Oblique straight line SW-NE" - }, - "ornamentObliqueLineHorizAfterNote": { - "codepoint": "U+E580", - "description": "Oblique straight line tilted NW-SE" - }, - "ornamentObliqueLineHorizBeforeNote": { - "codepoint": "U+E57F", - "description": "Oblique straight line tilted SW-NE" - }, - "ornamentOriscus": { - "codepoint": "U+EA21", - "description": "Oriscus" - }, - "ornamentPinceCouperin": { - "codepoint": "U+E588", - "description": "Pinc\u00e9 (Couperin)" - }, - "ornamentPortDeVoixV": { - "codepoint": "U+E570", - "description": "Port de voix" - }, - "ornamentPrecompAppoggTrill": { - "codepoint": "U+E5B2", - "description": "Supported appoggiatura trill" - }, - "ornamentPrecompAppoggTrillSuffix": { - "codepoint": "U+E5B3", - "description": "Supported appoggiatura trill with two-note suffix" - }, - "ornamentPrecompCadence": { - "codepoint": "U+E5BE", - "description": "Cadence" - }, - "ornamentPrecompCadenceUpperPrefix": { - "codepoint": "U+E5C1", - "description": "Cadence with upper prefix" - }, - "ornamentPrecompCadenceUpperPrefixTurn": { - "codepoint": "U+E5C2", - "description": "Cadence with upper prefix and turn" - }, - "ornamentPrecompCadenceWithTurn": { - "codepoint": "U+E5BF", - "description": "Cadence with turn" - }, - "ornamentPrecompDescendingSlide": { - "codepoint": "U+E5B1", - "description": "Descending slide" - }, - "ornamentPrecompDoubleCadenceLowerPrefix": { - "codepoint": "U+E5C0", - "description": "Double cadence with lower prefix" - }, - "ornamentPrecompDoubleCadenceUpperPrefix": { - "codepoint": "U+E5C3", - "description": "Double cadence with upper prefix" - }, - "ornamentPrecompDoubleCadenceUpperPrefixTurn": { - "codepoint": "U+E5C4", - "description": "Double cadence with upper prefix and turn" - }, - "ornamentPrecompInvertedMordentUpperPrefix": { - "codepoint": "U+E5C7", - "description": "Inverted mordent with upper prefix" - }, - "ornamentPrecompMordentRelease": { - "codepoint": "U+E5C5", - "description": "Mordent with release" - }, - "ornamentPrecompMordentUpperPrefix": { - "codepoint": "U+E5C6", - "description": "Mordent with upper prefix" - }, - "ornamentPrecompPortDeVoixMordent": { - "codepoint": "U+E5BC", - "description": "Pre-beat port de voix followed by multiple mordent (Dandrieu)" - }, - "ornamentPrecompSlide": { - "codepoint": "U+E5B0", - "description": "Slide" - }, - "ornamentPrecompSlideTrillBach": { - "codepoint": "U+E5B8", - "description": "Slide-trill with two-note suffix (J.S. Bach)" - }, - "ornamentPrecompSlideTrillDAnglebert": { - "codepoint": "U+E5B5", - "description": "Slide-trill (D'Anglebert)" - }, - "ornamentPrecompSlideTrillMarpurg": { - "codepoint": "U+E5B6", - "description": "Slide-trill with one-note suffix (Marpurg)" - }, - "ornamentPrecompSlideTrillMuffat": { - "codepoint": "U+E5B9", - "description": "Slide-trill (Muffat)" - }, - "ornamentPrecompSlideTrillSuffixMuffat": { - "codepoint": "U+E5BA", - "description": "Slide-trill with two-note suffix (Muffat)" - }, - "ornamentPrecompTrillLowerSuffix": { - "codepoint": "U+E5C8", - "description": "Trill with lower suffix" - }, - "ornamentPrecompTrillSuffixDandrieu": { - "codepoint": "U+E5BB", - "description": "Trill with two-note suffix (Dandrieu)" - }, - "ornamentPrecompTrillWithMordent": { - "codepoint": "U+E5BD", - "description": "Trill with mordent" - }, - "ornamentPrecompTurnTrillBach": { - "codepoint": "U+E5B7", - "description": "Turn-trill with two-note suffix (J.S. Bach)" - }, - "ornamentPrecompTurnTrillDAnglebert": { - "codepoint": "U+E5B4", - "description": "Turn-trill (D'Anglebert)" - }, - "ornamentQuilisma": { - "codepoint": "U+EA20", - "description": "Quilisma" - }, - "ornamentRightFacingHalfCircle": { - "codepoint": "U+E571", - "description": "Right-facing half circle" - }, - "ornamentRightFacingHook": { - "codepoint": "U+E573", - "description": "Right-facing hook" - }, - "ornamentRightVerticalStroke": { - "codepoint": "U+E5A4", - "description": "Ornament right vertical stroke" - }, - "ornamentSchleifer": { - "codepoint": "U+E587", - "description": "Schleifer (long mordent)" - }, - "ornamentShake3": { - "codepoint": "U+E582", - "description": "Shake" - }, - "ornamentShakeMuffat1": { - "codepoint": "U+E584", - "description": "Shake (Muffat)" - }, - "ornamentShortObliqueLineAfterNote": { - "codepoint": "U+E57A", - "description": "Short oblique straight line NW-SE" - }, - "ornamentShortObliqueLineBeforeNote": { - "codepoint": "U+E579", - "description": "Short oblique straight line SW-NE" - }, - "ornamentShortTrill": { - "codepoint": "U+E56C", - "description": "Short trill" - }, - "ornamentTopLeftConcaveStroke": { - "codepoint": "U+E590", - "description": "Ornament top left concave stroke" - }, - "ornamentTopLeftConvexStroke": { - "alternateCodepoint": "U+1D1A5", - "codepoint": "U+E591", - "description": "Ornament top left convex stroke" - }, - "ornamentTopRightConcaveStroke": { - "codepoint": "U+E5A0", - "description": "Ornament top right concave stroke" - }, - "ornamentTopRightConvexStroke": { - "alternateCodepoint": "U+1D19E", - "codepoint": "U+E5A1", - "description": "Ornament top right convex stroke" - }, - "ornamentTremblement": { - "codepoint": "U+E56E", - "description": "Tremblement" - }, - "ornamentTremblementCouperin": { - "codepoint": "U+E589", - "description": "Tremblement appuy\u00e9 (Couperin)" - }, - "ornamentTrill": { - "alternateCodepoint": "U+1D196", - "codepoint": "U+E566", - "description": "Trill" - }, - "ornamentTurn": { - "alternateCodepoint": "U+1D197", - "codepoint": "U+E567", - "description": "Turn" - }, - "ornamentTurnInverted": { - "alternateCodepoint": "U+1D198", - "codepoint": "U+E568", - "description": "Inverted turn" - }, - "ornamentTurnSlash": { - "alternateCodepoint": "U+1D199", - "codepoint": "U+E569", - "description": "Turn with slash" - }, - "ornamentTurnUp": { - "alternateCodepoint": "U+1D19A", - "codepoint": "U+E56A", - "description": "Turn up" - }, - "ornamentTurnUpS": { - "codepoint": "U+E56B", - "description": "Inverted turn up" - }, - "ornamentUpCurve": { - "codepoint": "U+E577", - "description": "Curve above" - }, - "ornamentVerticalLine": { - "codepoint": "U+E583", - "description": "Vertical line" - }, - "ornamentZigZagLineNoRightEnd": { - "alternateCodepoint": "U+1D19C", - "codepoint": "U+E59D", - "description": "Ornament zig-zag line without right-hand end" - }, - "ornamentZigZagLineWithRightEnd": { - "alternateCodepoint": "U+1D19D", - "codepoint": "U+E59E", - "description": "Ornament zig-zag line with right-hand end" - }, - "ottava": { - "codepoint": "U+E510", - "description": "Ottava" - }, - "ottavaAlta": { - "alternateCodepoint": "U+1D136", - "codepoint": "U+E511", - "description": "Ottava alta" - }, - "ottavaBassa": { - "alternateCodepoint": "U+1D137", - "codepoint": "U+E512", - "description": "Ottava bassa" - }, - "ottavaBassaBa": { - "codepoint": "U+E513", - "description": "Ottava bassa (ba)" - }, - "ottavaBassaVb": { - "codepoint": "U+E51C", - "description": "Ottava bassa (8vb)" - }, - "pendereckiTremolo": { - "codepoint": "U+E22B", - "description": "Penderecki unmeasured tremolo" - }, - "pictAgogo": { - "codepoint": "U+E717", - "description": "Agogo" - }, - "pictAlmglocken": { - "codepoint": "U+E712", - "description": "Almglocken" - }, - "pictAnvil": { - "codepoint": "U+E701", - "description": "Anvil" - }, - "pictBambooChimes": { - "codepoint": "U+E6C3", - "description": "Bamboo tube chimes" - }, - "pictBambooScraper": { - "codepoint": "U+E6FB", - "description": "Bamboo scraper" - }, - "pictBassDrum": { - "codepoint": "U+E6D4", - "description": "Bass drum" - }, - "pictBassDrumOnSide": { - "codepoint": "U+E6D5", - "description": "Bass drum on side" - }, - "pictBeaterBow": { - "codepoint": "U+E7DE", - "description": "Bow" - }, - "pictBeaterBox": { - "codepoint": "U+E7EB", - "description": "Box for percussion beater" - }, - "pictBeaterBrassMalletsDown": { - "codepoint": "U+E7DA", - "description": "Brass mallets down" - }, - "pictBeaterBrassMalletsLeft": { - "codepoint": "U+E7EE", - "description": "Brass mallets left" - }, - "pictBeaterBrassMalletsRight": { - "codepoint": "U+E7ED", - "description": "Brass mallets right" - }, - "pictBeaterBrassMalletsUp": { - "codepoint": "U+E7D9", - "description": "Brass mallets up" - }, - "pictBeaterCombiningDashedCircle": { - "codepoint": "U+E7EA", - "description": "Combining dashed circle for round beaters (plated)" - }, - "pictBeaterCombiningParentheses": { - "codepoint": "U+E7E9", - "description": "Combining parentheses for round beaters (padded)" - }, - "pictBeaterDoubleBassDrumDown": { - "codepoint": "U+E7A1", - "description": "Double bass drum stick down" - }, - "pictBeaterDoubleBassDrumUp": { - "codepoint": "U+E7A0", - "description": "Double bass drum stick up" - }, - "pictBeaterFinger": { - "codepoint": "U+E7E4", - "description": "Finger" - }, - "pictBeaterFingernails": { - "codepoint": "U+E7E6", - "description": "Fingernails" - }, - "pictBeaterFist": { - "codepoint": "U+E7E5", - "description": "Fist" - }, - "pictBeaterGuiroScraper": { - "codepoint": "U+E7DD", - "description": "Guiro scraper" - }, - "pictBeaterHammer": { - "codepoint": "U+E7E1", - "description": "Hammer" - }, - "pictBeaterHammerMetalDown": { - "codepoint": "U+E7D0", - "description": "Metal hammer, down" - }, - "pictBeaterHammerMetalUp": { - "codepoint": "U+E7CF", - "description": "Metal hammer, up" - }, - "pictBeaterHammerPlasticDown": { - "codepoint": "U+E7CE", - "description": "Plastic hammer, down" - }, - "pictBeaterHammerPlasticUp": { - "codepoint": "U+E7CD", - "description": "Plastic hammer, up" - }, - "pictBeaterHammerWoodDown": { - "codepoint": "U+E7CC", - "description": "Wooden hammer, down" - }, - "pictBeaterHammerWoodUp": { - "codepoint": "U+E7CB", - "description": "Wooden hammer, up" - }, - "pictBeaterHand": { - "codepoint": "U+E7E3", - "description": "Hand" - }, - "pictBeaterHardBassDrumDown": { - "codepoint": "U+E79D", - "description": "Hard bass drum stick down" - }, - "pictBeaterHardBassDrumUp": { - "codepoint": "U+E79C", - "description": "Hard bass drum stick up" - }, - "pictBeaterHardGlockenspielDown": { - "codepoint": "U+E785", - "description": "Hard glockenspiel stick down" - }, - "pictBeaterHardGlockenspielLeft": { - "codepoint": "U+E787", - "description": "Hard glockenspiel stick left" - }, - "pictBeaterHardGlockenspielRight": { - "codepoint": "U+E786", - "description": "Hard glockenspiel stick right" - }, - "pictBeaterHardGlockenspielUp": { - "codepoint": "U+E784", - "description": "Hard glockenspiel stick up" - }, - "pictBeaterHardTimpaniDown": { - "codepoint": "U+E791", - "description": "Hard timpani stick down" - }, - "pictBeaterHardTimpaniLeft": { - "codepoint": "U+E793", - "description": "Hard timpani stick left" - }, - "pictBeaterHardTimpaniRight": { - "codepoint": "U+E792", - "description": "Hard timpani stick right" - }, - "pictBeaterHardTimpaniUp": { - "codepoint": "U+E790", - "description": "Hard timpani stick up" - }, - "pictBeaterHardXylophoneDown": { - "codepoint": "U+E779", - "description": "Hard xylophone stick down" - }, - "pictBeaterHardXylophoneLeft": { - "codepoint": "U+E77B", - "description": "Hard xylophone stick left" - }, - "pictBeaterHardXylophoneRight": { - "codepoint": "U+E77A", - "description": "Hard xylophone stick right" - }, - "pictBeaterHardXylophoneUp": { - "codepoint": "U+E778", - "description": "Hard xylophone stick up" - }, - "pictBeaterHardYarnDown": { - "codepoint": "U+E7AB", - "description": "Hard yarn beater down" - }, - "pictBeaterHardYarnLeft": { - "codepoint": "U+E7AD", - "description": "Hard yarn beater left" - }, - "pictBeaterHardYarnRight": { - "codepoint": "U+E7AC", - "description": "Hard yarn beater right" - }, - "pictBeaterHardYarnUp": { - "codepoint": "U+E7AA", - "description": "Hard yarn beater up" - }, - "pictBeaterJazzSticksDown": { - "codepoint": "U+E7D4", - "description": "Jazz sticks down" - }, - "pictBeaterJazzSticksUp": { - "codepoint": "U+E7D3", - "description": "Jazz sticks up" - }, - "pictBeaterKnittingNeedle": { - "codepoint": "U+E7E2", - "description": "Knitting needle" - }, - "pictBeaterMallet": { - "codepoint": "U+E7DF", - "description": "Chime hammer up" - }, - "pictBeaterMalletDown": { - "codepoint": "U+E7EC", - "description": "Chime hammer down" - }, - "pictBeaterMediumBassDrumDown": { - "codepoint": "U+E79B", - "description": "Medium bass drum stick down" - }, - "pictBeaterMediumBassDrumUp": { - "codepoint": "U+E79A", - "description": "Medium bass drum stick up" - }, - "pictBeaterMediumTimpaniDown": { - "codepoint": "U+E78D", - "description": "Medium timpani stick down" - }, - "pictBeaterMediumTimpaniLeft": { - "codepoint": "U+E78F", - "description": "Medium timpani stick left" - }, - "pictBeaterMediumTimpaniRight": { - "codepoint": "U+E78E", - "description": "Medium timpani stick right" - }, - "pictBeaterMediumTimpaniUp": { - "codepoint": "U+E78C", - "description": "Medium timpani stick up" - }, - "pictBeaterMediumXylophoneDown": { - "codepoint": "U+E775", - "description": "Medium xylophone stick down" - }, - "pictBeaterMediumXylophoneLeft": { - "codepoint": "U+E777", - "description": "Medium xylophone stick left" - }, - "pictBeaterMediumXylophoneRight": { - "codepoint": "U+E776", - "description": "Medium xylophone stick right" - }, - "pictBeaterMediumXylophoneUp": { - "codepoint": "U+E774", - "description": "Medium xylophone stick up" - }, - "pictBeaterMediumYarnDown": { - "codepoint": "U+E7A7", - "description": "Medium yarn beater down" - }, - "pictBeaterMediumYarnLeft": { - "codepoint": "U+E7A9", - "description": "Medium yarn beater left" - }, - "pictBeaterMediumYarnRight": { - "codepoint": "U+E7A8", - "description": "Medium yarn beater right" - }, - "pictBeaterMediumYarnUp": { - "codepoint": "U+E7A6", - "description": "Medium yarn beater up" - }, - "pictBeaterMetalBassDrumDown": { - "codepoint": "U+E79F", - "description": "Metal bass drum stick down" - }, - "pictBeaterMetalBassDrumUp": { - "codepoint": "U+E79E", - "description": "Metal bass drum stick up" - }, - "pictBeaterMetalDown": { - "codepoint": "U+E7C8", - "description": "Metal beater down" - }, - "pictBeaterMetalHammer": { - "codepoint": "U+E7E0", - "description": "Metal hammer" - }, - "pictBeaterMetalLeft": { - "codepoint": "U+E7CA", - "description": "Metal beater, left" - }, - "pictBeaterMetalRight": { - "codepoint": "U+E7C9", - "description": "Metal beater, right" - }, - "pictBeaterMetalUp": { - "codepoint": "U+E7C7", - "description": "Metal beater, up" - }, - "pictBeaterSnareSticksDown": { - "codepoint": "U+E7D2", - "description": "Snare sticks down" - }, - "pictBeaterSnareSticksUp": { - "codepoint": "U+E7D1", - "description": "Snare sticks up" - }, - "pictBeaterSoftBassDrumDown": { - "codepoint": "U+E799", - "description": "Soft bass drum stick down" - }, - "pictBeaterSoftBassDrumUp": { - "codepoint": "U+E798", - "description": "Soft bass drum stick up" - }, - "pictBeaterSoftGlockenspielDown": { - "codepoint": "U+E781", - "description": "Soft glockenspiel stick down" - }, - "pictBeaterSoftGlockenspielLeft": { - "codepoint": "U+E783", - "description": "Soft glockenspiel stick left" - }, - "pictBeaterSoftGlockenspielRight": { - "codepoint": "U+E782", - "description": "Soft glockenspiel stick right" - }, - "pictBeaterSoftGlockenspielUp": { - "codepoint": "U+E780", - "description": "Soft glockenspiel stick up" - }, - "pictBeaterSoftTimpaniDown": { - "codepoint": "U+E789", - "description": "Soft timpani stick down" - }, - "pictBeaterSoftTimpaniLeft": { - "codepoint": "U+E78B", - "description": "Soft timpani stick left" - }, - "pictBeaterSoftTimpaniRight": { - "codepoint": "U+E78A", - "description": "Soft timpani stick right" - }, - "pictBeaterSoftTimpaniUp": { - "codepoint": "U+E788", - "description": "Soft timpani stick up" - }, - "pictBeaterSoftXylophone": { - "codepoint": "U+E7DB", - "description": "Soft xylophone beaters" - }, - "pictBeaterSoftXylophoneDown": { - "codepoint": "U+E771", - "description": "Soft xylophone stick down" - }, - "pictBeaterSoftXylophoneLeft": { - "codepoint": "U+E773", - "description": "Soft xylophone stick left" - }, - "pictBeaterSoftXylophoneRight": { - "codepoint": "U+E772", - "description": "Soft xylophone stick right" - }, - "pictBeaterSoftXylophoneUp": { - "codepoint": "U+E770", - "description": "Soft xylophone stick up" - }, - "pictBeaterSoftYarnDown": { - "codepoint": "U+E7A3", - "description": "Soft yarn beater down" - }, - "pictBeaterSoftYarnLeft": { - "codepoint": "U+E7A5", - "description": "Soft yarn beater left" - }, - "pictBeaterSoftYarnRight": { - "codepoint": "U+E7A4", - "description": "Soft yarn beater right" - }, - "pictBeaterSoftYarnUp": { - "codepoint": "U+E7A2", - "description": "Soft yarn beater up" - }, - "pictBeaterSpoonWoodenMallet": { - "codepoint": "U+E7DC", - "description": "Spoon-shaped wooden mallet" - }, - "pictBeaterSuperballDown": { - "codepoint": "U+E7AF", - "description": "Superball beater down" - }, - "pictBeaterSuperballLeft": { - "codepoint": "U+E7B1", - "description": "Superball beater left" - }, - "pictBeaterSuperballRight": { - "codepoint": "U+E7B0", - "description": "Superball beater right" - }, - "pictBeaterSuperballUp": { - "codepoint": "U+E7AE", - "description": "Superball beater up" - }, - "pictBeaterTriangleDown": { - "codepoint": "U+E7D6", - "description": "Triangle beater down" - }, - "pictBeaterTrianglePlain": { - "codepoint": "U+E7EF", - "description": "Triangle beater plain" - }, - "pictBeaterTriangleUp": { - "codepoint": "U+E7D5", - "description": "Triangle beater up" - }, - "pictBeaterWireBrushesDown": { - "codepoint": "U+E7D8", - "description": "Wire brushes down" - }, - "pictBeaterWireBrushesUp": { - "codepoint": "U+E7D7", - "description": "Wire brushes up" - }, - "pictBeaterWoodTimpaniDown": { - "codepoint": "U+E795", - "description": "Wood timpani stick down" - }, - "pictBeaterWoodTimpaniLeft": { - "codepoint": "U+E797", - "description": "Wood timpani stick left" - }, - "pictBeaterWoodTimpaniRight": { - "codepoint": "U+E796", - "description": "Wood timpani stick right" - }, - "pictBeaterWoodTimpaniUp": { - "codepoint": "U+E794", - "description": "Wood timpani stick up" - }, - "pictBeaterWoodXylophoneDown": { - "codepoint": "U+E77D", - "description": "Wood xylophone stick down" - }, - "pictBeaterWoodXylophoneLeft": { - "codepoint": "U+E77F", - "description": "Wood xylophone stick left" - }, - "pictBeaterWoodXylophoneRight": { - "codepoint": "U+E77E", - "description": "Wood xylophone stick right" - }, - "pictBeaterWoodXylophoneUp": { - "codepoint": "U+E77C", - "description": "Wood xylophone stick up" - }, - "pictBell": { - "codepoint": "U+E714", - "description": "Bell" - }, - "pictBellOfCymbal": { - "codepoint": "U+E72A", - "description": "Bell of cymbal" - }, - "pictBellPlate": { - "codepoint": "U+E713", - "description": "Bell plate" - }, - "pictBellTree": { - "codepoint": "U+E71A", - "description": "Bell tree" - }, - "pictBirdWhistle": { - "codepoint": "U+E751", - "description": "Bird whistle" - }, - "pictBoardClapper": { - "codepoint": "U+E6F7", - "description": "Board clapper" - }, - "pictBongos": { - "codepoint": "U+E6DD", - "description": "Bongos" - }, - "pictBrakeDrum": { - "codepoint": "U+E6E1", - "description": "Brake drum" - }, - "pictCabasa": { - "codepoint": "U+E743", - "description": "Cabasa" - }, - "pictCannon": { - "codepoint": "U+E761", - "description": "Cannon" - }, - "pictCarHorn": { - "codepoint": "U+E755", - "description": "Car horn" - }, - "pictCastanets": { - "codepoint": "U+E6F8", - "description": "Castanets" - }, - "pictCastanetsWithHandle": { - "codepoint": "U+E6F9", - "description": "Castanets with handle" - }, - "pictCelesta": { - "codepoint": "U+E6B0", - "description": "Celesta" - }, - "pictCencerro": { - "codepoint": "U+E716", - "description": "Cencerro" - }, - "pictCenter1": { - "codepoint": "U+E7FE", - "description": "Center (Weinberg)" - }, - "pictCenter2": { - "codepoint": "U+E7FF", - "description": "Center (Ghent)" - }, - "pictCenter3": { - "codepoint": "U+E800", - "description": "Center (Caltabiano)" - }, - "pictChainRattle": { - "codepoint": "U+E748", - "description": "Chain rattle" - }, - "pictChimes": { - "codepoint": "U+E6C2", - "description": "Chimes" - }, - "pictChineseCymbal": { - "codepoint": "U+E726", - "description": "Chinese cymbal" - }, - "pictChokeCymbal": { - "codepoint": "U+E805", - "description": "Choke (Weinberg)" - }, - "pictClaves": { - "codepoint": "U+E6F2", - "description": "Claves" - }, - "pictCoins": { - "codepoint": "U+E7E7", - "description": "Coins" - }, - "pictConga": { - "codepoint": "U+E6DE", - "description": "Conga" - }, - "pictCowBell": { - "codepoint": "U+E711", - "description": "Cow bell" - }, - "pictCrashCymbals": { - "codepoint": "U+E720", - "description": "Crash cymbals" - }, - "pictCrotales": { - "codepoint": "U+E6AE", - "description": "Crotales" - }, - "pictCrushStem": { - "codepoint": "U+E80C", - "description": "Combining crush for stem" - }, - "pictCuica": { - "codepoint": "U+E6E4", - "description": "Cuica" - }, - "pictCymbalTongs": { - "codepoint": "U+E728", - "description": "Cymbal tongs" - }, - "pictDamp1": { - "codepoint": "U+E7F9", - "description": "Damp" - }, - "pictDamp2": { - "codepoint": "U+E7FA", - "description": "Damp 2" - }, - "pictDamp3": { - "codepoint": "U+E7FB", - "description": "Damp 3" - }, - "pictDamp4": { - "codepoint": "U+E7FC", - "description": "Damp 4" - }, - "pictDeadNoteStem": { - "codepoint": "U+E80D", - "description": "Combining X for stem (dead note)" - }, - "pictDrumStick": { - "codepoint": "U+E7E8", - "description": "Drum stick" - }, - "pictDuckCall": { - "codepoint": "U+E757", - "description": "Duck call" - }, - "pictEdgeOfCymbal": { - "codepoint": "U+E729", - "description": "Edge of cymbal" - }, - "pictEmptyTrap": { - "codepoint": "U+E6A9", - "description": "Empty trapezoid" - }, - "pictFingerCymbals": { - "codepoint": "U+E727", - "description": "Finger cymbals" - }, - "pictFlexatone": { - "codepoint": "U+E740", - "description": "Flexatone" - }, - "pictFootballRatchet": { - "codepoint": "U+E6F5", - "description": "Football rattle" - }, - "pictGlassHarmonica": { - "codepoint": "U+E765", - "description": "Glass harmonica" - }, - "pictGlassHarp": { - "codepoint": "U+E764", - "description": "Glass harp" - }, - "pictGlassPlateChimes": { - "codepoint": "U+E6C6", - "description": "Glass plate chimes" - }, - "pictGlassTubeChimes": { - "codepoint": "U+E6C5", - "description": "Glass tube chimes" - }, - "pictGlsp": { - "codepoint": "U+E6A0", - "description": "Glockenspiel" - }, - "pictGlspSmithBrindle": { - "codepoint": "U+E6AA", - "description": "Glockenspiel (Smith Brindle)" - }, - "pictGobletDrum": { - "codepoint": "U+E6E2", - "description": "Goblet drum (djembe, dumbek)" - }, - "pictGong": { - "codepoint": "U+E732", - "description": "Gong" - }, - "pictGongWithButton": { - "codepoint": "U+E733", - "description": "Gong with button (nipple)" - }, - "pictGuiro": { - "codepoint": "U+E6F3", - "description": "Guiro" - }, - "pictGumHardDown": { - "codepoint": "U+E7C4", - "description": "Hard gum beater, down" - }, - "pictGumHardLeft": { - "codepoint": "U+E7C6", - "description": "Hard gum beater, left" - }, - "pictGumHardRight": { - "codepoint": "U+E7C5", - "description": "Hard gum beater, right" - }, - "pictGumHardUp": { - "codepoint": "U+E7C3", - "description": "Hard gum beater, up" - }, - "pictGumMediumDown": { - "codepoint": "U+E7C0", - "description": "Medium gum beater, down" - }, - "pictGumMediumLeft": { - "codepoint": "U+E7C2", - "description": "Medium gum beater, left" - }, - "pictGumMediumRight": { - "codepoint": "U+E7C1", - "description": "Medium gum beater, right" - }, - "pictGumMediumUp": { - "codepoint": "U+E7BF", - "description": "Medium gum beater, up" - }, - "pictGumSoftDown": { - "codepoint": "U+E7BC", - "description": "Soft gum beater, down" - }, - "pictGumSoftLeft": { - "codepoint": "U+E7BE", - "description": "Soft gum beater, left" - }, - "pictGumSoftRight": { - "codepoint": "U+E7BD", - "description": "Soft gum beater, right" - }, - "pictGumSoftUp": { - "codepoint": "U+E7BB", - "description": "Soft gum beater, up" - }, - "pictHalfOpen1": { - "codepoint": "U+E7F6", - "description": "Half-open" - }, - "pictHalfOpen2": { - "codepoint": "U+E7F7", - "description": "Half-open 2 (Weinberg)" - }, - "pictHandbell": { - "codepoint": "U+E715", - "description": "Handbell" - }, - "pictHiHat": { - "codepoint": "U+E722", - "description": "Hi-hat" - }, - "pictHiHatOnStand": { - "codepoint": "U+E723", - "description": "Hi-hat cymbals on stand" - }, - "pictJawHarp": { - "codepoint": "U+E767", - "description": "Jaw harp" - }, - "pictJingleBells": { - "codepoint": "U+E719", - "description": "Jingle bells" - }, - "pictKlaxonHorn": { - "codepoint": "U+E756", - "description": "Klaxon horn" - }, - "pictLeftHandCircle": { - "codepoint": "U+E807", - "description": "Right hand (Agostini)" - }, - "pictLionsRoar": { - "codepoint": "U+E763", - "description": "Lion's roar" - }, - "pictLithophone": { - "codepoint": "U+E6B1", - "description": "Lithophone" - }, - "pictLogDrum": { - "codepoint": "U+E6DF", - "description": "Log drum" - }, - "pictLotusFlute": { - "codepoint": "U+E75A", - "description": "Lotus flute" - }, - "pictMar": { - "codepoint": "U+E6A6", - "description": "Marimba" - }, - "pictMarSmithBrindle": { - "codepoint": "U+E6AC", - "description": "Marimba (Smith Brindle)" - }, - "pictMaraca": { - "codepoint": "U+E741", - "description": "Maraca" - }, - "pictMaracas": { - "codepoint": "U+E742", - "description": "Maracas" - }, - "pictMegaphone": { - "codepoint": "U+E759", - "description": "Megaphone" - }, - "pictMetalPlateChimes": { - "codepoint": "U+E6C8", - "description": "Metal plate chimes" - }, - "pictMetalTubeChimes": { - "codepoint": "U+E6C7", - "description": "Metal tube chimes" - }, - "pictMusicalSaw": { - "codepoint": "U+E766", - "description": "Musical saw" - }, - "pictNormalPosition": { - "codepoint": "U+E804", - "description": "Normal position (Caltabiano)" - }, - "pictOnRim": { - "codepoint": "U+E7F4", - "description": "On rim" - }, - "pictOpen": { - "codepoint": "U+E7F8", - "description": "Open" - }, - "pictOpenRimShot": { - "codepoint": "U+E7F5", - "description": "Closed / rim shot" - }, - "pictPistolShot": { - "codepoint": "U+E760", - "description": "Pistol shot" - }, - "pictPoliceWhistle": { - "codepoint": "U+E752", - "description": "Police whistle" - }, - "pictQuijada": { - "codepoint": "U+E6FA", - "description": "Quijada (jawbone)" - }, - "pictRainstick": { - "codepoint": "U+E747", - "description": "Rainstick" - }, - "pictRatchet": { - "codepoint": "U+E6F4", - "description": "Ratchet" - }, - "pictRecoReco": { - "codepoint": "U+E6FC", - "description": "Reco-reco" - }, - "pictRightHandSquare": { - "codepoint": "U+E806", - "description": "Left hand (Agostini)" - }, - "pictRim1": { - "codepoint": "U+E801", - "description": "Rim or edge (Weinberg)" - }, - "pictRim2": { - "codepoint": "U+E802", - "description": "Rim (Ghent)" - }, - "pictRim3": { - "codepoint": "U+E803", - "description": "Rim (Caltabiano)" - }, - "pictRimShotOnStem": { - "codepoint": "U+E7FD", - "description": "Rim shot for stem" - }, - "pictSandpaperBlocks": { - "codepoint": "U+E762", - "description": "Sandpaper blocks" - }, - "pictScrapeAroundRim": { - "codepoint": "U+E7F3", - "description": "Scrape around rim (counter-clockwise)" - }, - "pictScrapeAroundRimClockwise": { - "codepoint": "U+E80E", - "description": "Scrape around rim (clockwise)" - }, - "pictScrapeCenterToEdge": { - "codepoint": "U+E7F1", - "description": "Scrape from center to edge" - }, - "pictScrapeEdgeToCenter": { - "codepoint": "U+E7F2", - "description": "Scrape from edge to center" - }, - "pictShellBells": { - "codepoint": "U+E718", - "description": "Shell bells" - }, - "pictShellChimes": { - "codepoint": "U+E6C4", - "description": "Shell chimes" - }, - "pictSiren": { - "codepoint": "U+E753", - "description": "Siren" - }, - "pictSistrum": { - "codepoint": "U+E746", - "description": "Sistrum" - }, - "pictSizzleCymbal": { - "codepoint": "U+E724", - "description": "Sizzle cymbal" - }, - "pictSleighBell": { - "codepoint": "U+E710", - "description": "Sleigh bell" - }, - "pictSlideBrushOnGong": { - "codepoint": "U+E734", - "description": "Slide brush on gong" - }, - "pictSlideWhistle": { - "codepoint": "U+E750", - "description": "Slide whistle" - }, - "pictSlitDrum": { - "codepoint": "U+E6E0", - "description": "Slit drum" - }, - "pictSnareDrum": { - "codepoint": "U+E6D1", - "description": "Snare drum" - }, - "pictSnareDrumMilitary": { - "codepoint": "U+E6D3", - "description": "Military snare drum" - }, - "pictSnareDrumSnaresOff": { - "codepoint": "U+E6D2", - "description": "Snare drum, snares off" - }, - "pictSteelDrums": { - "codepoint": "U+E6AF", - "description": "Steel drums" - }, - "pictStickShot": { - "codepoint": "U+E7F0", - "description": "Stick shot" - }, - "pictSuperball": { - "codepoint": "U+E7B2", - "description": "Superball" - }, - "pictSuspendedCymbal": { - "codepoint": "U+E721", - "description": "Suspended cymbal" - }, - "pictSwishStem": { - "codepoint": "U+E808", - "description": "Combining swish for stem" - }, - "pictTabla": { - "codepoint": "U+E6E3", - "description": "Indian tabla" - }, - "pictTamTam": { - "codepoint": "U+E730", - "description": "Tam-tam" - }, - "pictTamTamWithBeater": { - "codepoint": "U+E731", - "description": "Tam-tam with beater (Smith Brindle)" - }, - "pictTambourine": { - "codepoint": "U+E6DB", - "description": "Tambourine" - }, - "pictTempleBlocks": { - "codepoint": "U+E6F1", - "description": "Temple blocks" - }, - "pictTenorDrum": { - "codepoint": "U+E6D6", - "description": "Tenor drum" - }, - "pictThundersheet": { - "codepoint": "U+E744", - "description": "Thundersheet" - }, - "pictTimbales": { - "codepoint": "U+E6DC", - "description": "Timbales" - }, - "pictTimpani": { - "codepoint": "U+E6D0", - "description": "Timpani" - }, - "pictTomTom": { - "codepoint": "U+E6D7", - "description": "Tom-tom" - }, - "pictTomTomChinese": { - "codepoint": "U+E6D8", - "description": "Chinese tom-tom" - }, - "pictTomTomIndoAmerican": { - "codepoint": "U+E6DA", - "description": "Indo-American tom tom" - }, - "pictTomTomJapanese": { - "codepoint": "U+E6D9", - "description": "Japanese tom-tom" - }, - "pictTriangle": { - "codepoint": "U+E700", - "description": "Triangle" - }, - "pictTubaphone": { - "codepoint": "U+E6B2", - "description": "Tubaphone" - }, - "pictTubularBells": { - "codepoint": "U+E6C0", - "description": "Tubular bells" - }, - "pictTurnLeftStem": { - "codepoint": "U+E80A", - "description": "Combining turn left for stem" - }, - "pictTurnRightLeftStem": { - "codepoint": "U+E80B", - "description": "Combining turn left or right for stem" - }, - "pictTurnRightStem": { - "codepoint": "U+E809", - "description": "Combining turn right for stem" - }, - "pictVib": { - "codepoint": "U+E6A7", - "description": "Vibraphone" - }, - "pictVibMotorOff": { - "codepoint": "U+E6A8", - "description": "Metallophone (vibraphone motor off)" - }, - "pictVibSmithBrindle": { - "codepoint": "U+E6AD", - "description": "Vibraphone (Smith Brindle)" - }, - "pictVibraslap": { - "codepoint": "U+E745", - "description": "Vibraslap" - }, - "pictVietnameseHat": { - "codepoint": "U+E725", - "description": "Vietnamese hat cymbal" - }, - "pictWhip": { - "codepoint": "U+E6F6", - "description": "Whip" - }, - "pictWindChimesGlass": { - "codepoint": "U+E6C1", - "description": "Wind chimes (glass)" - }, - "pictWindMachine": { - "codepoint": "U+E754", - "description": "Wind machine" - }, - "pictWindWhistle": { - "codepoint": "U+E758", - "description": "Wind whistle (or mouth siren)" - }, - "pictWoodBlock": { - "codepoint": "U+E6F0", - "description": "Wood block" - }, - "pictWoundHardDown": { - "codepoint": "U+E7B4", - "description": "Wound beater, hard core down" - }, - "pictWoundHardLeft": { - "codepoint": "U+E7B6", - "description": "Wound beater, hard core left" - }, - "pictWoundHardRight": { - "codepoint": "U+E7B5", - "description": "Wound beater, hard core right" - }, - "pictWoundHardUp": { - "codepoint": "U+E7B3", - "description": "Wound beater, hard core up" - }, - "pictWoundSoftDown": { - "codepoint": "U+E7B8", - "description": "Wound beater, soft core down" - }, - "pictWoundSoftLeft": { - "codepoint": "U+E7BA", - "description": "Wound beater, soft core left" - }, - "pictWoundSoftRight": { - "codepoint": "U+E7B9", - "description": "Wound beater, soft core right" - }, - "pictWoundSoftUp": { - "codepoint": "U+E7B7", - "description": "Wound beater, soft core up" - }, - "pictXyl": { - "codepoint": "U+E6A1", - "description": "Xylophone" - }, - "pictXylBass": { - "codepoint": "U+E6A3", - "description": "Bass xylophone" - }, - "pictXylSmithBrindle": { - "codepoint": "U+E6AB", - "description": "Xylophone (Smith Brindle)" - }, - "pictXylTenor": { - "codepoint": "U+E6A2", - "description": "Tenor xylophone" - }, - "pictXylTenorTrough": { - "codepoint": "U+E6A5", - "description": "Trough tenor xylophone" - }, - "pictXylTrough": { - "codepoint": "U+E6A4", - "description": "Trough xylophone" - }, - "pluckedBuzzPizzicato": { - "codepoint": "U+E632", - "description": "Buzz pizzicato" - }, - "pluckedDamp": { - "alternateCodepoint": "U+1D1B4", - "codepoint": "U+E638", - "description": "Damp" - }, - "pluckedDampAll": { - "alternateCodepoint": "U+1D1B5", - "codepoint": "U+E639", - "description": "Damp all" - }, - "pluckedDampOnStem": { - "codepoint": "U+E63B", - "description": "Damp for stem" - }, - "pluckedFingernailFlick": { - "codepoint": "U+E637", - "description": "Fingernail flick" - }, - "pluckedLeftHandPizzicato": { - "codepoint": "U+E633", - "description": "Left-hand pizzicato" - }, - "pluckedPlectrum": { - "codepoint": "U+E63A", - "description": "Plectrum" - }, - "pluckedSnapPizzicatoAbove": { - "codepoint": "U+E631", - "description": "Snap pizzicato above" - }, - "pluckedSnapPizzicatoBelow": { - "alternateCodepoint": "U+1D1AD", - "codepoint": "U+E630", - "description": "Snap pizzicato below" - }, - "pluckedWithFingernails": { - "alternateCodepoint": "U+1D1B3", - "codepoint": "U+E636", - "description": "With fingernails" - }, - "quindicesima": { - "codepoint": "U+E514", - "description": "Quindicesima" - }, - "quindicesimaAlta": { - "alternateCodepoint": "U+1D138", - "codepoint": "U+E515", - "description": "Quindicesima alta" - }, - "quindicesimaBassa": { - "alternateCodepoint": "U+1D139", - "codepoint": "U+E516", - "description": "Quindicesima bassa" - }, - "quindicesimaBassaMb": { - "codepoint": "U+E51D", - "description": "Quindicesima bassa (mb)" - }, - "repeat1Bar": { - "alternateCodepoint": "U+1D10E", - "codepoint": "U+E500", - "description": "Repeat last bar" - }, - "repeat2Bars": { - "alternateCodepoint": "U+1D10F", - "codepoint": "U+E501", - "description": "Repeat last two bars" - }, - "repeat4Bars": { - "codepoint": "U+E502", - "description": "Repeat last four bars" - }, - "repeatBarLowerDot": { - "codepoint": "U+E505", - "description": "Repeat bar lower dot" - }, - "repeatBarSlash": { - "codepoint": "U+E504", - "description": "Repeat bar slash" - }, - "repeatBarUpperDot": { - "codepoint": "U+E503", - "description": "Repeat bar upper dot" - }, - "repeatDot": { - "codepoint": "U+E044", - "description": "Single repeat dot" - }, - "repeatDots": { - "alternateCodepoint": "U+1D108", - "codepoint": "U+E043", - "description": "Repeat dots" - }, - "repeatLeft": { - "alternateCodepoint": "U+1D106", - "codepoint": "U+E040", - "description": "Left (start) repeat sign" - }, - "repeatRight": { - "alternateCodepoint": "U+1D107", - "codepoint": "U+E041", - "description": "Right (end) repeat sign" - }, - "repeatRightLeft": { - "codepoint": "U+E042", - "description": "Right and left repeat sign" - }, - "rest1024th": { - "codepoint": "U+E4ED", - "description": "1024th rest" - }, - "rest128th": { - "alternateCodepoint": "U+1D142", - "codepoint": "U+E4EA", - "description": "128th (semihemidemisemiquaver) rest" - }, - "rest16th": { - "alternateCodepoint": "U+1D13F", - "codepoint": "U+E4E7", - "description": "16th (semiquaver) rest" - }, - "rest256th": { - "codepoint": "U+E4EB", - "description": "256th rest" - }, - "rest32nd": { - "alternateCodepoint": "U+1D140", - "codepoint": "U+E4E8", - "description": "32nd (demisemiquaver) rest" - }, - "rest512th": { - "codepoint": "U+E4EC", - "description": "512th rest" - }, - "rest64th": { - "alternateCodepoint": "U+1D141", - "codepoint": "U+E4E9", - "description": "64th (hemidemisemiquaver) rest" - }, - "rest8th": { - "alternateCodepoint": "U+1D13E", - "codepoint": "U+E4E6", - "description": "Eighth (quaver) rest" - }, - "restDoubleWhole": { - "alternateCodepoint": "U+1D13A", - "codepoint": "U+E4E2", - "description": "Double whole (breve) rest" - }, - "restDoubleWholeLegerLine": { - "codepoint": "U+E4F3", - "description": "Double whole rest on leger lines" - }, - "restHBar": { - "alternateCodepoint": "U+1D129", - "codepoint": "U+E4EE", - "description": "Multiple measure rest" - }, - "restHBarLeft": { - "codepoint": "U+E4EF", - "description": "H-bar, left half" - }, - "restHBarMiddle": { - "codepoint": "U+E4F0", - "description": "H-bar, middle" - }, - "restHBarRight": { - "codepoint": "U+E4F1", - "description": "H-bar, right half" - }, - "restHalf": { - "alternateCodepoint": "U+1D13C", - "codepoint": "U+E4E4", - "description": "Half (minim) rest" - }, - "restHalfLegerLine": { - "codepoint": "U+E4F5", - "description": "Half rest on leger line" - }, - "restLonga": { - "codepoint": "U+E4E1", - "description": "Longa rest" - }, - "restMaxima": { - "codepoint": "U+E4E0", - "description": "Maxima rest" - }, - "restQuarter": { - "alternateCodepoint": "U+1D13D", - "codepoint": "U+E4E5", - "description": "Quarter (crotchet) rest" - }, - "restQuarterOld": { - "codepoint": "U+E4F2", - "description": "Old-style quarter (crotchet) rest" - }, - "restQuarterZ": { - "codepoint": "U+E4F6", - "description": "Z-style quarter (crotchet) rest" - }, - "restWhole": { - "alternateCodepoint": "U+1D13B", - "codepoint": "U+E4E3", - "description": "Whole (semibreve) rest" - }, - "restWholeLegerLine": { - "codepoint": "U+E4F4", - "description": "Whole rest on leger line" - }, - "reversedBrace": { - "codepoint": "U+E001", - "description": "Reversed brace" - }, - "reversedBracketBottom": { - "codepoint": "U+E006", - "description": "Reversed bracket bottom" - }, - "reversedBracketTop": { - "codepoint": "U+E005", - "description": "Reversed bracket top" - }, - "rightRepeatSmall": { - "codepoint": "U+E04D", - "description": "Right repeat sign within bar" - }, - "schaefferClef": { - "codepoint": "U+E06F", - "description": "Sch\u00e4ffer clef" - }, - "schaefferFClefToGClef": { - "codepoint": "U+E072", - "description": "Sch\u00e4ffer F clef to G clef change" - }, - "schaefferGClefToFClef": { - "codepoint": "U+E071", - "description": "Sch\u00e4ffer G clef to F clef change" - }, - "schaefferPreviousClef": { - "codepoint": "U+E070", - "description": "Sch\u00e4ffer previous clef" - }, - "segno": { - "alternateCodepoint": "U+1D10B", - "codepoint": "U+E047", - "description": "Segno" - }, - "segnoSerpent1": { - "codepoint": "U+E04A", - "description": "Segno (serpent)" - }, - "segnoSerpent2": { - "codepoint": "U+E04B", - "description": "Segno (serpent with vertical lines)" - }, - "semipitchedPercussionClef1": { - "codepoint": "U+E06B", - "description": "Semi-pitched percussion clef 1" - }, - "semipitchedPercussionClef2": { - "codepoint": "U+E06C", - "description": "Semi-pitched percussion clef 2" - }, - "smnFlat": { - "codepoint": "U+EC52", - "description": "Flat" - }, - "smnFlatWhite": { - "codepoint": "U+EC53", - "description": "Flat (white)" - }, - "smnHistoryDoubleFlat": { - "codepoint": "U+EC57", - "description": "Double flat history sign" - }, - "smnHistoryDoubleSharp": { - "codepoint": "U+EC55", - "description": "Double sharp history sign" - }, - "smnHistoryFlat": { - "codepoint": "U+EC56", - "description": "Flat history sign" - }, - "smnHistorySharp": { - "codepoint": "U+EC54", - "description": "Sharp history sign" - }, - "smnNatural": { - "codepoint": "U+EC58", - "description": "Natural (N)" - }, - "smnSharp": { - "codepoint": "U+EC50", - "description": "Sharp stem up" - }, - "smnSharpDown": { - "codepoint": "U+EC59", - "description": "Sharp stem down" - }, - "smnSharpWhite": { - "codepoint": "U+EC51", - "description": "Sharp (white) stem up" - }, - "smnSharpWhiteDown": { - "codepoint": "U+EC5A", - "description": "Sharp (white) stem down" - }, - "splitBarDivider": { - "codepoint": "U+E00A", - "description": "Split bar divider (bar spans a system break)" - }, - "staff1Line": { - "alternateCodepoint": "U+1D116", - "codepoint": "U+E010", - "description": "1-line staff" - }, - "staff1LineNarrow": { - "codepoint": "U+E01C", - "description": "1-line staff (narrow)" - }, - "staff1LineWide": { - "codepoint": "U+E016", - "description": "1-line staff (wide)" - }, - "staff2Lines": { - "alternateCodepoint": "U+1D117", - "codepoint": "U+E011", - "description": "2-line staff" - }, - "staff2LinesNarrow": { - "codepoint": "U+E01D", - "description": "2-line staff (narrow)" - }, - "staff2LinesWide": { - "codepoint": "U+E017", - "description": "2-line staff (wide)" - }, - "staff3Lines": { - "alternateCodepoint": "U+1D118", - "codepoint": "U+E012", - "description": "3-line staff" - }, - "staff3LinesNarrow": { - "codepoint": "U+E01E", - "description": "3-line staff (narrow)" - }, - "staff3LinesWide": { - "codepoint": "U+E018", - "description": "3-line staff (wide)" - }, - "staff4Lines": { - "alternateCodepoint": "U+1D119", - "codepoint": "U+E013", - "description": "4-line staff" - }, - "staff4LinesNarrow": { - "codepoint": "U+E01F", - "description": "4-line staff (narrow)" - }, - "staff4LinesWide": { - "codepoint": "U+E019", - "description": "4-line staff (wide)" - }, - "staff5Lines": { - "alternateCodepoint": "U+1D11A", - "codepoint": "U+E014", - "description": "5-line staff" - }, - "staff5LinesNarrow": { - "codepoint": "U+E020", - "description": "5-line staff (narrow)" - }, - "staff5LinesWide": { - "codepoint": "U+E01A", - "description": "5-line staff (wide)" - }, - "staff6Lines": { - "alternateCodepoint": "U+1D11B", - "codepoint": "U+E015", - "description": "6-line staff" - }, - "staff6LinesNarrow": { - "codepoint": "U+E021", - "description": "6-line staff (narrow)" - }, - "staff6LinesWide": { - "codepoint": "U+E01B", - "description": "6-line staff (wide)" - }, - "staffDivideArrowDown": { - "codepoint": "U+E00B", - "description": "Staff divide arrow down" - }, - "staffDivideArrowUp": { - "codepoint": "U+E00C", - "description": "Staff divide arrow up" - }, - "staffDivideArrowUpDown": { - "codepoint": "U+E00D", - "description": "Staff divide arrows" - }, - "staffPosLower1": { - "codepoint": "U+EB98", - "description": "Lower 1 staff position" - }, - "staffPosLower2": { - "codepoint": "U+EB99", - "description": "Lower 2 staff positions" - }, - "staffPosLower3": { - "codepoint": "U+EB9A", - "description": "Lower 3 staff positions" - }, - "staffPosLower4": { - "codepoint": "U+EB9B", - "description": "Lower 4 staff positions" - }, - "staffPosLower5": { - "codepoint": "U+EB9C", - "description": "Lower 5 staff positions" - }, - "staffPosLower6": { - "codepoint": "U+EB9D", - "description": "Lower 6 staff positions" - }, - "staffPosLower7": { - "codepoint": "U+EB9E", - "description": "Lower 7 staff positions" - }, - "staffPosLower8": { - "codepoint": "U+EB9F", - "description": "Lower 8 staff positions" - }, - "staffPosRaise1": { - "codepoint": "U+EB90", - "description": "Raise 1 staff position" - }, - "staffPosRaise2": { - "codepoint": "U+EB91", - "description": "Raise 2 staff positions" - }, - "staffPosRaise3": { - "codepoint": "U+EB92", - "description": "Raise 3 staff positions" - }, - "staffPosRaise4": { - "codepoint": "U+EB93", - "description": "Raise 4 staff positions" - }, - "staffPosRaise5": { - "codepoint": "U+EB94", - "description": "Raise 5 staff positions" - }, - "staffPosRaise6": { - "codepoint": "U+EB95", - "description": "Raise 6 staff positions" - }, - "staffPosRaise7": { - "codepoint": "U+EB96", - "description": "Raise 7 staff positions" - }, - "staffPosRaise8": { - "codepoint": "U+EB97", - "description": "Raise 8 staff positions" - }, - "stem": { - "alternateCodepoint": "U+1D165", - "codepoint": "U+E210", - "description": "Combining stem" - }, - "stemBowOnBridge": { - "codepoint": "U+E215", - "description": "Combining bow on bridge stem" - }, - "stemBowOnTailpiece": { - "codepoint": "U+E216", - "description": "Combining bow on tailpiece stem" - }, - "stemBuzzRoll": { - "codepoint": "U+E217", - "description": "Combining buzz roll stem" - }, - "stemDamp": { - "codepoint": "U+E218", - "description": "Combining damp stem" - }, - "stemHarpStringNoise": { - "codepoint": "U+E21F", - "description": "Combining harp string noise stem" - }, - "stemMultiphonicsBlack": { - "codepoint": "U+E21A", - "description": "Combining multiphonics (black) stem" - }, - "stemMultiphonicsBlackWhite": { - "codepoint": "U+E21C", - "description": "Combining multiphonics (black and white) stem" - }, - "stemMultiphonicsWhite": { - "codepoint": "U+E21B", - "description": "Combining multiphonics (white) stem" - }, - "stemPendereckiTremolo": { - "codepoint": "U+E213", - "description": "Combining Penderecki unmeasured tremolo stem" - }, - "stemRimShot": { - "codepoint": "U+E21E", - "description": "Combining rim shot stem" - }, - "stemSprechgesang": { - "alternateCodepoint": "U+1D166", - "codepoint": "U+E211", - "description": "Combining sprechgesang stem" - }, - "stemSulPonticello": { - "codepoint": "U+E214", - "description": "Combining sul ponticello (bow behind bridge) stem" - }, - "stemSussurando": { - "codepoint": "U+E21D", - "description": "Combining sussurando stem" - }, - "stemSwished": { - "codepoint": "U+E212", - "description": "Combining swished stem" - }, - "stemVibratoPulse": { - "codepoint": "U+E219", - "description": "Combining vibrato pulse accent (Saunders) stem" - }, - "stockhausenTremolo": { - "codepoint": "U+E232", - "description": "Stockhausen irregular tremolo (\"Morsen\", like Morse code)" - }, - "stringsBowBehindBridge": { - "codepoint": "U+E618", - "description": "Bow behind bridge (sul ponticello)" - }, - "stringsBowBehindBridgeFourStrings": { - "codepoint": "U+E62A", - "description": "Bow behind bridge on four strings" - }, - "stringsBowBehindBridgeOneString": { - "codepoint": "U+E627", - "description": "Bow behind bridge on one string" - }, - "stringsBowBehindBridgeThreeStrings": { - "codepoint": "U+E629", - "description": "Bow behind bridge on three strings" - }, - "stringsBowBehindBridgeTwoStrings": { - "codepoint": "U+E628", - "description": "Bow behind bridge on two strings" - }, - "stringsBowOnBridge": { - "codepoint": "U+E619", - "description": "Bow on top of bridge" - }, - "stringsBowOnTailpiece": { - "codepoint": "U+E61A", - "description": "Bow on tailpiece" - }, - "stringsChangeBowDirection": { - "codepoint": "U+E626", - "description": "Change bow direction, indeterminate" - }, - "stringsDownBow": { - "alternateCodepoint": "U+1D1AA", - "codepoint": "U+E610", - "description": "Down bow" - }, - "stringsDownBowTurned": { - "codepoint": "U+E611", - "description": "Turned down bow" - }, - "stringsFouette": { - "codepoint": "U+E622", - "description": "Fouett\u00e9" - }, - "stringsHalfHarmonic": { - "codepoint": "U+E615", - "description": "Half-harmonic" - }, - "stringsHarmonic": { - "alternateCodepoint": "U+1D1AC", - "codepoint": "U+E614", - "description": "Harmonic" - }, - "stringsJeteAbove": { - "codepoint": "U+E620", - "description": "Jet\u00e9 (gettato) above" - }, - "stringsJeteBelow": { - "codepoint": "U+E621", - "description": "Jet\u00e9 (gettato) below" - }, - "stringsMuteOff": { - "codepoint": "U+E617", - "description": "Mute off" - }, - "stringsMuteOn": { - "codepoint": "U+E616", - "description": "Mute on" - }, - "stringsOverpressureDownBow": { - "codepoint": "U+E61B", - "description": "Overpressure, down bow" - }, - "stringsOverpressureNoDirection": { - "codepoint": "U+E61F", - "description": "Overpressure, no bow direction" - }, - "stringsOverpressurePossibileDownBow": { - "codepoint": "U+E61D", - "description": "Overpressure possibile, down bow" - }, - "stringsOverpressurePossibileUpBow": { - "codepoint": "U+E61E", - "description": "Overpressure possibile, up bow" - }, - "stringsOverpressureUpBow": { - "codepoint": "U+E61C", - "description": "Overpressure, up bow" - }, - "stringsThumbPosition": { - "codepoint": "U+E624", - "description": "Thumb position" - }, - "stringsThumbPositionTurned": { - "codepoint": "U+E625", - "description": "Turned thumb position" - }, - "stringsUpBow": { - "alternateCodepoint": "U+1D1AB", - "codepoint": "U+E612", - "description": "Up bow" - }, - "stringsUpBowTurned": { - "codepoint": "U+E613", - "description": "Turned up bow" - }, - "stringsVibratoPulse": { - "codepoint": "U+E623", - "description": "Vibrato pulse accent (Saunders) for stem" - }, - "systemDivider": { - "codepoint": "U+E007", - "description": "System divider" - }, - "systemDividerExtraLong": { - "codepoint": "U+E009", - "description": "Extra long system divider" - }, - "systemDividerLong": { - "codepoint": "U+E008", - "description": "Long system divider" - }, - "textAugmentationDot": { - "codepoint": "U+E1FC", - "description": "Augmentation dot" - }, - "textBlackNoteFrac16thLongStem": { - "codepoint": "U+E1F5", - "description": "Black note, fractional 16th beam, long stem" - }, - "textBlackNoteFrac16thShortStem": { - "codepoint": "U+E1F4", - "description": "Black note, fractional 16th beam, short stem" - }, - "textBlackNoteFrac32ndLongStem": { - "codepoint": "U+E1F6", - "description": "Black note, fractional 32nd beam, long stem" - }, - "textBlackNoteFrac8thLongStem": { - "codepoint": "U+E1F3", - "description": "Black note, fractional 8th beam, long stem" - }, - "textBlackNoteFrac8thShortStem": { - "codepoint": "U+E1F2", - "description": "Black note, fractional 8th beam, short stem" - }, - "textBlackNoteLongStem": { - "codepoint": "U+E1F1", - "description": "Black note, long stem" - }, - "textBlackNoteShortStem": { - "codepoint": "U+E1F0", - "description": "Black note, short stem" - }, - "textCont16thBeamLongStem": { - "codepoint": "U+E1FA", - "description": "Continuing 16th beam for long stem" - }, - "textCont16thBeamShortStem": { - "codepoint": "U+E1F9", - "description": "Continuing 16th beam for short stem" - }, - "textCont32ndBeamLongStem": { - "codepoint": "U+E1FB", - "description": "Continuing 32nd beam for long stem" - }, - "textCont8thBeamLongStem": { - "codepoint": "U+E1F8", - "description": "Continuing 8th beam for long stem" - }, - "textCont8thBeamShortStem": { - "codepoint": "U+E1F7", - "description": "Continuing 8th beam for short stem" - }, - "textTie": { - "codepoint": "U+E1FD", - "description": "Tie" - }, - "textTuplet3LongStem": { - "codepoint": "U+E202", - "description": "Tuplet number 3 for long stem" - }, - "textTuplet3ShortStem": { - "codepoint": "U+E1FF", - "description": "Tuplet number 3 for short stem" - }, - "textTupletBracketEndLongStem": { - "codepoint": "U+E203", - "description": "Tuplet bracket end for long stem" - }, - "textTupletBracketEndShortStem": { - "codepoint": "U+E200", - "description": "Tuplet bracket end for short stem" - }, - "textTupletBracketStartLongStem": { - "codepoint": "U+E201", - "description": "Tuplet bracket start for long stem" - }, - "textTupletBracketStartShortStem": { - "codepoint": "U+E1FE", - "description": "Tuplet bracket start for short stem" - }, - "timeSig0": { - "codepoint": "U+E080", - "description": "Time signature 0" - }, - "timeSig0Reversed": { - "codepoint": "U+ECF0", - "description": "Reversed time signature 0" - }, - "timeSig0Turned": { - "codepoint": "U+ECE0", - "description": "Turned time signature 0" - }, - "timeSig1": { - "codepoint": "U+E081", - "description": "Time signature 1" - }, - "timeSig1Reversed": { - "codepoint": "U+ECF1", - "description": "Reversed time signature 1" - }, - "timeSig1Turned": { - "codepoint": "U+ECE1", - "description": "Turned time signature 1" - }, - "timeSig2": { - "codepoint": "U+E082", - "description": "Time signature 2" - }, - "timeSig2Reversed": { - "codepoint": "U+ECF2", - "description": "Reversed time signature 2" - }, - "timeSig2Turned": { - "codepoint": "U+ECE2", - "description": "Turned time signature 2" - }, - "timeSig3": { - "codepoint": "U+E083", - "description": "Time signature 3" - }, - "timeSig3Reversed": { - "codepoint": "U+ECF3", - "description": "Reversed time signature 3" - }, - "timeSig3Turned": { - "codepoint": "U+ECE3", - "description": "Turned time signature 3" - }, - "timeSig4": { - "codepoint": "U+E084", - "description": "Time signature 4" - }, - "timeSig4Reversed": { - "codepoint": "U+ECF4", - "description": "Reversed time signature 4" - }, - "timeSig4Turned": { - "codepoint": "U+ECE4", - "description": "Turned time signature 4" - }, - "timeSig5": { - "codepoint": "U+E085", - "description": "Time signature 5" - }, - "timeSig5Reversed": { - "codepoint": "U+ECF5", - "description": "Reversed time signature 5" - }, - "timeSig5Turned": { - "codepoint": "U+ECE5", - "description": "Turned time signature 5" - }, - "timeSig6": { - "codepoint": "U+E086", - "description": "Time signature 6" - }, - "timeSig6Reversed": { - "codepoint": "U+ECF6", - "description": "Reversed time signature 6" - }, - "timeSig6Turned": { - "codepoint": "U+ECE6", - "description": "Turned time signature 6" - }, - "timeSig7": { - "codepoint": "U+E087", - "description": "Time signature 7" - }, - "timeSig7Reversed": { - "codepoint": "U+ECF7", - "description": "Reversed time signature 7" - }, - "timeSig7Turned": { - "codepoint": "U+ECE7", - "description": "Turned time signature 7" - }, - "timeSig8": { - "codepoint": "U+E088", - "description": "Time signature 8" - }, - "timeSig8Reversed": { - "codepoint": "U+ECF8", - "description": "Reversed time signature 8" - }, - "timeSig8Turned": { - "codepoint": "U+ECE8", - "description": "Turned time signature 8" - }, - "timeSig9": { - "codepoint": "U+E089", - "description": "Time signature 9" - }, - "timeSig9Reversed": { - "codepoint": "U+ECF9", - "description": "Reversed time signature 9" - }, - "timeSig9Turned": { - "codepoint": "U+ECE9", - "description": "Turned time signature 9" - }, - "timeSigBracketLeft": { - "codepoint": "U+EC80", - "description": "Left bracket for whole time signature" - }, - "timeSigBracketLeftSmall": { - "codepoint": "U+EC82", - "description": "Left bracket for numerator only" - }, - "timeSigBracketRight": { - "codepoint": "U+EC81", - "description": "Right bracket for whole time signature" - }, - "timeSigBracketRightSmall": { - "codepoint": "U+EC83", - "description": "Right bracket for numerator only" - }, - "timeSigCombDenominator": { - "codepoint": "U+E09F", - "description": "Control character for denominator digit" - }, - "timeSigCombNumerator": { - "codepoint": "U+E09E", - "description": "Control character for numerator digit" - }, - "timeSigComma": { - "codepoint": "U+E096", - "description": "Time signature comma" - }, - "timeSigCommon": { - "alternateCodepoint": "U+1D134", - "codepoint": "U+E08A", - "description": "Common time" - }, - "timeSigCommonReversed": { - "codepoint": "U+ECFA", - "description": "Reversed common time" - }, - "timeSigCommonTurned": { - "codepoint": "U+ECEA", - "description": "Turned common time" - }, - "timeSigCut2": { - "codepoint": "U+EC85", - "description": "Cut time (Bach)" - }, - "timeSigCut3": { - "codepoint": "U+EC86", - "description": "Cut triple time (9/8)" - }, - "timeSigCutCommon": { - "alternateCodepoint": "U+1D135", - "codepoint": "U+E08B", - "description": "Cut time" - }, - "timeSigCutCommonReversed": { - "codepoint": "U+ECFB", - "description": "Reversed cut time" - }, - "timeSigCutCommonTurned": { - "codepoint": "U+ECEB", - "description": "Turned cut time" - }, - "timeSigEquals": { - "codepoint": "U+E08F", - "description": "Time signature equals" - }, - "timeSigFractionHalf": { - "codepoint": "U+E098", - "description": "Time signature fraction \u00bd" - }, - "timeSigFractionOneThird": { - "codepoint": "U+E09A", - "description": "Time signature fraction \u2153" - }, - "timeSigFractionQuarter": { - "codepoint": "U+E097", - "description": "Time signature fraction \u00bc" - }, - "timeSigFractionThreeQuarters": { - "codepoint": "U+E099", - "description": "Time signature fraction \u00be" - }, - "timeSigFractionTwoThirds": { - "codepoint": "U+E09B", - "description": "Time signature fraction \u2154" - }, - "timeSigFractionalSlash": { - "codepoint": "U+E08E", - "description": "Time signature fraction slash" - }, - "timeSigMinus": { - "codepoint": "U+E090", - "description": "Time signature minus" - }, - "timeSigMultiply": { - "codepoint": "U+E091", - "description": "Time signature multiply" - }, - "timeSigOpenPenderecki": { - "codepoint": "U+E09D", - "description": "Open time signature (Penderecki)" - }, - "timeSigParensLeft": { - "codepoint": "U+E094", - "description": "Left parenthesis for whole time signature" - }, - "timeSigParensLeftSmall": { - "codepoint": "U+E092", - "description": "Left parenthesis for numerator only" - }, - "timeSigParensRight": { - "codepoint": "U+E095", - "description": "Right parenthesis for whole time signature" - }, - "timeSigParensRightSmall": { - "codepoint": "U+E093", - "description": "Right parenthesis for numerator only" - }, - "timeSigPlus": { - "codepoint": "U+E08C", - "description": "Time signature +" - }, - "timeSigPlusSmall": { - "codepoint": "U+E08D", - "description": "Time signature + (for numerators)" - }, - "timeSigSlash": { - "codepoint": "U+EC84", - "description": "Time signature slash separator" - }, - "timeSigX": { - "codepoint": "U+E09C", - "description": "Open time signature" - }, - "tremolo1": { - "alternateCodepoint": "U+1D167", - "codepoint": "U+E220", - "description": "Combining tremolo 1" - }, - "tremolo2": { - "alternateCodepoint": "U+1D168", - "codepoint": "U+E221", - "description": "Combining tremolo 2" - }, - "tremolo3": { - "alternateCodepoint": "U+1D169", - "codepoint": "U+E222", - "description": "Combining tremolo 3" - }, - "tremolo4": { - "codepoint": "U+E223", - "description": "Combining tremolo 4" - }, - "tremolo5": { - "codepoint": "U+E224", - "description": "Combining tremolo 5" - }, - "tremoloDivisiDots2": { - "codepoint": "U+E22E", - "description": "Divide measured tremolo by 2" - }, - "tremoloDivisiDots3": { - "codepoint": "U+E22F", - "description": "Divide measured tremolo by 3" - }, - "tremoloDivisiDots4": { - "codepoint": "U+E230", - "description": "Divide measured tremolo by 4" - }, - "tremoloDivisiDots6": { - "codepoint": "U+E231", - "description": "Divide measured tremolo by 6" - }, - "tremoloFingered1": { - "alternateCodepoint": "U+1D16A", - "codepoint": "U+E225", - "description": "Fingered tremolo 1" - }, - "tremoloFingered2": { - "alternateCodepoint": "U+1D16B", - "codepoint": "U+E226", - "description": "Fingered tremolo 2" - }, - "tremoloFingered3": { - "alternateCodepoint": "U+1D16C", - "codepoint": "U+E227", - "description": "Fingered tremolo 3" - }, - "tremoloFingered4": { - "codepoint": "U+E228", - "description": "Fingered tremolo 4" - }, - "tremoloFingered5": { - "codepoint": "U+E229", - "description": "Fingered tremolo 5" - }, - "tripleTongueAbove": { - "alternateCodepoint": "U+1D18B", - "codepoint": "U+E5F2", - "description": "Triple-tongue above" - }, - "tripleTongueBelow": { - "codepoint": "U+E5F3", - "description": "Triple-tongue below" - }, - "tuplet0": { - "codepoint": "U+E880", - "description": "Tuplet 0" - }, - "tuplet1": { - "codepoint": "U+E881", - "description": "Tuplet 1" - }, - "tuplet2": { - "codepoint": "U+E882", - "description": "Tuplet 2" - }, - "tuplet3": { - "codepoint": "U+E883", - "description": "Tuplet 3" - }, - "tuplet4": { - "codepoint": "U+E884", - "description": "Tuplet 4" - }, - "tuplet5": { - "codepoint": "U+E885", - "description": "Tuplet 5" - }, - "tuplet6": { - "codepoint": "U+E886", - "description": "Tuplet 6" - }, - "tuplet7": { - "codepoint": "U+E887", - "description": "Tuplet 7" - }, - "tuplet8": { - "codepoint": "U+E888", - "description": "Tuplet 8" - }, - "tuplet9": { - "codepoint": "U+E889", - "description": "Tuplet 9" - }, - "tupletColon": { - "codepoint": "U+E88A", - "description": "Tuplet colon" - }, - "unmeasuredTremolo": { - "codepoint": "U+E22C", - "description": "Wieniawski unmeasured tremolo" - }, - "unmeasuredTremoloSimple": { - "codepoint": "U+E22D", - "description": "Wieniawski unmeasured tremolo (simpler)" - }, - "unpitchedPercussionClef1": { - "alternateCodepoint": "U+1D125", - "codepoint": "U+E069", - "description": "Unpitched percussion clef 1" - }, - "unpitchedPercussionClef2": { - "alternateCodepoint": "U+1D126", - "codepoint": "U+E06A", - "description": "Unpitched percussion clef 2" - }, - "ventiduesima": { - "codepoint": "U+E517", - "description": "Ventiduesima" - }, - "ventiduesimaAlta": { - "codepoint": "U+E518", - "description": "Ventiduesima alta" - }, - "ventiduesimaBassa": { - "codepoint": "U+E519", - "description": "Ventiduesima bassa" - }, - "ventiduesimaBassaMb": { - "codepoint": "U+E51E", - "description": "Ventiduesima bassa (mb)" - }, - "vocalFingerClickStockhausen": { - "codepoint": "U+E649", - "description": "Finger click (Stockhausen)" - }, - "vocalHalbGesungen": { - "codepoint": "U+E64B", - "description": "Halb gesungen (semi-sprechgesang)" - }, - "vocalMouthClosed": { - "codepoint": "U+E640", - "description": "Mouth closed" - }, - "vocalMouthOpen": { - "codepoint": "U+E642", - "description": "Mouth open" - }, - "vocalMouthPursed": { - "codepoint": "U+E644", - "description": "Mouth pursed" - }, - "vocalMouthSlightlyOpen": { - "codepoint": "U+E641", - "description": "Mouth slightly open" - }, - "vocalMouthWideOpen": { - "codepoint": "U+E643", - "description": "Mouth wide open" - }, - "vocalNasalVoice": { - "codepoint": "U+E647", - "description": "Nasal voice" - }, - "vocalSprechgesang": { - "codepoint": "U+E645", - "description": "Sprechgesang" - }, - "vocalTongueClickStockhausen": { - "codepoint": "U+E648", - "description": "Tongue click (Stockhausen)" - }, - "vocalTongueFingerClickStockhausen": { - "codepoint": "U+E64A", - "description": "Tongue and finger click (Stockhausen)" - }, - "vocalsSussurando": { - "codepoint": "U+E646", - "description": "Combining sussurando for stem" - }, - "wiggleArpeggiatoDown": { - "codepoint": "U+EAAA", - "description": "Arpeggiato wiggle segment, downwards" - }, - "wiggleArpeggiatoDownArrow": { - "codepoint": "U+EAAE", - "description": "Arpeggiato arrowhead down" - }, - "wiggleArpeggiatoDownSwash": { - "codepoint": "U+EAAC", - "description": "Arpeggiato downward swash" - }, - "wiggleArpeggiatoUp": { - "codepoint": "U+EAA9", - "description": "Arpeggiato wiggle segment, upwards" - }, - "wiggleArpeggiatoUpArrow": { - "codepoint": "U+EAAD", - "description": "Arpeggiato arrowhead up" - }, - "wiggleArpeggiatoUpSwash": { - "codepoint": "U+EAAB", - "description": "Arpeggiato upward swash" - }, - "wiggleCircular": { - "codepoint": "U+EAC9", - "description": "Circular motion segment" - }, - "wiggleCircularConstant": { - "codepoint": "U+EAC0", - "description": "Constant circular motion segment" - }, - "wiggleCircularConstantFlipped": { - "codepoint": "U+EAC1", - "description": "Constant circular motion segment (flipped)" - }, - "wiggleCircularConstantFlippedLarge": { - "codepoint": "U+EAC3", - "description": "Constant circular motion segment (flipped, large)" - }, - "wiggleCircularConstantLarge": { - "codepoint": "U+EAC2", - "description": "Constant circular motion segment (large)" - }, - "wiggleCircularEnd": { - "codepoint": "U+EACB", - "description": "Circular motion end" - }, - "wiggleCircularLarge": { - "codepoint": "U+EAC8", - "description": "Circular motion segment, large" - }, - "wiggleCircularLarger": { - "codepoint": "U+EAC7", - "description": "Circular motion segment, larger" - }, - "wiggleCircularLargerStill": { - "codepoint": "U+EAC6", - "description": "Circular motion segment, larger still" - }, - "wiggleCircularLargest": { - "codepoint": "U+EAC5", - "description": "Circular motion segment, largest" - }, - "wiggleCircularSmall": { - "codepoint": "U+EACA", - "description": "Circular motion segment, small" - }, - "wiggleCircularStart": { - "codepoint": "U+EAC4", - "description": "Circular motion start" - }, - "wiggleGlissando": { - "codepoint": "U+EAAF", - "description": "Glissando wiggle segment" - }, - "wiggleGlissandoGroup1": { - "codepoint": "U+EABD", - "description": "Group glissando 1" - }, - "wiggleGlissandoGroup2": { - "codepoint": "U+EABE", - "description": "Group glissando 2" - }, - "wiggleGlissandoGroup3": { - "codepoint": "U+EABF", - "description": "Group glissando 3" - }, - "wiggleRandom1": { - "codepoint": "U+EAF0", - "description": "Quasi-random squiggle 1" - }, - "wiggleRandom2": { - "codepoint": "U+EAF1", - "description": "Quasi-random squiggle 2" - }, - "wiggleRandom3": { - "codepoint": "U+EAF2", - "description": "Quasi-random squiggle 3" - }, - "wiggleRandom4": { - "codepoint": "U+EAF3", - "description": "Quasi-random squiggle 4" - }, - "wiggleSawtooth": { - "codepoint": "U+EABB", - "description": "Sawtooth line segment" - }, - "wiggleSawtoothNarrow": { - "codepoint": "U+EABA", - "description": "Narrow sawtooth line segment" - }, - "wiggleSawtoothWide": { - "codepoint": "U+EABC", - "description": "Wide sawtooth line segment" - }, - "wiggleSquareWave": { - "codepoint": "U+EAB8", - "description": "Square wave line segment" - }, - "wiggleSquareWaveNarrow": { - "codepoint": "U+EAB7", - "description": "Narrow square wave line segment" - }, - "wiggleSquareWaveWide": { - "codepoint": "U+EAB9", - "description": "Wide square wave line segment" - }, - "wiggleTrill": { - "codepoint": "U+EAA4", - "description": "Trill wiggle segment" - }, - "wiggleTrillFast": { - "codepoint": "U+EAA3", - "description": "Trill wiggle segment, fast" - }, - "wiggleTrillFaster": { - "codepoint": "U+EAA2", - "description": "Trill wiggle segment, faster" - }, - "wiggleTrillFasterStill": { - "codepoint": "U+EAA1", - "description": "Trill wiggle segment, faster still" - }, - "wiggleTrillFastest": { - "codepoint": "U+EAA0", - "description": "Trill wiggle segment, fastest" - }, - "wiggleTrillSlow": { - "codepoint": "U+EAA5", - "description": "Trill wiggle segment, slow" - }, - "wiggleTrillSlower": { - "codepoint": "U+EAA6", - "description": "Trill wiggle segment, slower" - }, - "wiggleTrillSlowerStill": { - "codepoint": "U+EAA7", - "description": "Trill wiggle segment, slower still" - }, - "wiggleTrillSlowest": { - "codepoint": "U+EAA8", - "description": "Trill wiggle segment, slowest" - }, - "wiggleVIbratoLargestSlower": { - "codepoint": "U+EAEE", - "description": "Vibrato largest, slower" - }, - "wiggleVIbratoMediumSlower": { - "codepoint": "U+EAE0", - "description": "Vibrato medium, slower" - }, - "wiggleVibrato": { - "codepoint": "U+EAB0", - "description": "Vibrato / shake wiggle segment" - }, - "wiggleVibratoLargeFast": { - "codepoint": "U+EAE5", - "description": "Vibrato large, fast" - }, - "wiggleVibratoLargeFaster": { - "codepoint": "U+EAE4", - "description": "Vibrato large, faster" - }, - "wiggleVibratoLargeFasterStill": { - "codepoint": "U+EAE3", - "description": "Vibrato large, faster still" - }, - "wiggleVibratoLargeFastest": { - "codepoint": "U+EAE2", - "description": "Vibrato large, fastest" - }, - "wiggleVibratoLargeSlow": { - "codepoint": "U+EAE6", - "description": "Vibrato large, slow" - }, - "wiggleVibratoLargeSlower": { - "codepoint": "U+EAE7", - "description": "Vibrato large, slower" - }, - "wiggleVibratoLargeSlowest": { - "codepoint": "U+EAE8", - "description": "Vibrato large, slowest" - }, - "wiggleVibratoLargestFast": { - "codepoint": "U+EAEC", - "description": "Vibrato largest, fast" - }, - "wiggleVibratoLargestFaster": { - "codepoint": "U+EAEB", - "description": "Vibrato largest, faster" - }, - "wiggleVibratoLargestFasterStill": { - "codepoint": "U+EAEA", - "description": "Vibrato largest, faster still" - }, - "wiggleVibratoLargestFastest": { - "codepoint": "U+EAE9", - "description": "Vibrato largest, fastest" - }, - "wiggleVibratoLargestSlow": { - "codepoint": "U+EAED", - "description": "Vibrato largest, slow" - }, - "wiggleVibratoLargestSlowest": { - "codepoint": "U+EAEF", - "description": "Vibrato largest, slowest" - }, - "wiggleVibratoMediumFast": { - "codepoint": "U+EADE", - "description": "Vibrato medium, fast" - }, - "wiggleVibratoMediumFaster": { - "codepoint": "U+EADD", - "description": "Vibrato medium, faster" - }, - "wiggleVibratoMediumFasterStill": { - "codepoint": "U+EADC", - "description": "Vibrato medium, faster still" - }, - "wiggleVibratoMediumFastest": { - "codepoint": "U+EADB", - "description": "Vibrato medium, fastest" - }, - "wiggleVibratoMediumSlow": { - "codepoint": "U+EADF", - "description": "Vibrato medium, slow" - }, - "wiggleVibratoMediumSlowest": { - "codepoint": "U+EAE1", - "description": "Vibrato medium, slowest" - }, - "wiggleVibratoSmallFast": { - "codepoint": "U+EAD7", - "description": "Vibrato small, fast" - }, - "wiggleVibratoSmallFaster": { - "codepoint": "U+EAD6", - "description": "Vibrato small, faster" - }, - "wiggleVibratoSmallFasterStill": { - "codepoint": "U+EAD5", - "description": "Vibrato small, faster still" - }, - "wiggleVibratoSmallFastest": { - "codepoint": "U+EAD4", - "description": "Vibrato small, fastest" - }, - "wiggleVibratoSmallSlow": { - "codepoint": "U+EAD8", - "description": "Vibrato small, slow" - }, - "wiggleVibratoSmallSlower": { - "codepoint": "U+EAD9", - "description": "Vibrato small, slower" - }, - "wiggleVibratoSmallSlowest": { - "codepoint": "U+EADA", - "description": "Vibrato small, slowest" - }, - "wiggleVibratoSmallestFast": { - "codepoint": "U+EAD0", - "description": "Vibrato smallest, fast" - }, - "wiggleVibratoSmallestFaster": { - "codepoint": "U+EACF", - "description": "Vibrato smallest, faster" - }, - "wiggleVibratoSmallestFasterStill": { - "codepoint": "U+EACE", - "description": "Vibrato smallest, faster still" - }, - "wiggleVibratoSmallestFastest": { - "codepoint": "U+EACD", - "description": "Vibrato smallest, fastest" - }, - "wiggleVibratoSmallestSlow": { - "codepoint": "U+EAD1", - "description": "Vibrato smallest, slow" - }, - "wiggleVibratoSmallestSlower": { - "codepoint": "U+EAD2", - "description": "Vibrato smallest, slower" - }, - "wiggleVibratoSmallestSlowest": { - "codepoint": "U+EAD3", - "description": "Vibrato smallest, slowest" - }, - "wiggleVibratoStart": { - "codepoint": "U+EACC", - "description": "Vibrato start" - }, - "wiggleVibratoWide": { - "codepoint": "U+EAB1", - "description": "Wide vibrato / shake wiggle segment" - }, - "wiggleWavy": { - "codepoint": "U+EAB5", - "description": "Wavy line segment" - }, - "wiggleWavyNarrow": { - "codepoint": "U+EAB4", - "description": "Narrow wavy line segment" - }, - "wiggleWavyWide": { - "codepoint": "U+EAB6", - "description": "Wide wavy line segment" - }, - "windClosedHole": { - "codepoint": "U+E5F4", - "description": "Closed hole" - }, - "windFlatEmbouchure": { - "codepoint": "U+E5FB", - "description": "Flatter embouchure" - }, - "windHalfClosedHole1": { - "codepoint": "U+E5F6", - "description": "Half-closed hole" - }, - "windHalfClosedHole2": { - "codepoint": "U+E5F7", - "description": "Half-closed hole 2" - }, - "windHalfClosedHole3": { - "codepoint": "U+E5F8", - "description": "Half-open hole" - }, - "windLessRelaxedEmbouchure": { - "codepoint": "U+E5FE", - "description": "Somewhat relaxed embouchure" - }, - "windLessTightEmbouchure": { - "codepoint": "U+E600", - "description": "Somewhat tight embouchure" - }, - "windMouthpiecePop": { - "codepoint": "U+E60A", - "description": "Mouthpiece or hand pop" - }, - "windMultiphonicsBlackStem": { - "codepoint": "U+E607", - "description": "Combining multiphonics (black) for stem" - }, - "windMultiphonicsBlackWhiteStem": { - "codepoint": "U+E609", - "description": "Combining multiphonics (black and white) for stem" - }, - "windMultiphonicsWhiteStem": { - "codepoint": "U+E608", - "description": "Combining multiphonics (white) for stem" - }, - "windOpenHole": { - "codepoint": "U+E5F9", - "description": "Open hole" - }, - "windReedPositionIn": { - "codepoint": "U+E606", - "description": "Much more reed (push inwards)" - }, - "windReedPositionNormal": { - "codepoint": "U+E604", - "description": "Normal reed position" - }, - "windReedPositionOut": { - "codepoint": "U+E605", - "description": "Very little reed (pull outwards)" - }, - "windRelaxedEmbouchure": { - "codepoint": "U+E5FD", - "description": "Relaxed embouchure" - }, - "windRimOnly": { - "codepoint": "U+E60B", - "description": "Rim only" - }, - "windSharpEmbouchure": { - "codepoint": "U+E5FC", - "description": "Sharper embouchure" - }, - "windStrongAirPressure": { - "codepoint": "U+E603", - "description": "Very tight embouchure / strong air pressure" - }, - "windThreeQuartersClosedHole": { - "codepoint": "U+E5F5", - "description": "Three-quarters closed hole" - }, - "windTightEmbouchure": { - "codepoint": "U+E5FF", - "description": "Tight embouchure" - }, - "windTrillKey": { - "codepoint": "U+E5FA", - "description": "Trill key" - }, - "windVeryTightEmbouchure": { - "codepoint": "U+E601", - "description": "Very tight embouchure" - }, - "windWeakAirPressure": { - "codepoint": "U+E602", - "description": "Very relaxed embouchure / weak air-pressure" - } -} \ No newline at end of file From 00fb3311e4e6c01eeab3ea5b15ab1d4fc6e49490 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Wed, 26 Jan 2022 09:33:19 +0100 Subject: [PATCH 142/403] remove extracted SMuFL glyphs --- data/Bravura.xml | 696 ------------------ data/Bravura/E000-brace.xml | 1 - data/Bravura/E003-bracketTop.xml | 1 - data/Bravura/E004-bracketBottom.xml | 1 - data/Bravura/E043-repeatDots.xml | 1 - data/Bravura/E044-repeatDot.xml | 1 - data/Bravura/E045-dalSegno.xml | 1 - data/Bravura/E046-daCapo.xml | 1 - data/Bravura/E047-segno.xml | 1 - data/Bravura/E048-coda.xml | 1 - data/Bravura/E049-codaSquare.xml | 1 - data/Bravura/E04B-segnoSerpent2.xml | 1 - data/Bravura/E050-gClef.xml | 1 - data/Bravura/E051-gClef15mb.xml | 1 - data/Bravura/E052-gClef8vb.xml | 1 - data/Bravura/E053-gClef8va.xml | 1 - data/Bravura/E054-gClef15ma.xml | 1 - data/Bravura/E055-gClef8vbOld.xml | 1 - data/Bravura/E056-gClef8vbCClef.xml | 1 - data/Bravura/E05C-cClef.xml | 1 - data/Bravura/E05D-cClef8vb.xml | 1 - data/Bravura/E062-fClef.xml | 1 - data/Bravura/E063-fClef15mb.xml | 1 - data/Bravura/E064-fClef8vb.xml | 1 - data/Bravura/E065-fClef8va.xml | 1 - data/Bravura/E066-fClef15ma.xml | 1 - .../Bravura/E069-unpitchedPercussionClef1.xml | 1 - .../Bravura/E06A-unpitchedPercussionClef2.xml | 1 - data/Bravura/E073-gClefReversed.xml | 1 - data/Bravura/E074-gClefTurned.xml | 1 - data/Bravura/E075-cClefReversed.xml | 1 - data/Bravura/E076-fClefReversed.xml | 1 - data/Bravura/E077-fClefTurned.xml | 1 - data/Bravura/E080-timeSig0.xml | 1 - data/Bravura/E081-timeSig1.xml | 1 - data/Bravura/E082-timeSig2.xml | 1 - data/Bravura/E083-timeSig3.xml | 1 - data/Bravura/E084-timeSig4.xml | 1 - data/Bravura/E085-timeSig5.xml | 1 - data/Bravura/E086-timeSig6.xml | 1 - data/Bravura/E087-timeSig7.xml | 1 - data/Bravura/E088-timeSig8.xml | 1 - data/Bravura/E089-timeSig9.xml | 1 - data/Bravura/E08A-timeSigCommon.xml | 1 - data/Bravura/E08B-timeSigCutCommon.xml | 1 - data/Bravura/E08C-timeSigPlus.xml | 1 - data/Bravura/E08D-timeSigPlusSmall.xml | 1 - data/Bravura/E08E-timeSigFractionalSlash.xml | 1 - data/Bravura/E08F-timeSigEquals.xml | 1 - data/Bravura/E090-timeSigMinus.xml | 1 - data/Bravura/E091-timeSigMultiply.xml | 1 - data/Bravura/E092-timeSigParensLeftSmall.xml | 1 - data/Bravura/E093-timeSigParensRightSmall.xml | 1 - data/Bravura/E094-timeSigParensLeft.xml | 1 - data/Bravura/E095-timeSigParensRight.xml | 1 - data/Bravura/E0A0-noteheadDoubleWhole.xml | 1 - .../E0A1-noteheadDoubleWholeSquare.xml | 1 - data/Bravura/E0A2-noteheadWhole.xml | 1 - data/Bravura/E0A3-noteheadHalf.xml | 1 - data/Bravura/E0A4-noteheadBlack.xml | 1 - data/Bravura/E0A5-noteheadNull.xml | 1 - data/Bravura/E0A9-noteheadXBlack.xml | 1 - data/Bravura/E0AF-noteheadPlusBlack.xml | 1 - data/Bravura/E0B5-noteheadWholeWithX.xml | 1 - data/Bravura/E0B6-noteheadHalfWithX.xml | 1 - data/Bravura/E0B7-noteheadVoidWithX.xml | 1 - data/Bravura/E0D9-noteheadDiamondHalf.xml | 1 - data/Bravura/E0DA-noteheadDiamondHalfWide.xml | 1 - data/Bravura/E0DB-noteheadDiamondBlack.xml | 1 - .../Bravura/E0DC-noteheadDiamondBlackWide.xml | 1 - data/Bravura/E0DD-noteheadDiamondWhite.xml | 1 - .../Bravura/E0DE-noteheadDiamondWhiteWide.xml | 1 - data/Bravura/E0F5-noteheadParenthesisLeft.xml | 1 - .../Bravura/E0F6-noteheadParenthesisRight.xml | 1 - data/Bravura/E0FA-noteheadWholeFilled.xml | 1 - .../E101-noteheadSlashHorizontalEnds.xml | 1 - data/Bravura/E102-noteheadSlashWhiteWhole.xml | 1 - data/Bravura/E103-noteheadSlashWhiteHalf.xml | 1 - data/Bravura/E220-tremolo1.xml | 1 - data/Bravura/E221-tremolo2.xml | 1 - data/Bravura/E222-tremolo3.xml | 1 - data/Bravura/E223-tremolo4.xml | 1 - data/Bravura/E224-tremolo5.xml | 1 - data/Bravura/E22A-buzzRoll.xml | 1 - data/Bravura/E240-flag8thUp.xml | 1 - data/Bravura/E241-flag8thDown.xml | 1 - data/Bravura/E242-flag16thUp.xml | 1 - data/Bravura/E243-flag16thDown.xml | 1 - data/Bravura/E244-flag32ndUp.xml | 1 - data/Bravura/E245-flag32ndDown.xml | 1 - data/Bravura/E246-flag64thUp.xml | 1 - data/Bravura/E247-flag64thDown.xml | 1 - data/Bravura/E248-flag128thUp.xml | 1 - data/Bravura/E249-flag128thDown.xml | 1 - data/Bravura/E24A-flag256thUp.xml | 1 - data/Bravura/E24B-flag256thDown.xml | 1 - data/Bravura/E24C-flag512thUp.xml | 1 - data/Bravura/E24D-flag512thDown.xml | 1 - data/Bravura/E24E-flag1024thUp.xml | 1 - data/Bravura/E24F-flag1024thDown.xml | 1 - data/Bravura/E260-accidentalFlat.xml | 1 - data/Bravura/E261-accidentalNatural.xml | 1 - data/Bravura/E262-accidentalSharp.xml | 1 - data/Bravura/E263-accidentalDoubleSharp.xml | 1 - data/Bravura/E264-accidentalDoubleFlat.xml | 1 - data/Bravura/E265-accidentalTripleSharp.xml | 1 - data/Bravura/E266-accidentalTripleFlat.xml | 1 - data/Bravura/E267-accidentalNaturalFlat.xml | 1 - data/Bravura/E268-accidentalNaturalSharp.xml | 1 - data/Bravura/E269-accidentalSharpSharp.xml | 1 - data/Bravura/E26A-accidentalParensLeft.xml | 1 - data/Bravura/E26B-accidentalParensRight.xml | 1 - data/Bravura/E26C-accidentalBracketLeft.xml | 1 - data/Bravura/E26D-accidentalBracketRight.xml | 1 - .../E270-accidentalQuarterToneFlatArrowUp.xml | 1 - ...cidentalThreeQuarterTonesFlatArrowDown.xml | 1 - ...cidentalQuarterToneSharpNaturalArrowUp.xml | 1 - ...identalQuarterToneFlatNaturalArrowDown.xml | 1 - ...ccidentalThreeQuarterTonesSharpArrowUp.xml | 1 - ...75-accidentalQuarterToneSharpArrowDown.xml | 1 - .../E280-accidentalQuarterToneFlatStein.xml | 1 - ...identalThreeQuarterTonesFlatZimmermann.xml | 1 - .../E282-accidentalQuarterToneSharpStein.xml | 1 - ...-accidentalThreeQuarterTonesSharpStein.xml | 1 - .../E440-accidentalBuyukMucennebFlat.xml | 1 - .../E441-accidentalKucukMucennebFlat.xml | 1 - data/Bravura/E442-accidentalBakiyeFlat.xml | 1 - data/Bravura/E443-accidentalKomaFlat.xml | 1 - data/Bravura/E444-accidentalKomaSharp.xml | 1 - data/Bravura/E445-accidentalBakiyeSharp.xml | 1 - .../E446-accidentalKucukMucennebSharp.xml | 1 - .../E447-accidentalBuyukMucennebSharp.xml | 1 - data/Bravura/E4A0-articAccentAbove.xml | 1 - data/Bravura/E4A1-articAccentBelow.xml | 1 - data/Bravura/E4A2-articStaccatoAbove.xml | 1 - data/Bravura/E4A3-articStaccatoBelow.xml | 1 - data/Bravura/E4A4-articTenutoAbove.xml | 1 - data/Bravura/E4A5-articTenutoBelow.xml | 1 - data/Bravura/E4A6-articStaccatissimoAbove.xml | 1 - data/Bravura/E4A7-articStaccatissimoBelow.xml | 1 - .../E4A8-articStaccatissimoWedgeAbove.xml | 1 - .../E4A9-articStaccatissimoWedgeBelow.xml | 1 - .../E4AA-articStaccatissimoStrokeAbove.xml | 1 - .../E4AB-articStaccatissimoStrokeBelow.xml | 1 - data/Bravura/E4AC-articMarcatoAbove.xml | 1 - data/Bravura/E4AD-articMarcatoBelow.xml | 1 - .../E4AE-articMarcatoStaccatoAbove.xml | 1 - .../E4AF-articMarcatoStaccatoBelow.xml | 1 - .../Bravura/E4B0-articAccentStaccatoAbove.xml | 1 - .../Bravura/E4B1-articAccentStaccatoBelow.xml | 1 - .../Bravura/E4B2-articTenutoStaccatoAbove.xml | 1 - .../Bravura/E4B3-articTenutoStaccatoBelow.xml | 1 - data/Bravura/E4B4-articTenutoAccentAbove.xml | 1 - data/Bravura/E4B5-articTenutoAccentBelow.xml | 1 - data/Bravura/E4B6-articStressAbove.xml | 1 - data/Bravura/E4B7-articStressBelow.xml | 1 - data/Bravura/E4B8-articUnstressAbove.xml | 1 - data/Bravura/E4B9-articUnstressBelow.xml | 1 - data/Bravura/E4BA-articLaissezVibrerAbove.xml | 1 - data/Bravura/E4BB-articLaissezVibrerBelow.xml | 1 - data/Bravura/E4BC-articMarcatoTenutoAbove.xml | 1 - data/Bravura/E4BD-articMarcatoTenutoBelow.xml | 1 - data/Bravura/E4C0-fermataAbove.xml | 1 - data/Bravura/E4C1-fermataBelow.xml | 1 - data/Bravura/E4C2-fermataVeryShortAbove.xml | 1 - data/Bravura/E4C3-fermataVeryShortBelow.xml | 1 - data/Bravura/E4C4-fermataShortAbove.xml | 1 - data/Bravura/E4C5-fermataShortBelow.xml | 1 - data/Bravura/E4C6-fermataLongAbove.xml | 1 - data/Bravura/E4C7-fermataLongBelow.xml | 1 - data/Bravura/E4C8-fermataVeryLongAbove.xml | 1 - data/Bravura/E4C9-fermataVeryLongBelow.xml | 1 - data/Bravura/E4CE-breathMarkComma.xml | 1 - data/Bravura/E4E0-restMaxima.xml | 1 - data/Bravura/E4E1-restLonga.xml | 1 - data/Bravura/E4E2-restDoubleWhole.xml | 1 - data/Bravura/E4E3-restWhole.xml | 1 - data/Bravura/E4E4-restHalf.xml | 1 - data/Bravura/E4E5-restQuarter.xml | 1 - data/Bravura/E4E6-rest8th.xml | 1 - data/Bravura/E4E7-rest16th.xml | 1 - data/Bravura/E4E8-rest32nd.xml | 1 - data/Bravura/E4E9-rest64th.xml | 1 - data/Bravura/E4EA-rest128th.xml | 1 - data/Bravura/E4EB-rest256th.xml | 1 - data/Bravura/E4EC-rest512th.xml | 1 - data/Bravura/E4ED-rest1024th.xml | 1 - data/Bravura/E4F2-restQuarterOld.xml | 1 - data/Bravura/E4F6-restQuarterZ.xml | 1 - data/Bravura/E500-repeat1Bar.xml | 1 - data/Bravura/E501-repeat2Bars.xml | 1 - data/Bravura/E502-repeat4Bars.xml | 1 - data/Bravura/E503-repeatBarUpperDot.xml | 1 - data/Bravura/E504-repeatBarSlash.xml | 1 - data/Bravura/E505-repeatBarLowerDot.xml | 1 - data/Bravura/E510-ottava.xml | 1 - data/Bravura/E511-ottavaAlta.xml | 1 - data/Bravura/E512-ottavaBassa.xml | 1 - data/Bravura/E513-ottavaBassaBa.xml | 1 - data/Bravura/E514-quindicesima.xml | 1 - data/Bravura/E515-quindicesimaAlta.xml | 1 - data/Bravura/E516-quindicesimaBassa.xml | 1 - data/Bravura/E517-ventiduesima.xml | 1 - data/Bravura/E518-ventiduesimaAlta.xml | 1 - data/Bravura/E519-ventiduesimaBassa.xml | 1 - data/Bravura/E51A-octaveParensLeft.xml | 1 - data/Bravura/E51B-octaveParensRight.xml | 1 - data/Bravura/E51C-ottavaBassaVb.xml | 1 - data/Bravura/E51D-quindicesimaBassaMb.xml | 1 - data/Bravura/E51E-ventiduesimaBassaMb.xml | 1 - data/Bravura/E520-dynamicPiano.xml | 1 - data/Bravura/E521-dynamicMezzo.xml | 1 - data/Bravura/E522-dynamicForte.xml | 1 - data/Bravura/E523-dynamicRinforzando.xml | 1 - data/Bravura/E524-dynamicSforzando.xml | 1 - data/Bravura/E525-dynamicZ.xml | 1 - data/Bravura/E526-dynamicNiente.xml | 1 - data/Bravura/E527-dynamicPPPPPP.xml | 1 - data/Bravura/E528-dynamicPPPPP.xml | 1 - data/Bravura/E529-dynamicPPPP.xml | 1 - data/Bravura/E52A-dynamicPPP.xml | 1 - data/Bravura/E52B-dynamicPP.xml | 1 - data/Bravura/E52C-dynamicMP.xml | 1 - data/Bravura/E52D-dynamicMF.xml | 1 - data/Bravura/E52E-dynamicPF.xml | 1 - data/Bravura/E52F-dynamicFF.xml | 1 - data/Bravura/E530-dynamicFFF.xml | 1 - data/Bravura/E531-dynamicFFFF.xml | 1 - data/Bravura/E532-dynamicFFFFF.xml | 1 - data/Bravura/E533-dynamicFFFFFF.xml | 1 - data/Bravura/E534-dynamicFortePiano.xml | 1 - data/Bravura/E535-dynamicForzando.xml | 1 - data/Bravura/E536-dynamicSforzando1.xml | 1 - data/Bravura/E537-dynamicSforzandoPiano.xml | 1 - .../E538-dynamicSforzandoPianissimo.xml | 1 - data/Bravura/E539-dynamicSforzato.xml | 1 - data/Bravura/E53A-dynamicSforzatoPiano.xml | 1 - data/Bravura/E53B-dynamicSforzatoFF.xml | 1 - data/Bravura/E53C-dynamicRinforzando1.xml | 1 - data/Bravura/E53D-dynamicRinforzando2.xml | 1 - data/Bravura/E566-ornamentTrill.xml | 1 - data/Bravura/E567-ornamentTurn.xml | 1 - data/Bravura/E568-ornamentTurnInverted.xml | 1 - data/Bravura/E569-ornamentTurnSlash.xml | 1 - data/Bravura/E56A-ornamentTurnUp.xml | 1 - data/Bravura/E56B-ornamentTurnUpS.xml | 1 - data/Bravura/E56C-ornamentShortTrill.xml | 1 - data/Bravura/E56D-ornamentMordent.xml | 1 - data/Bravura/E56E-ornamentTremblement.xml | 1 - data/Bravura/E56F-ornamentHaydn.xml | 1 - data/Bravura/E583-ornamentVerticalLine.xml | 1 - data/Bravura/E587-ornamentSchleifer.xml | 1 - .../E59D-ornamentZigZagLineNoRightEnd.xml | 1 - .../E59E-ornamentZigZagLineWithRightEnd.xml | 1 - data/Bravura/E5B0-ornamentPrecompSlide.xml | 1 - .../E5B1-ornamentPrecompDescendingSlide.xml | 1 - .../E5B2-ornamentPrecompAppoggTrill.xml | 1 - .../E5B3-ornamentPrecompAppoggTrillSuffix.xml | 1 - ...5B4-ornamentPrecompTurnTrillDAnglebert.xml | 1 - ...B5-ornamentPrecompSlideTrillDAnglebert.xml | 1 - .../E5B6-ornamentPrecompSlideTrillMarpurg.xml | 1 - .../E5B7-ornamentPrecompTurnTrillBach.xml | 1 - .../E5B8-ornamentPrecompSlideTrillBach.xml | 1 - .../E5B9-ornamentPrecompSlideTrillMuffat.xml | 1 - ...-ornamentPrecompSlideTrillSuffixMuffat.xml | 1 - ...5BB-ornamentPrecompTrillSuffixDandrieu.xml | 1 - .../E5BC-ornamentPrecompPortDeVoixMordent.xml | 1 - .../E5BD-ornamentPrecompTrillWithMordent.xml | 1 - data/Bravura/E5BE-ornamentPrecompCadence.xml | 1 - .../E5BF-ornamentPrecompCadenceWithTurn.xml | 1 - ...rnamentPrecompDoubleCadenceLowerPrefix.xml | 1 - ...E5C1-ornamentPrecompCadenceUpperPrefix.xml | 1 - ...-ornamentPrecompCadenceUpperPrefixTurn.xml | 1 - ...rnamentPrecompDoubleCadenceUpperPrefix.xml | 1 - ...entPrecompDoubleCadenceUpperPrefixTurn.xml | 1 - .../E5C5-ornamentPrecompMordentRelease.xml | 1 - ...E5C6-ornamentPrecompMordentUpperPrefix.xml | 1 - ...amentPrecompInvertedMordentUpperPrefix.xml | 1 - .../E5C8-ornamentPrecompTrillLowerSuffix.xml | 1 - data/Bravura/E5E5-brassMuteClosed.xml | 1 - data/Bravura/E5E6-brassMuteHalfClosed.xml | 1 - data/Bravura/E5E7-brassMuteOpen.xml | 1 - data/Bravura/E610-stringsDownBow.xml | 1 - data/Bravura/E611-stringsDownBowTurned.xml | 1 - data/Bravura/E612-stringsUpBow.xml | 1 - data/Bravura/E613-stringsUpBowTurned.xml | 1 - data/Bravura/E614-stringsHarmonic.xml | 1 - .../E630-pluckedSnapPizzicatoBelow.xml | 1 - .../E631-pluckedSnapPizzicatoAbove.xml | 1 - data/Bravura/E632-pluckedBuzzPizzicato.xml | 1 - .../Bravura/E633-pluckedLeftHandPizzicato.xml | 1 - data/Bravura/E638-pluckedDamp.xml | 1 - data/Bravura/E645-vocalSprechgesang.xml | 1 - data/Bravura/E650-keyboardPedalPed.xml | 1 - data/Bravura/E651-keyboardPedalP.xml | 1 - data/Bravura/E655-keyboardPedalUp.xml | 1 - data/Bravura/E659-keyboardPedalSost.xml | 1 - data/Bravura/E65A-keyboardPedalS.xml | 1 - data/Bravura/E880-tuplet0.xml | 1 - data/Bravura/E881-tuplet1.xml | 1 - data/Bravura/E882-tuplet2.xml | 1 - data/Bravura/E883-tuplet3.xml | 1 - data/Bravura/E884-tuplet4.xml | 1 - data/Bravura/E885-tuplet5.xml | 1 - data/Bravura/E886-tuplet6.xml | 1 - data/Bravura/E887-tuplet7.xml | 1 - data/Bravura/E888-tuplet8.xml | 1 - data/Bravura/E889-tuplet9.xml | 1 - data/Bravura/E88A-tupletColon.xml | 1 - data/Bravura/E901-mensuralGclefPetrucci.xml | 1 - data/Bravura/E902-chantFclef.xml | 1 - data/Bravura/E904-mensuralFclefPetrucci.xml | 1 - data/Bravura/E906-chantCclef.xml | 1 - .../E907-mensuralCclefPetrucciPosLowest.xml | 1 - .../E908-mensuralCclefPetrucciPosLow.xml | 1 - .../E909-mensuralCclefPetrucciPosMiddle.xml | 1 - .../E90A-mensuralCclefPetrucciPosHigh.xml | 1 - .../E90B-mensuralCclefPetrucciPosHighest.xml | 1 - data/Bravura/E910-mensuralProlation1.xml | 1 - data/Bravura/E911-mensuralProlation2.xml | 1 - data/Bravura/E912-mensuralProlation3.xml | 1 - data/Bravura/E913-mensuralProlation4.xml | 1 - data/Bravura/E914-mensuralProlation5.xml | 1 - data/Bravura/E915-mensuralProlation6.xml | 1 - data/Bravura/E916-mensuralProlation7.xml | 1 - data/Bravura/E917-mensuralProlation8.xml | 1 - data/Bravura/E918-mensuralProlation9.xml | 1 - data/Bravura/E919-mensuralProlation10.xml | 1 - data/Bravura/E91A-mensuralProlation11.xml | 1 - ...E91B-mensuralProportionTempusPerfectum.xml | 1 - ...E91C-mensuralProportionProportioDupla1.xml | 1 - ...E91D-mensuralProportionProportioDupla2.xml | 1 - ...E91E-mensuralProportionProportioTripla.xml | 1 - ...F-mensuralProportionProportioQuadrupla.xml | 1 - .../E920-mensuralProlationCombiningDot.xml | 1 - ...E921-mensuralProlationCombiningTwoDots.xml | 1 - ...22-mensuralProlationCombiningThreeDots.xml | 1 - ...mensuralProlationCombiningThreeDotsTri.xml | 1 - ...E924-mensuralProlationCombiningDotVoid.xml | 1 - .../E925-mensuralProlationCombiningStroke.xml | 1 - .../E938-mensuralNoteheadSemibrevisBlack.xml | 1 - .../E939-mensuralNoteheadSemibrevisVoid.xml | 1 - .../E93C-mensuralNoteheadMinimaWhite.xml | 1 - .../E93D-mensuralNoteheadSemiminimaWhite.xml | 1 - data/Bravura/E93E-mensuralCombStemUp.xml | 1 - data/Bravura/E93F-mensuralCombStemDown.xml | 1 - .../E949-mensuralCombStemUpFlagSemiminima.xml | 1 - ...94A-mensuralCombStemDownFlagSemiminima.xml | 1 - .../E94B-mensuralCombStemUpFlagFusa.xml | 1 - .../E94C-mensuralCombStemDownFlagFusa.xml | 1 - data/Bravura/E990-chantPunctum.xml | 1 - data/Bravura/E991-chantPunctumInclinatum.xml | 1 - data/Bravura/E996-chantPunctumVirga.xml | 1 - data/Bravura/E99B-chantQuilisma.xml | 1 - data/Bravura/E99E-chantOriscusLiquescens.xml | 1 - data/Bravura/E99F-chantStrophicus.xml | 1 - data/Bravura/E9B4-chantEntryLineAsc2nd.xml | 1 - data/Bravura/E9B5-chantEntryLineAsc3rd.xml | 1 - data/Bravura/E9B6-chantEntryLineAsc4th.xml | 1 - data/Bravura/E9B7-chantEntryLineAsc5th.xml | 1 - data/Bravura/E9B9-chantLigaturaDesc2nd.xml | 1 - data/Bravura/E9BA-chantLigaturaDesc3rd.xml | 1 - data/Bravura/E9BB-chantLigaturaDesc4th.xml | 1 - data/Bravura/E9BC-chantLigaturaDesc5th.xml | 1 - data/Bravura/E9E0-medRenFlatSoftB.xml | 1 - data/Bravura/E9E1-medRenFlatHardB.xml | 1 - data/Bravura/E9E2-medRenNatural.xml | 1 - data/Bravura/E9E3-medRenSharpCroix.xml | 1 - data/Bravura/E9F0-mensuralRestMaxima.xml | 1 - .../E9F1-mensuralRestLongaPerfecta.xml | 1 - .../E9F2-mensuralRestLongaImperfecta.xml | 1 - data/Bravura/E9F3-mensuralRestBrevis.xml | 1 - data/Bravura/E9F4-mensuralRestSemibrevis.xml | 1 - data/Bravura/E9F5-mensuralRestMinima.xml | 1 - data/Bravura/E9F6-mensuralRestSemiminima.xml | 1 - data/Bravura/E9F7-mensuralRestFusa.xml | 1 - data/Bravura/E9F8-mensuralRestSemifusa.xml | 1 - data/Bravura/EA02-mensuralCustosUp.xml | 1 - .../EA06-chantCustosStemUpPosMiddle.xml | 1 - data/Bravura/EAA4-wiggleTrill.xml | 1 - data/Bravura/EAA9-wiggleArpeggiatoUp.xml | 1 - data/Bravura/EAAA-wiggleArpeggiatoDown.xml | 1 - data/Bravura/EAAD-wiggleArpeggiatoUpArrow.xml | 1 - .../EAAE-wiggleArpeggiatoDownArrow.xml | 1 - data/Bravura/EAAF-wiggleGlissando.xml | 1 - data/Bravura/EBA7-luteDurationWhole.xml | 1 - data/Bravura/EBA8-luteDurationHalf.xml | 1 - data/Bravura/EBA9-luteDurationQuarter.xml | 1 - data/Bravura/EBAA-luteDuration8th.xml | 1 - data/Bravura/EBAB-luteDuration16th.xml | 1 - data/Bravura/EBAC-luteDuration32nd.xml | 1 - data/Bravura/EBC0-luteFrenchFretA.xml | 1 - data/Bravura/EBC1-luteFrenchFretB.xml | 1 - data/Bravura/EBC2-luteFrenchFretC.xml | 1 - data/Bravura/EBC3-luteFrenchFretD.xml | 1 - data/Bravura/EBC4-luteFrenchFretE.xml | 1 - data/Bravura/EBC5-luteFrenchFretF.xml | 1 - data/Bravura/EBC6-luteFrenchFretG.xml | 1 - data/Bravura/EBC7-luteFrenchFretH.xml | 1 - data/Bravura/EBC8-luteFrenchFretI.xml | 1 - data/Bravura/EBC9-luteFrenchFretK.xml | 1 - data/Bravura/EBCA-luteFrenchFretL.xml | 1 - data/Bravura/EBCB-luteFrenchFretM.xml | 1 - data/Bravura/EBCC-luteFrenchFretN.xml | 1 - data/Bravura/EBE0-luteItalianFret0.xml | 1 - data/Bravura/EBE1-luteItalianFret1.xml | 1 - data/Bravura/EBE2-luteItalianFret2.xml | 1 - data/Bravura/EBE3-luteItalianFret3.xml | 1 - data/Bravura/EBE4-luteItalianFret4.xml | 1 - data/Bravura/EBE5-luteItalianFret5.xml | 1 - data/Bravura/EBE6-luteItalianFret6.xml | 1 - data/Bravura/EBE7-luteItalianFret7.xml | 1 - data/Bravura/EBE8-luteItalianFret8.xml | 1 - data/Bravura/EBE9-luteItalianFret9.xml | 1 - data/Bravura/ED40-articSoftAccentAbove.xml | 1 - data/Bravura/ED41-articSoftAccentBelow.xml | 1 - data/Gootville.xml | 416 ----------- data/Gootville/E003-bracketTop.xml | 1 - data/Gootville/E004-bracketBottom.xml | 1 - data/Gootville/E043-repeatDots.xml | 1 - data/Gootville/E044-repeatDot.xml | 1 - data/Gootville/E047-segno.xml | 1 - data/Gootville/E048-coda.xml | 1 - data/Gootville/E049-codaSquare.xml | 1 - data/Gootville/E050-gClef.xml | 1 - data/Gootville/E051-gClef15mb.xml | 1 - data/Gootville/E052-gClef8vb.xml | 1 - data/Gootville/E053-gClef8va.xml | 1 - data/Gootville/E054-gClef15ma.xml | 1 - data/Gootville/E05C-cClef.xml | 1 - data/Gootville/E05D-cClef8vb.xml | 1 - data/Gootville/E062-fClef.xml | 1 - data/Gootville/E063-fClef15mb.xml | 1 - data/Gootville/E064-fClef8vb.xml | 1 - data/Gootville/E065-fClef8va.xml | 1 - data/Gootville/E066-fClef15ma.xml | 1 - .../E069-unpitchedPercussionClef1.xml | 1 - .../E06A-unpitchedPercussionClef2.xml | 1 - data/Gootville/E080-timeSig0.xml | 1 - data/Gootville/E081-timeSig1.xml | 1 - data/Gootville/E082-timeSig2.xml | 1 - data/Gootville/E083-timeSig3.xml | 1 - data/Gootville/E084-timeSig4.xml | 1 - data/Gootville/E085-timeSig5.xml | 1 - data/Gootville/E086-timeSig6.xml | 1 - data/Gootville/E087-timeSig7.xml | 1 - data/Gootville/E088-timeSig8.xml | 1 - data/Gootville/E089-timeSig9.xml | 1 - data/Gootville/E08A-timeSigCommon.xml | 1 - data/Gootville/E08B-timeSigCutCommon.xml | 1 - .../Gootville/E092-timeSigParensLeftSmall.xml | 1 - .../E093-timeSigParensRightSmall.xml | 1 - data/Gootville/E094-timeSigParensLeft.xml | 1 - data/Gootville/E095-timeSigParensRight.xml | 1 - data/Gootville/E0A0-noteheadDoubleWhole.xml | 1 - .../E0A1-noteheadDoubleWholeSquare.xml | 1 - data/Gootville/E0A2-noteheadWhole.xml | 1 - data/Gootville/E0A3-noteheadHalf.xml | 1 - data/Gootville/E0A4-noteheadBlack.xml | 1 - data/Gootville/E0A9-noteheadXBlack.xml | 1 - data/Gootville/E0D9-noteheadDiamondHalf.xml | 1 - .../E0DA-noteheadDiamondHalfWide.xml | 1 - data/Gootville/E0DB-noteheadDiamondBlack.xml | 1 - .../E0DC-noteheadDiamondBlackWide.xml | 1 - data/Gootville/E0DD-noteheadDiamondWhite.xml | 1 - .../E0DE-noteheadDiamondWhiteWide.xml | 1 - .../E0F5-noteheadParenthesisLeft.xml | 1 - .../E0F6-noteheadParenthesisRight.xml | 1 - .../E101-noteheadSlashHorizontalEnds.xml | 1 - .../E102-noteheadSlashWhiteWhole.xml | 1 - .../Gootville/E103-noteheadSlashWhiteHalf.xml | 1 - data/Gootville/E240-flag8thUp.xml | 1 - data/Gootville/E241-flag8thDown.xml | 1 - data/Gootville/E242-flag16thUp.xml | 1 - data/Gootville/E243-flag16thDown.xml | 1 - data/Gootville/E244-flag32ndUp.xml | 1 - data/Gootville/E245-flag32ndDown.xml | 1 - data/Gootville/E246-flag64thUp.xml | 1 - data/Gootville/E247-flag64thDown.xml | 1 - data/Gootville/E248-flag128thUp.xml | 1 - data/Gootville/E249-flag128thDown.xml | 1 - data/Gootville/E260-accidentalFlat.xml | 1 - data/Gootville/E261-accidentalNatural.xml | 1 - data/Gootville/E262-accidentalSharp.xml | 1 - data/Gootville/E263-accidentalDoubleSharp.xml | 1 - data/Gootville/E264-accidentalDoubleFlat.xml | 1 - data/Gootville/E26A-accidentalParensLeft.xml | 1 - data/Gootville/E26B-accidentalParensRight.xml | 1 - .../E270-accidentalQuarterToneFlatArrowUp.xml | 1 - ...cidentalThreeQuarterTonesFlatArrowDown.xml | 1 - ...cidentalQuarterToneSharpNaturalArrowUp.xml | 1 - ...identalQuarterToneFlatNaturalArrowDown.xml | 1 - ...ccidentalThreeQuarterTonesSharpArrowUp.xml | 1 - ...75-accidentalQuarterToneSharpArrowDown.xml | 1 - .../E280-accidentalQuarterToneFlatStein.xml | 1 - ...identalThreeQuarterTonesFlatZimmermann.xml | 1 - .../E282-accidentalQuarterToneSharpStein.xml | 1 - ...-accidentalThreeQuarterTonesSharpStein.xml | 1 - .../E440-accidentalBuyukMucennebFlat.xml | 1 - .../E441-accidentalKucukMucennebFlat.xml | 1 - data/Gootville/E442-accidentalBakiyeFlat.xml | 1 - data/Gootville/E443-accidentalKomaFlat.xml | 1 - data/Gootville/E444-accidentalKomaSharp.xml | 1 - data/Gootville/E445-accidentalBakiyeSharp.xml | 1 - .../E446-accidentalKucukMucennebSharp.xml | 1 - .../E447-accidentalBuyukMucennebSharp.xml | 1 - data/Gootville/E4A0-articAccentAbove.xml | 1 - data/Gootville/E4A1-articAccentBelow.xml | 1 - data/Gootville/E4A2-articStaccatoAbove.xml | 1 - data/Gootville/E4A3-articStaccatoBelow.xml | 1 - data/Gootville/E4A4-articTenutoAbove.xml | 1 - data/Gootville/E4A5-articTenutoBelow.xml | 1 - .../E4A6-articStaccatissimoAbove.xml | 1 - .../E4A7-articStaccatissimoBelow.xml | 1 - .../E4A8-articStaccatissimoWedgeAbove.xml | 1 - .../E4A9-articStaccatissimoWedgeBelow.xml | 1 - data/Gootville/E4AC-articMarcatoAbove.xml | 1 - data/Gootville/E4AD-articMarcatoBelow.xml | 1 - .../E4B2-articTenutoStaccatoAbove.xml | 1 - .../E4B3-articTenutoStaccatoBelow.xml | 1 - data/Gootville/E4B6-articStressAbove.xml | 1 - data/Gootville/E4B7-articStressBelow.xml | 1 - data/Gootville/E4C0-fermataAbove.xml | 1 - data/Gootville/E4C1-fermataBelow.xml | 1 - data/Gootville/E4C4-fermataShortAbove.xml | 1 - data/Gootville/E4C5-fermataShortBelow.xml | 1 - data/Gootville/E4C6-fermataLongAbove.xml | 1 - data/Gootville/E4C7-fermataLongBelow.xml | 1 - data/Gootville/E4C8-fermataVeryLongAbove.xml | 1 - data/Gootville/E4C9-fermataVeryLongBelow.xml | 1 - data/Gootville/E4CE-breathMarkComma.xml | 1 - data/Gootville/E4E1-restLonga.xml | 1 - data/Gootville/E4E2-restDoubleWhole.xml | 1 - data/Gootville/E4E3-restWhole.xml | 1 - data/Gootville/E4E4-restHalf.xml | 1 - data/Gootville/E4E5-restQuarter.xml | 1 - data/Gootville/E4E6-rest8th.xml | 1 - data/Gootville/E4E7-rest16th.xml | 1 - data/Gootville/E4E8-rest32nd.xml | 1 - data/Gootville/E4E9-rest64th.xml | 1 - data/Gootville/E4EA-rest128th.xml | 1 - data/Gootville/E4F2-restQuarterOld.xml | 1 - data/Gootville/E510-ottava.xml | 1 - data/Gootville/E514-quindicesima.xml | 1 - data/Gootville/E517-ventiduesima.xml | 1 - data/Gootville/E51A-octaveParensLeft.xml | 1 - data/Gootville/E51B-octaveParensRight.xml | 1 - data/Gootville/E520-dynamicPiano.xml | 1 - data/Gootville/E521-dynamicMezzo.xml | 1 - data/Gootville/E522-dynamicForte.xml | 1 - data/Gootville/E523-dynamicRinforzando.xml | 1 - data/Gootville/E524-dynamicSforzando.xml | 1 - data/Gootville/E525-dynamicZ.xml | 1 - data/Gootville/E526-dynamicNiente.xml | 1 - data/Gootville/E527-dynamicPPPPPP.xml | 1 - data/Gootville/E528-dynamicPPPPP.xml | 1 - data/Gootville/E529-dynamicPPPP.xml | 1 - data/Gootville/E52A-dynamicPPP.xml | 1 - data/Gootville/E52B-dynamicPP.xml | 1 - data/Gootville/E52C-dynamicMP.xml | 1 - data/Gootville/E52D-dynamicMF.xml | 1 - data/Gootville/E52E-dynamicPF.xml | 1 - data/Gootville/E52F-dynamicFF.xml | 1 - data/Gootville/E530-dynamicFFF.xml | 1 - data/Gootville/E531-dynamicFFFF.xml | 1 - data/Gootville/E532-dynamicFFFFF.xml | 1 - data/Gootville/E533-dynamicFFFFFF.xml | 1 - data/Gootville/E534-dynamicFortePiano.xml | 1 - data/Gootville/E535-dynamicForzando.xml | 1 - data/Gootville/E536-dynamicSforzando1.xml | 1 - data/Gootville/E537-dynamicSforzandoPiano.xml | 1 - .../E538-dynamicSforzandoPianissimo.xml | 1 - data/Gootville/E539-dynamicSforzato.xml | 1 - data/Gootville/E53A-dynamicSforzatoPiano.xml | 1 - data/Gootville/E53B-dynamicSforzatoFF.xml | 1 - data/Gootville/E53C-dynamicRinforzando1.xml | 1 - data/Gootville/E53D-dynamicRinforzando2.xml | 1 - data/Gootville/E566-ornamentTrill.xml | 1 - data/Gootville/E567-ornamentTurn.xml | 1 - data/Gootville/E568-ornamentTurnInverted.xml | 1 - data/Gootville/E569-ornamentTurnSlash.xml | 1 - data/Gootville/E56C-ornamentShortTrill.xml | 1 - data/Gootville/E56D-ornamentMordent.xml | 1 - data/Gootville/E56E-ornamentTremblement.xml | 1 - .../E59D-ornamentZigZagLineNoRightEnd.xml | 1 - .../E59E-ornamentZigZagLineWithRightEnd.xml | 1 - data/Gootville/E5B0-ornamentPrecompSlide.xml | 1 - data/Gootville/E5E5-brassMuteClosed.xml | 1 - data/Gootville/E5E7-brassMuteOpen.xml | 1 - data/Gootville/E610-stringsDownBow.xml | 1 - data/Gootville/E611-stringsDownBowTurned.xml | 1 - data/Gootville/E612-stringsUpBow.xml | 1 - data/Gootville/E613-stringsUpBowTurned.xml | 1 - .../E630-pluckedSnapPizzicatoBelow.xml | 1 - .../E631-pluckedSnapPizzicatoAbove.xml | 1 - data/Gootville/E650-keyboardPedalPed.xml | 1 - data/Gootville/E651-keyboardPedalP.xml | 1 - data/Gootville/E655-keyboardPedalUp.xml | 1 - data/Gootville/EAA4-wiggleTrill.xml | 1 - data/Gootville/EAA9-wiggleArpeggiatoUp.xml | 1 - data/Gootville/EAAA-wiggleArpeggiatoDown.xml | 1 - .../EAAD-wiggleArpeggiatoUpArrow.xml | 1 - .../EAAE-wiggleArpeggiatoDownArrow.xml | 1 - data/Gootville/EAAF-wiggleGlissando.xml | 1 - data/Leipzig.xml | 573 -------------- data/Leipzig/E000-brace.xml | 1 - data/Leipzig/E003-bracketTop.xml | 1 - data/Leipzig/E004-bracketBottom.xml | 1 - data/Leipzig/E043-repeatDots.xml | 1 - data/Leipzig/E044-repeatDot.xml | 1 - data/Leipzig/E045-dalSegno.xml | 1 - data/Leipzig/E046-daCapo.xml | 1 - data/Leipzig/E047-segno.xml | 1 - data/Leipzig/E048-coda.xml | 1 - data/Leipzig/E049-codaSquare.xml | 1 - data/Leipzig/E04B-segnoSerpent2.xml | 1 - data/Leipzig/E050-gClef.xml | 1 - data/Leipzig/E051-gClef15mb.xml | 1 - data/Leipzig/E052-gClef8vb.xml | 1 - data/Leipzig/E053-gClef8va.xml | 1 - data/Leipzig/E054-gClef15ma.xml | 1 - data/Leipzig/E055-gClef8vbOld.xml | 1 - data/Leipzig/E056-gClef8vbCClef.xml | 1 - data/Leipzig/E05C-cClef.xml | 1 - data/Leipzig/E05D-cClef8vb.xml | 1 - data/Leipzig/E062-fClef.xml | 1 - data/Leipzig/E063-fClef15mb.xml | 1 - data/Leipzig/E064-fClef8vb.xml | 1 - data/Leipzig/E065-fClef8va.xml | 1 - data/Leipzig/E066-fClef15ma.xml | 1 - .../Leipzig/E069-unpitchedPercussionClef1.xml | 1 - .../Leipzig/E06A-unpitchedPercussionClef2.xml | 1 - data/Leipzig/E073-gClefReversed.xml | 1 - data/Leipzig/E074-gClefTurned.xml | 1 - data/Leipzig/E075-cClefReversed.xml | 1 - data/Leipzig/E076-fClefReversed.xml | 1 - data/Leipzig/E077-fClefTurned.xml | 1 - data/Leipzig/E080-timeSig0.xml | 1 - data/Leipzig/E081-timeSig1.xml | 1 - data/Leipzig/E082-timeSig2.xml | 1 - data/Leipzig/E083-timeSig3.xml | 1 - data/Leipzig/E084-timeSig4.xml | 1 - data/Leipzig/E085-timeSig5.xml | 1 - data/Leipzig/E086-timeSig6.xml | 1 - data/Leipzig/E087-timeSig7.xml | 1 - data/Leipzig/E088-timeSig8.xml | 1 - data/Leipzig/E089-timeSig9.xml | 1 - data/Leipzig/E08A-timeSigCommon.xml | 1 - data/Leipzig/E08B-timeSigCutCommon.xml | 1 - data/Leipzig/E08C-timeSigPlus.xml | 1 - data/Leipzig/E08D-timeSigPlusSmall.xml | 1 - data/Leipzig/E08E-timeSigFractionalSlash.xml | 1 - data/Leipzig/E08F-timeSigEquals.xml | 1 - data/Leipzig/E090-timeSigMinus.xml | 1 - data/Leipzig/E091-timeSigMultiply.xml | 1 - data/Leipzig/E092-timeSigParensLeftSmall.xml | 1 - data/Leipzig/E093-timeSigParensRightSmall.xml | 1 - data/Leipzig/E094-timeSigParensLeft.xml | 1 - data/Leipzig/E095-timeSigParensRight.xml | 1 - data/Leipzig/E0A0-noteheadDoubleWhole.xml | 1 - .../E0A1-noteheadDoubleWholeSquare.xml | 1 - data/Leipzig/E0A2-noteheadWhole.xml | 1 - data/Leipzig/E0A3-noteheadHalf.xml | 1 - data/Leipzig/E0A4-noteheadBlack.xml | 1 - data/Leipzig/E0A5-noteheadNull.xml | 1 - data/Leipzig/E0A9-noteheadXBlack.xml | 1 - data/Leipzig/E0AF-noteheadPlusBlack.xml | 1 - data/Leipzig/E0B5-noteheadWholeWithX.xml | 1 - data/Leipzig/E0B6-noteheadHalfWithX.xml | 1 - data/Leipzig/E0B7-noteheadVoidWithX.xml | 1 - data/Leipzig/E0D9-noteheadDiamondHalf.xml | 1 - data/Leipzig/E0DA-noteheadDiamondHalfWide.xml | 1 - data/Leipzig/E0DB-noteheadDiamondBlack.xml | 1 - .../Leipzig/E0DC-noteheadDiamondBlackWide.xml | 1 - data/Leipzig/E0DD-noteheadDiamondWhite.xml | 1 - .../Leipzig/E0DE-noteheadDiamondWhiteWide.xml | 1 - data/Leipzig/E0F5-noteheadParenthesisLeft.xml | 1 - .../Leipzig/E0F6-noteheadParenthesisRight.xml | 1 - data/Leipzig/E0FA-noteheadWholeFilled.xml | 1 - .../E101-noteheadSlashHorizontalEnds.xml | 1 - data/Leipzig/E102-noteheadSlashWhiteWhole.xml | 1 - data/Leipzig/E103-noteheadSlashWhiteHalf.xml | 1 - data/Leipzig/E220-tremolo1.xml | 1 - data/Leipzig/E221-tremolo2.xml | 1 - data/Leipzig/E222-tremolo3.xml | 1 - data/Leipzig/E223-tremolo4.xml | 1 - data/Leipzig/E224-tremolo5.xml | 1 - data/Leipzig/E22A-buzzRoll.xml | 1 - data/Leipzig/E240-flag8thUp.xml | 1 - data/Leipzig/E241-flag8thDown.xml | 1 - data/Leipzig/E242-flag16thUp.xml | 1 - data/Leipzig/E243-flag16thDown.xml | 1 - data/Leipzig/E244-flag32ndUp.xml | 1 - data/Leipzig/E245-flag32ndDown.xml | 1 - data/Leipzig/E246-flag64thUp.xml | 1 - data/Leipzig/E247-flag64thDown.xml | 1 - data/Leipzig/E248-flag128thUp.xml | 1 - data/Leipzig/E249-flag128thDown.xml | 1 - data/Leipzig/E24A-flag256thUp.xml | 1 - data/Leipzig/E24B-flag256thDown.xml | 1 - data/Leipzig/E24C-flag512thUp.xml | 1 - data/Leipzig/E24D-flag512thDown.xml | 1 - data/Leipzig/E24E-flag1024thUp.xml | 1 - data/Leipzig/E24F-flag1024thDown.xml | 1 - data/Leipzig/E260-accidentalFlat.xml | 1 - data/Leipzig/E261-accidentalNatural.xml | 1 - data/Leipzig/E262-accidentalSharp.xml | 1 - data/Leipzig/E263-accidentalDoubleSharp.xml | 1 - data/Leipzig/E264-accidentalDoubleFlat.xml | 1 - data/Leipzig/E265-accidentalTripleSharp.xml | 1 - data/Leipzig/E266-accidentalTripleFlat.xml | 1 - data/Leipzig/E267-accidentalNaturalFlat.xml | 1 - data/Leipzig/E268-accidentalNaturalSharp.xml | 1 - data/Leipzig/E269-accidentalSharpSharp.xml | 1 - data/Leipzig/E26A-accidentalParensLeft.xml | 1 - data/Leipzig/E26B-accidentalParensRight.xml | 1 - data/Leipzig/E26C-accidentalBracketLeft.xml | 1 - data/Leipzig/E26D-accidentalBracketRight.xml | 1 - .../E270-accidentalQuarterToneFlatArrowUp.xml | 1 - ...cidentalThreeQuarterTonesFlatArrowDown.xml | 1 - ...cidentalQuarterToneSharpNaturalArrowUp.xml | 1 - ...identalQuarterToneFlatNaturalArrowDown.xml | 1 - ...ccidentalThreeQuarterTonesSharpArrowUp.xml | 1 - ...75-accidentalQuarterToneSharpArrowDown.xml | 1 - .../E280-accidentalQuarterToneFlatStein.xml | 1 - ...identalThreeQuarterTonesFlatZimmermann.xml | 1 - .../E282-accidentalQuarterToneSharpStein.xml | 1 - ...-accidentalThreeQuarterTonesSharpStein.xml | 1 - .../E440-accidentalBuyukMucennebFlat.xml | 1 - .../E441-accidentalKucukMucennebFlat.xml | 1 - data/Leipzig/E442-accidentalBakiyeFlat.xml | 1 - data/Leipzig/E443-accidentalKomaFlat.xml | 1 - data/Leipzig/E444-accidentalKomaSharp.xml | 1 - data/Leipzig/E445-accidentalBakiyeSharp.xml | 1 - .../E446-accidentalKucukMucennebSharp.xml | 1 - .../E447-accidentalBuyukMucennebSharp.xml | 1 - data/Leipzig/E4A0-articAccentAbove.xml | 1 - data/Leipzig/E4A1-articAccentBelow.xml | 1 - data/Leipzig/E4A2-articStaccatoAbove.xml | 1 - data/Leipzig/E4A3-articStaccatoBelow.xml | 1 - data/Leipzig/E4A4-articTenutoAbove.xml | 1 - data/Leipzig/E4A5-articTenutoBelow.xml | 1 - data/Leipzig/E4A6-articStaccatissimoAbove.xml | 1 - data/Leipzig/E4A7-articStaccatissimoBelow.xml | 1 - .../E4A8-articStaccatissimoWedgeAbove.xml | 1 - .../E4A9-articStaccatissimoWedgeBelow.xml | 1 - .../E4AA-articStaccatissimoStrokeAbove.xml | 1 - .../E4AB-articStaccatissimoStrokeBelow.xml | 1 - data/Leipzig/E4AC-articMarcatoAbove.xml | 1 - data/Leipzig/E4AD-articMarcatoBelow.xml | 1 - .../E4AE-articMarcatoStaccatoAbove.xml | 1 - .../E4AF-articMarcatoStaccatoBelow.xml | 1 - .../Leipzig/E4B0-articAccentStaccatoAbove.xml | 1 - .../Leipzig/E4B1-articAccentStaccatoBelow.xml | 1 - .../Leipzig/E4B2-articTenutoStaccatoAbove.xml | 1 - .../Leipzig/E4B3-articTenutoStaccatoBelow.xml | 1 - data/Leipzig/E4B4-articTenutoAccentAbove.xml | 1 - data/Leipzig/E4B5-articTenutoAccentBelow.xml | 1 - data/Leipzig/E4B6-articStressAbove.xml | 1 - data/Leipzig/E4B7-articStressBelow.xml | 1 - data/Leipzig/E4B8-articUnstressAbove.xml | 1 - data/Leipzig/E4B9-articUnstressBelow.xml | 1 - data/Leipzig/E4BA-articLaissezVibrerAbove.xml | 1 - data/Leipzig/E4BB-articLaissezVibrerBelow.xml | 1 - data/Leipzig/E4BC-articMarcatoTenutoAbove.xml | 1 - data/Leipzig/E4BD-articMarcatoTenutoBelow.xml | 1 - data/Leipzig/E4C0-fermataAbove.xml | 1 - data/Leipzig/E4C1-fermataBelow.xml | 1 - data/Leipzig/E4C2-fermataVeryShortAbove.xml | 1 - data/Leipzig/E4C3-fermataVeryShortBelow.xml | 1 - data/Leipzig/E4C4-fermataShortAbove.xml | 1 - data/Leipzig/E4C5-fermataShortBelow.xml | 1 - data/Leipzig/E4C6-fermataLongAbove.xml | 1 - data/Leipzig/E4C7-fermataLongBelow.xml | 1 - data/Leipzig/E4C8-fermataVeryLongAbove.xml | 1 - data/Leipzig/E4C9-fermataVeryLongBelow.xml | 1 - data/Leipzig/E4CE-breathMarkComma.xml | 1 - data/Leipzig/E4E0-restMaxima.xml | 1 - data/Leipzig/E4E1-restLonga.xml | 1 - data/Leipzig/E4E2-restDoubleWhole.xml | 1 - data/Leipzig/E4E3-restWhole.xml | 1 - data/Leipzig/E4E4-restHalf.xml | 1 - data/Leipzig/E4E5-restQuarter.xml | 1 - data/Leipzig/E4E6-rest8th.xml | 1 - data/Leipzig/E4E7-rest16th.xml | 1 - data/Leipzig/E4E8-rest32nd.xml | 1 - data/Leipzig/E4E9-rest64th.xml | 1 - data/Leipzig/E4EA-rest128th.xml | 1 - data/Leipzig/E4EB-rest256th.xml | 1 - data/Leipzig/E4EC-rest512th.xml | 1 - data/Leipzig/E4ED-rest1024th.xml | 1 - data/Leipzig/E4F2-restQuarterOld.xml | 1 - data/Leipzig/E4F6-restQuarterZ.xml | 1 - data/Leipzig/E500-repeat1Bar.xml | 1 - data/Leipzig/E501-repeat2Bars.xml | 1 - data/Leipzig/E502-repeat4Bars.xml | 1 - data/Leipzig/E503-repeatBarUpperDot.xml | 1 - data/Leipzig/E504-repeatBarSlash.xml | 1 - data/Leipzig/E505-repeatBarLowerDot.xml | 1 - data/Leipzig/E510-ottava.xml | 1 - data/Leipzig/E511-ottavaAlta.xml | 1 - data/Leipzig/E512-ottavaBassa.xml | 1 - data/Leipzig/E513-ottavaBassaBa.xml | 1 - data/Leipzig/E514-quindicesima.xml | 1 - data/Leipzig/E515-quindicesimaAlta.xml | 1 - data/Leipzig/E516-quindicesimaBassa.xml | 1 - data/Leipzig/E517-ventiduesima.xml | 1 - data/Leipzig/E518-ventiduesimaAlta.xml | 1 - data/Leipzig/E519-ventiduesimaBassa.xml | 1 - data/Leipzig/E51A-octaveParensLeft.xml | 1 - data/Leipzig/E51B-octaveParensRight.xml | 1 - data/Leipzig/E51C-ottavaBassaVb.xml | 1 - data/Leipzig/E51D-quindicesimaBassaMb.xml | 1 - data/Leipzig/E51E-ventiduesimaBassaMb.xml | 1 - data/Leipzig/E520-dynamicPiano.xml | 1 - data/Leipzig/E521-dynamicMezzo.xml | 1 - data/Leipzig/E522-dynamicForte.xml | 1 - data/Leipzig/E523-dynamicRinforzando.xml | 1 - data/Leipzig/E524-dynamicSforzando.xml | 1 - data/Leipzig/E525-dynamicZ.xml | 1 - data/Leipzig/E526-dynamicNiente.xml | 1 - data/Leipzig/E527-dynamicPPPPPP.xml | 1 - data/Leipzig/E528-dynamicPPPPP.xml | 1 - data/Leipzig/E529-dynamicPPPP.xml | 1 - data/Leipzig/E52A-dynamicPPP.xml | 1 - data/Leipzig/E52B-dynamicPP.xml | 1 - data/Leipzig/E52C-dynamicMP.xml | 1 - data/Leipzig/E52D-dynamicMF.xml | 1 - data/Leipzig/E52E-dynamicPF.xml | 1 - data/Leipzig/E52F-dynamicFF.xml | 1 - data/Leipzig/E530-dynamicFFF.xml | 1 - data/Leipzig/E531-dynamicFFFF.xml | 1 - data/Leipzig/E532-dynamicFFFFF.xml | 1 - data/Leipzig/E533-dynamicFFFFFF.xml | 1 - data/Leipzig/E534-dynamicFortePiano.xml | 1 - data/Leipzig/E535-dynamicForzando.xml | 1 - data/Leipzig/E536-dynamicSforzando1.xml | 1 - data/Leipzig/E537-dynamicSforzandoPiano.xml | 1 - .../E538-dynamicSforzandoPianissimo.xml | 1 - data/Leipzig/E539-dynamicSforzato.xml | 1 - data/Leipzig/E53A-dynamicSforzatoPiano.xml | 1 - data/Leipzig/E53B-dynamicSforzatoFF.xml | 1 - data/Leipzig/E53C-dynamicRinforzando1.xml | 1 - data/Leipzig/E53D-dynamicRinforzando2.xml | 1 - data/Leipzig/E566-ornamentTrill.xml | 1 - data/Leipzig/E567-ornamentTurn.xml | 1 - data/Leipzig/E568-ornamentTurnInverted.xml | 1 - data/Leipzig/E569-ornamentTurnSlash.xml | 1 - data/Leipzig/E56A-ornamentTurnUp.xml | 1 - data/Leipzig/E56B-ornamentTurnUpS.xml | 1 - data/Leipzig/E56C-ornamentShortTrill.xml | 1 - data/Leipzig/E56D-ornamentMordent.xml | 1 - data/Leipzig/E56E-ornamentTremblement.xml | 1 - data/Leipzig/E56F-ornamentHaydn.xml | 1 - data/Leipzig/E583-ornamentVerticalLine.xml | 1 - data/Leipzig/E587-ornamentSchleifer.xml | 1 - .../E59D-ornamentZigZagLineNoRightEnd.xml | 1 - .../E59E-ornamentZigZagLineWithRightEnd.xml | 1 - data/Leipzig/E5B0-ornamentPrecompSlide.xml | 1 - .../E5B1-ornamentPrecompDescendingSlide.xml | 1 - .../E5B2-ornamentPrecompAppoggTrill.xml | 1 - .../E5B3-ornamentPrecompAppoggTrillSuffix.xml | 1 - ...5B4-ornamentPrecompTurnTrillDAnglebert.xml | 1 - ...B5-ornamentPrecompSlideTrillDAnglebert.xml | 1 - .../E5B6-ornamentPrecompSlideTrillMarpurg.xml | 1 - .../E5B7-ornamentPrecompTurnTrillBach.xml | 1 - .../E5B8-ornamentPrecompSlideTrillBach.xml | 1 - .../E5B9-ornamentPrecompSlideTrillMuffat.xml | 1 - ...-ornamentPrecompSlideTrillSuffixMuffat.xml | 1 - ...5BB-ornamentPrecompTrillSuffixDandrieu.xml | 1 - .../E5BC-ornamentPrecompPortDeVoixMordent.xml | 1 - .../E5BD-ornamentPrecompTrillWithMordent.xml | 1 - data/Leipzig/E5BE-ornamentPrecompCadence.xml | 1 - .../E5BF-ornamentPrecompCadenceWithTurn.xml | 1 - ...rnamentPrecompDoubleCadenceLowerPrefix.xml | 1 - ...E5C1-ornamentPrecompCadenceUpperPrefix.xml | 1 - ...-ornamentPrecompCadenceUpperPrefixTurn.xml | 1 - ...rnamentPrecompDoubleCadenceUpperPrefix.xml | 1 - ...entPrecompDoubleCadenceUpperPrefixTurn.xml | 1 - .../E5C5-ornamentPrecompMordentRelease.xml | 1 - ...E5C6-ornamentPrecompMordentUpperPrefix.xml | 1 - ...amentPrecompInvertedMordentUpperPrefix.xml | 1 - .../E5C8-ornamentPrecompTrillLowerSuffix.xml | 1 - data/Leipzig/E5E5-brassMuteClosed.xml | 1 - data/Leipzig/E5E6-brassMuteHalfClosed.xml | 1 - data/Leipzig/E5E7-brassMuteOpen.xml | 1 - data/Leipzig/E610-stringsDownBow.xml | 1 - data/Leipzig/E611-stringsDownBowTurned.xml | 1 - data/Leipzig/E612-stringsUpBow.xml | 1 - data/Leipzig/E613-stringsUpBowTurned.xml | 1 - data/Leipzig/E614-stringsHarmonic.xml | 1 - .../E630-pluckedSnapPizzicatoBelow.xml | 1 - .../E631-pluckedSnapPizzicatoAbove.xml | 1 - data/Leipzig/E632-pluckedBuzzPizzicato.xml | 1 - .../Leipzig/E633-pluckedLeftHandPizzicato.xml | 1 - data/Leipzig/E638-pluckedDamp.xml | 1 - data/Leipzig/E645-vocalSprechgesang.xml | 1 - data/Leipzig/E650-keyboardPedalPed.xml | 1 - data/Leipzig/E651-keyboardPedalP.xml | 1 - data/Leipzig/E655-keyboardPedalUp.xml | 1 - data/Leipzig/E659-keyboardPedalSost.xml | 1 - data/Leipzig/E65A-keyboardPedalS.xml | 1 - data/Leipzig/E880-tuplet0.xml | 1 - data/Leipzig/E881-tuplet1.xml | 1 - data/Leipzig/E882-tuplet2.xml | 1 - data/Leipzig/E883-tuplet3.xml | 1 - data/Leipzig/E884-tuplet4.xml | 1 - data/Leipzig/E885-tuplet5.xml | 1 - data/Leipzig/E886-tuplet6.xml | 1 - data/Leipzig/E887-tuplet7.xml | 1 - data/Leipzig/E888-tuplet8.xml | 1 - data/Leipzig/E889-tuplet9.xml | 1 - data/Leipzig/E88A-tupletColon.xml | 1 - data/Leipzig/E901-mensuralGclefPetrucci.xml | 1 - data/Leipzig/E902-chantFclef.xml | 1 - data/Leipzig/E904-mensuralFclefPetrucci.xml | 1 - data/Leipzig/E906-chantCclef.xml | 1 - .../E907-mensuralCclefPetrucciPosLowest.xml | 1 - .../E908-mensuralCclefPetrucciPosLow.xml | 1 - .../E909-mensuralCclefPetrucciPosMiddle.xml | 1 - .../E90A-mensuralCclefPetrucciPosHigh.xml | 1 - .../E90B-mensuralCclefPetrucciPosHighest.xml | 1 - data/Leipzig/E910-mensuralProlation1.xml | 1 - data/Leipzig/E911-mensuralProlation2.xml | 1 - data/Leipzig/E912-mensuralProlation3.xml | 1 - data/Leipzig/E913-mensuralProlation4.xml | 1 - data/Leipzig/E914-mensuralProlation5.xml | 1 - data/Leipzig/E915-mensuralProlation6.xml | 1 - data/Leipzig/E916-mensuralProlation7.xml | 1 - data/Leipzig/E917-mensuralProlation8.xml | 1 - data/Leipzig/E918-mensuralProlation9.xml | 1 - data/Leipzig/E919-mensuralProlation10.xml | 1 - data/Leipzig/E91A-mensuralProlation11.xml | 1 - ...E91B-mensuralProportionTempusPerfectum.xml | 1 - ...E91C-mensuralProportionProportioDupla1.xml | 1 - ...E91D-mensuralProportionProportioDupla2.xml | 1 - ...E91E-mensuralProportionProportioTripla.xml | 1 - ...F-mensuralProportionProportioQuadrupla.xml | 1 - .../E920-mensuralProlationCombiningDot.xml | 1 - ...E921-mensuralProlationCombiningTwoDots.xml | 1 - ...22-mensuralProlationCombiningThreeDots.xml | 1 - ...mensuralProlationCombiningThreeDotsTri.xml | 1 - ...E924-mensuralProlationCombiningDotVoid.xml | 1 - .../E925-mensuralProlationCombiningStroke.xml | 1 - .../E938-mensuralNoteheadSemibrevisBlack.xml | 1 - .../E939-mensuralNoteheadSemibrevisVoid.xml | 1 - .../E93C-mensuralNoteheadMinimaWhite.xml | 1 - .../E93D-mensuralNoteheadSemiminimaWhite.xml | 1 - data/Leipzig/E93E-mensuralCombStemUp.xml | 1 - data/Leipzig/E93F-mensuralCombStemDown.xml | 1 - .../E949-mensuralCombStemUpFlagSemiminima.xml | 1 - ...94A-mensuralCombStemDownFlagSemiminima.xml | 1 - .../E94B-mensuralCombStemUpFlagFusa.xml | 1 - .../E94C-mensuralCombStemDownFlagFusa.xml | 1 - data/Leipzig/E9E0-medRenFlatSoftB.xml | 1 - data/Leipzig/E9E1-medRenFlatHardB.xml | 1 - data/Leipzig/E9E2-medRenNatural.xml | 1 - data/Leipzig/E9E3-medRenSharpCroix.xml | 1 - data/Leipzig/E9F0-mensuralRestMaxima.xml | 1 - .../E9F1-mensuralRestLongaPerfecta.xml | 1 - .../E9F2-mensuralRestLongaImperfecta.xml | 1 - data/Leipzig/E9F3-mensuralRestBrevis.xml | 1 - data/Leipzig/E9F4-mensuralRestSemibrevis.xml | 1 - data/Leipzig/E9F5-mensuralRestMinima.xml | 1 - data/Leipzig/E9F6-mensuralRestSemiminima.xml | 1 - data/Leipzig/E9F7-mensuralRestFusa.xml | 1 - data/Leipzig/E9F8-mensuralRestSemifusa.xml | 1 - data/Leipzig/EA02-mensuralCustosUp.xml | 1 - .../EA06-chantCustosStemUpPosMiddle.xml | 1 - data/Leipzig/EAA4-wiggleTrill.xml | 1 - data/Leipzig/EAA9-wiggleArpeggiatoUp.xml | 1 - data/Leipzig/EAAA-wiggleArpeggiatoDown.xml | 1 - data/Leipzig/EAAD-wiggleArpeggiatoUpArrow.xml | 1 - .../EAAE-wiggleArpeggiatoDownArrow.xml | 1 - data/Leipzig/EAAF-wiggleGlissando.xml | 1 - data/Leipzig/EBA7-luteDurationWhole.xml | 1 - data/Leipzig/EBA8-luteDurationHalf.xml | 1 - data/Leipzig/EBA9-luteDurationQuarter.xml | 1 - data/Leipzig/EBAA-luteDuration8th.xml | 1 - data/Leipzig/EBAB-luteDuration16th.xml | 1 - data/Leipzig/EBAC-luteDuration32nd.xml | 1 - data/Leipzig/EBC0-luteFrenchFretA.xml | 1 - data/Leipzig/EBC1-luteFrenchFretB.xml | 1 - data/Leipzig/EBC2-luteFrenchFretC.xml | 1 - data/Leipzig/EBC3-luteFrenchFretD.xml | 1 - data/Leipzig/EBC4-luteFrenchFretE.xml | 1 - data/Leipzig/EBC5-luteFrenchFretF.xml | 1 - data/Leipzig/EBC6-luteFrenchFretG.xml | 1 - data/Leipzig/EBC7-luteFrenchFretH.xml | 1 - data/Leipzig/EBC8-luteFrenchFretI.xml | 1 - data/Leipzig/EBC9-luteFrenchFretK.xml | 1 - data/Leipzig/EBCA-luteFrenchFretL.xml | 1 - data/Leipzig/EBCB-luteFrenchFretM.xml | 1 - data/Leipzig/EBCC-luteFrenchFretN.xml | 1 - data/Leipzig/EBE0-luteItalianFret0.xml | 1 - data/Leipzig/EBE1-luteItalianFret1.xml | 1 - data/Leipzig/EBE2-luteItalianFret2.xml | 1 - data/Leipzig/EBE3-luteItalianFret3.xml | 1 - data/Leipzig/EBE4-luteItalianFret4.xml | 1 - data/Leipzig/EBE5-luteItalianFret5.xml | 1 - data/Leipzig/EBE6-luteItalianFret6.xml | 1 - data/Leipzig/EBE7-luteItalianFret7.xml | 1 - data/Leipzig/EBE8-luteItalianFret8.xml | 1 - data/Leipzig/EBE9-luteItalianFret9.xml | 1 - data/Leipzig/ED40-articSoftAccentAbove.xml | 1 - data/Leipzig/ED41-articSoftAccentBelow.xml | 1 - data/Leland.xml | 500 ------------- data/Leland/E000-brace.xml | 1 - data/Leland/E003-bracketTop.xml | 1 - data/Leland/E004-bracketBottom.xml | 1 - data/Leland/E043-repeatDots.xml | 1 - data/Leland/E044-repeatDot.xml | 1 - data/Leland/E047-segno.xml | 1 - data/Leland/E048-coda.xml | 1 - data/Leland/E049-codaSquare.xml | 1 - data/Leland/E04B-segnoSerpent2.xml | 1 - data/Leland/E050-gClef.xml | 1 - data/Leland/E051-gClef15mb.xml | 1 - data/Leland/E052-gClef8vb.xml | 1 - data/Leland/E053-gClef8va.xml | 1 - data/Leland/E054-gClef15ma.xml | 1 - data/Leland/E055-gClef8vbOld.xml | 1 - data/Leland/E05C-cClef.xml | 1 - data/Leland/E05D-cClef8vb.xml | 1 - data/Leland/E062-fClef.xml | 1 - data/Leland/E063-fClef15mb.xml | 1 - data/Leland/E064-fClef8vb.xml | 1 - data/Leland/E065-fClef8va.xml | 1 - data/Leland/E066-fClef15ma.xml | 1 - data/Leland/E069-unpitchedPercussionClef1.xml | 1 - data/Leland/E06A-unpitchedPercussionClef2.xml | 1 - data/Leland/E080-timeSig0.xml | 1 - data/Leland/E081-timeSig1.xml | 1 - data/Leland/E082-timeSig2.xml | 1 - data/Leland/E083-timeSig3.xml | 1 - data/Leland/E084-timeSig4.xml | 1 - data/Leland/E085-timeSig5.xml | 1 - data/Leland/E086-timeSig6.xml | 1 - data/Leland/E087-timeSig7.xml | 1 - data/Leland/E088-timeSig8.xml | 1 - data/Leland/E089-timeSig9.xml | 1 - data/Leland/E08A-timeSigCommon.xml | 1 - data/Leland/E08B-timeSigCutCommon.xml | 1 - data/Leland/E08C-timeSigPlus.xml | 1 - data/Leland/E0A0-noteheadDoubleWhole.xml | 1 - .../Leland/E0A1-noteheadDoubleWholeSquare.xml | 1 - data/Leland/E0A2-noteheadWhole.xml | 1 - data/Leland/E0A3-noteheadHalf.xml | 1 - data/Leland/E0A4-noteheadBlack.xml | 1 - data/Leland/E0A5-noteheadNull.xml | 1 - data/Leland/E0A9-noteheadXBlack.xml | 1 - data/Leland/E0AF-noteheadPlusBlack.xml | 1 - data/Leland/E0D9-noteheadDiamondHalf.xml | 1 - data/Leland/E0DB-noteheadDiamondBlack.xml | 1 - data/Leland/E0F5-noteheadParenthesisLeft.xml | 1 - data/Leland/E0F6-noteheadParenthesisRight.xml | 1 - data/Leland/E220-tremolo1.xml | 1 - data/Leland/E221-tremolo2.xml | 1 - data/Leland/E222-tremolo3.xml | 1 - data/Leland/E223-tremolo4.xml | 1 - data/Leland/E224-tremolo5.xml | 1 - data/Leland/E22A-buzzRoll.xml | 1 - data/Leland/E240-flag8thUp.xml | 1 - data/Leland/E241-flag8thDown.xml | 1 - data/Leland/E242-flag16thUp.xml | 1 - data/Leland/E243-flag16thDown.xml | 1 - data/Leland/E244-flag32ndUp.xml | 1 - data/Leland/E245-flag32ndDown.xml | 1 - data/Leland/E246-flag64thUp.xml | 1 - data/Leland/E247-flag64thDown.xml | 1 - data/Leland/E248-flag128thUp.xml | 1 - data/Leland/E249-flag128thDown.xml | 1 - data/Leland/E24A-flag256thUp.xml | 1 - data/Leland/E24B-flag256thDown.xml | 1 - data/Leland/E24C-flag512thUp.xml | 1 - data/Leland/E24D-flag512thDown.xml | 1 - data/Leland/E24E-flag1024thUp.xml | 1 - data/Leland/E24F-flag1024thDown.xml | 1 - data/Leland/E260-accidentalFlat.xml | 1 - data/Leland/E261-accidentalNatural.xml | 1 - data/Leland/E262-accidentalSharp.xml | 1 - data/Leland/E263-accidentalDoubleSharp.xml | 1 - data/Leland/E264-accidentalDoubleFlat.xml | 1 - data/Leland/E265-accidentalTripleSharp.xml | 1 - data/Leland/E266-accidentalTripleFlat.xml | 1 - data/Leland/E267-accidentalNaturalFlat.xml | 1 - data/Leland/E268-accidentalNaturalSharp.xml | 1 - data/Leland/E269-accidentalSharpSharp.xml | 1 - data/Leland/E26A-accidentalParensLeft.xml | 1 - data/Leland/E26B-accidentalParensRight.xml | 1 - data/Leland/E26C-accidentalBracketLeft.xml | 1 - data/Leland/E26D-accidentalBracketRight.xml | 1 - .../E270-accidentalQuarterToneFlatArrowUp.xml | 1 - ...cidentalThreeQuarterTonesFlatArrowDown.xml | 1 - ...cidentalQuarterToneSharpNaturalArrowUp.xml | 1 - ...identalQuarterToneFlatNaturalArrowDown.xml | 1 - ...ccidentalThreeQuarterTonesSharpArrowUp.xml | 1 - ...75-accidentalQuarterToneSharpArrowDown.xml | 1 - .../E280-accidentalQuarterToneFlatStein.xml | 1 - ...identalThreeQuarterTonesFlatZimmermann.xml | 1 - .../E282-accidentalQuarterToneSharpStein.xml | 1 - ...-accidentalThreeQuarterTonesSharpStein.xml | 1 - .../E440-accidentalBuyukMucennebFlat.xml | 1 - data/Leland/E442-accidentalBakiyeFlat.xml | 1 - .../E446-accidentalKucukMucennebSharp.xml | 1 - .../E447-accidentalBuyukMucennebSharp.xml | 1 - data/Leland/E4A0-articAccentAbove.xml | 1 - data/Leland/E4A1-articAccentBelow.xml | 1 - data/Leland/E4A2-articStaccatoAbove.xml | 1 - data/Leland/E4A3-articStaccatoBelow.xml | 1 - data/Leland/E4A4-articTenutoAbove.xml | 1 - data/Leland/E4A5-articTenutoBelow.xml | 1 - data/Leland/E4A6-articStaccatissimoAbove.xml | 1 - data/Leland/E4A7-articStaccatissimoBelow.xml | 1 - .../E4A8-articStaccatissimoWedgeAbove.xml | 1 - .../E4A9-articStaccatissimoWedgeBelow.xml | 1 - data/Leland/E4AC-articMarcatoAbove.xml | 1 - data/Leland/E4AD-articMarcatoBelow.xml | 1 - .../Leland/E4AE-articMarcatoStaccatoAbove.xml | 1 - .../Leland/E4AF-articMarcatoStaccatoBelow.xml | 1 - data/Leland/E4B0-articAccentStaccatoAbove.xml | 1 - data/Leland/E4B1-articAccentStaccatoBelow.xml | 1 - data/Leland/E4B2-articTenutoStaccatoAbove.xml | 1 - data/Leland/E4B3-articTenutoStaccatoBelow.xml | 1 - data/Leland/E4B4-articTenutoAccentAbove.xml | 1 - data/Leland/E4B5-articTenutoAccentBelow.xml | 1 - data/Leland/E4B6-articStressAbove.xml | 1 - data/Leland/E4B7-articStressBelow.xml | 1 - data/Leland/E4B8-articUnstressAbove.xml | 1 - data/Leland/E4B9-articUnstressBelow.xml | 1 - data/Leland/E4BA-articLaissezVibrerAbove.xml | 1 - data/Leland/E4BB-articLaissezVibrerBelow.xml | 1 - data/Leland/E4BC-articMarcatoTenutoAbove.xml | 1 - data/Leland/E4BD-articMarcatoTenutoBelow.xml | 1 - data/Leland/E4C0-fermataAbove.xml | 1 - data/Leland/E4C1-fermataBelow.xml | 1 - data/Leland/E4C4-fermataShortAbove.xml | 1 - data/Leland/E4C5-fermataShortBelow.xml | 1 - data/Leland/E4C6-fermataLongAbove.xml | 1 - data/Leland/E4C7-fermataLongBelow.xml | 1 - data/Leland/E4C8-fermataVeryLongAbove.xml | 1 - data/Leland/E4C9-fermataVeryLongBelow.xml | 1 - data/Leland/E4CE-breathMarkComma.xml | 1 - data/Leland/E4E0-restMaxima.xml | 1 - data/Leland/E4E1-restLonga.xml | 1 - data/Leland/E4E2-restDoubleWhole.xml | 1 - data/Leland/E4E3-restWhole.xml | 1 - data/Leland/E4E4-restHalf.xml | 1 - data/Leland/E4E5-restQuarter.xml | 1 - data/Leland/E4E6-rest8th.xml | 1 - data/Leland/E4E7-rest16th.xml | 1 - data/Leland/E4E8-rest32nd.xml | 1 - data/Leland/E4E9-rest64th.xml | 1 - data/Leland/E4EA-rest128th.xml | 1 - data/Leland/E4EB-rest256th.xml | 1 - data/Leland/E4EC-rest512th.xml | 1 - data/Leland/E4ED-rest1024th.xml | 1 - data/Leland/E4F2-restQuarterOld.xml | 1 - data/Leland/E4F6-restQuarterZ.xml | 1 - data/Leland/E500-repeat1Bar.xml | 1 - data/Leland/E501-repeat2Bars.xml | 1 - data/Leland/E502-repeat4Bars.xml | 1 - data/Leland/E503-repeatBarUpperDot.xml | 1 - data/Leland/E504-repeatBarSlash.xml | 1 - data/Leland/E505-repeatBarLowerDot.xml | 1 - data/Leland/E510-ottava.xml | 1 - data/Leland/E511-ottavaAlta.xml | 1 - data/Leland/E512-ottavaBassa.xml | 1 - data/Leland/E513-ottavaBassaBa.xml | 1 - data/Leland/E514-quindicesima.xml | 1 - data/Leland/E515-quindicesimaAlta.xml | 1 - data/Leland/E516-quindicesimaBassa.xml | 1 - data/Leland/E517-ventiduesima.xml | 1 - data/Leland/E518-ventiduesimaAlta.xml | 1 - data/Leland/E519-ventiduesimaBassa.xml | 1 - data/Leland/E51A-octaveParensLeft.xml | 1 - data/Leland/E51B-octaveParensRight.xml | 1 - data/Leland/E51C-ottavaBassaVb.xml | 1 - data/Leland/E51D-quindicesimaBassaMb.xml | 1 - data/Leland/E51E-ventiduesimaBassaMb.xml | 1 - data/Leland/E520-dynamicPiano.xml | 1 - data/Leland/E521-dynamicMezzo.xml | 1 - data/Leland/E522-dynamicForte.xml | 1 - data/Leland/E523-dynamicRinforzando.xml | 1 - data/Leland/E524-dynamicSforzando.xml | 1 - data/Leland/E525-dynamicZ.xml | 1 - data/Leland/E526-dynamicNiente.xml | 1 - data/Leland/E527-dynamicPPPPPP.xml | 1 - data/Leland/E528-dynamicPPPPP.xml | 1 - data/Leland/E529-dynamicPPPP.xml | 1 - data/Leland/E52A-dynamicPPP.xml | 1 - data/Leland/E52B-dynamicPP.xml | 1 - data/Leland/E52C-dynamicMP.xml | 1 - data/Leland/E52D-dynamicMF.xml | 1 - data/Leland/E52E-dynamicPF.xml | 1 - data/Leland/E52F-dynamicFF.xml | 1 - data/Leland/E530-dynamicFFF.xml | 1 - data/Leland/E531-dynamicFFFF.xml | 1 - data/Leland/E532-dynamicFFFFF.xml | 1 - data/Leland/E533-dynamicFFFFFF.xml | 1 - data/Leland/E534-dynamicFortePiano.xml | 1 - data/Leland/E535-dynamicForzando.xml | 1 - data/Leland/E536-dynamicSforzando1.xml | 1 - data/Leland/E537-dynamicSforzandoPiano.xml | 1 - .../E538-dynamicSforzandoPianissimo.xml | 1 - data/Leland/E539-dynamicSforzato.xml | 1 - data/Leland/E53A-dynamicSforzatoPiano.xml | 1 - data/Leland/E53B-dynamicSforzatoFF.xml | 1 - data/Leland/E53C-dynamicRinforzando1.xml | 1 - data/Leland/E53D-dynamicRinforzando2.xml | 1 - data/Leland/E566-ornamentTrill.xml | 1 - data/Leland/E567-ornamentTurn.xml | 1 - data/Leland/E568-ornamentTurnInverted.xml | 1 - data/Leland/E569-ornamentTurnSlash.xml | 1 - data/Leland/E56A-ornamentTurnUp.xml | 1 - data/Leland/E56B-ornamentTurnUpS.xml | 1 - data/Leland/E56C-ornamentShortTrill.xml | 1 - data/Leland/E56D-ornamentMordent.xml | 1 - data/Leland/E56E-ornamentTremblement.xml | 1 - data/Leland/E56F-ornamentHaydn.xml | 1 - data/Leland/E583-ornamentVerticalLine.xml | 1 - data/Leland/E587-ornamentSchleifer.xml | 1 - .../E59D-ornamentZigZagLineNoRightEnd.xml | 1 - .../E59E-ornamentZigZagLineWithRightEnd.xml | 1 - .../E5B2-ornamentPrecompAppoggTrill.xml | 1 - ...B5-ornamentPrecompSlideTrillDAnglebert.xml | 1 - .../E5B8-ornamentPrecompSlideTrillBach.xml | 1 - ...5BB-ornamentPrecompTrillSuffixDandrieu.xml | 1 - .../E5BC-ornamentPrecompPortDeVoixMordent.xml | 1 - .../E5BD-ornamentPrecompTrillWithMordent.xml | 1 - data/Leland/E5BE-ornamentPrecompCadence.xml | 1 - ...rnamentPrecompDoubleCadenceLowerPrefix.xml | 1 - ...rnamentPrecompDoubleCadenceUpperPrefix.xml | 1 - ...E5C6-ornamentPrecompMordentUpperPrefix.xml | 1 - ...amentPrecompInvertedMordentUpperPrefix.xml | 1 - .../E5C8-ornamentPrecompTrillLowerSuffix.xml | 1 - data/Leland/E5E5-brassMuteClosed.xml | 1 - data/Leland/E5E6-brassMuteHalfClosed.xml | 1 - data/Leland/E5E7-brassMuteOpen.xml | 1 - data/Leland/E610-stringsDownBow.xml | 1 - data/Leland/E611-stringsDownBowTurned.xml | 1 - data/Leland/E612-stringsUpBow.xml | 1 - data/Leland/E613-stringsUpBowTurned.xml | 1 - data/Leland/E614-stringsHarmonic.xml | 1 - .../Leland/E630-pluckedSnapPizzicatoBelow.xml | 1 - .../Leland/E631-pluckedSnapPizzicatoAbove.xml | 1 - data/Leland/E632-pluckedBuzzPizzicato.xml | 1 - data/Leland/E650-keyboardPedalPed.xml | 1 - data/Leland/E651-keyboardPedalP.xml | 1 - data/Leland/E655-keyboardPedalUp.xml | 1 - data/Leland/E880-tuplet0.xml | 1 - data/Leland/E881-tuplet1.xml | 1 - data/Leland/E882-tuplet2.xml | 1 - data/Leland/E883-tuplet3.xml | 1 - data/Leland/E884-tuplet4.xml | 1 - data/Leland/E885-tuplet5.xml | 1 - data/Leland/E886-tuplet6.xml | 1 - data/Leland/E887-tuplet7.xml | 1 - data/Leland/E888-tuplet8.xml | 1 - data/Leland/E889-tuplet9.xml | 1 - data/Leland/E88A-tupletColon.xml | 1 - .../E93C-mensuralNoteheadMinimaWhite.xml | 1 - .../E93D-mensuralNoteheadSemiminimaWhite.xml | 1 - data/Leland/EAA4-wiggleTrill.xml | 1 - data/Leland/EAA9-wiggleArpeggiatoUp.xml | 1 - data/Leland/EAAA-wiggleArpeggiatoDown.xml | 1 - data/Leland/EAAD-wiggleArpeggiatoUpArrow.xml | 1 - .../Leland/EAAE-wiggleArpeggiatoDownArrow.xml | 1 - data/Petaluma.xml | 599 --------------- data/Petaluma/E000-brace.xml | 1 - data/Petaluma/E003-bracketTop.xml | 1 - data/Petaluma/E004-bracketBottom.xml | 1 - data/Petaluma/E043-repeatDots.xml | 1 - data/Petaluma/E044-repeatDot.xml | 1 - data/Petaluma/E045-dalSegno.xml | 1 - data/Petaluma/E046-daCapo.xml | 1 - data/Petaluma/E047-segno.xml | 1 - data/Petaluma/E048-coda.xml | 1 - data/Petaluma/E049-codaSquare.xml | 1 - data/Petaluma/E04B-segnoSerpent2.xml | 1 - data/Petaluma/E050-gClef.xml | 1 - data/Petaluma/E051-gClef15mb.xml | 1 - data/Petaluma/E052-gClef8vb.xml | 1 - data/Petaluma/E053-gClef8va.xml | 1 - data/Petaluma/E054-gClef15ma.xml | 1 - data/Petaluma/E055-gClef8vbOld.xml | 1 - data/Petaluma/E056-gClef8vbCClef.xml | 1 - data/Petaluma/E05C-cClef.xml | 1 - data/Petaluma/E05D-cClef8vb.xml | 1 - data/Petaluma/E062-fClef.xml | 1 - data/Petaluma/E063-fClef15mb.xml | 1 - data/Petaluma/E064-fClef8vb.xml | 1 - data/Petaluma/E065-fClef8va.xml | 1 - data/Petaluma/E066-fClef15ma.xml | 1 - .../E069-unpitchedPercussionClef1.xml | 1 - .../E06A-unpitchedPercussionClef2.xml | 1 - data/Petaluma/E073-gClefReversed.xml | 1 - data/Petaluma/E074-gClefTurned.xml | 1 - data/Petaluma/E075-cClefReversed.xml | 1 - data/Petaluma/E076-fClefReversed.xml | 1 - data/Petaluma/E077-fClefTurned.xml | 1 - data/Petaluma/E080-timeSig0.xml | 1 - data/Petaluma/E081-timeSig1.xml | 1 - data/Petaluma/E082-timeSig2.xml | 1 - data/Petaluma/E083-timeSig3.xml | 1 - data/Petaluma/E084-timeSig4.xml | 1 - data/Petaluma/E085-timeSig5.xml | 1 - data/Petaluma/E086-timeSig6.xml | 1 - data/Petaluma/E087-timeSig7.xml | 1 - data/Petaluma/E088-timeSig8.xml | 1 - data/Petaluma/E089-timeSig9.xml | 1 - data/Petaluma/E08A-timeSigCommon.xml | 1 - data/Petaluma/E08B-timeSigCutCommon.xml | 1 - data/Petaluma/E08C-timeSigPlus.xml | 1 - data/Petaluma/E08D-timeSigPlusSmall.xml | 1 - data/Petaluma/E08E-timeSigFractionalSlash.xml | 1 - data/Petaluma/E08F-timeSigEquals.xml | 1 - data/Petaluma/E090-timeSigMinus.xml | 1 - data/Petaluma/E091-timeSigMultiply.xml | 1 - data/Petaluma/E092-timeSigParensLeftSmall.xml | 1 - .../Petaluma/E093-timeSigParensRightSmall.xml | 1 - data/Petaluma/E094-timeSigParensLeft.xml | 1 - data/Petaluma/E095-timeSigParensRight.xml | 1 - data/Petaluma/E0A0-noteheadDoubleWhole.xml | 1 - .../E0A1-noteheadDoubleWholeSquare.xml | 1 - data/Petaluma/E0A2-noteheadWhole.xml | 1 - data/Petaluma/E0A3-noteheadHalf.xml | 1 - data/Petaluma/E0A4-noteheadBlack.xml | 1 - data/Petaluma/E0A5-noteheadNull.xml | 1 - data/Petaluma/E0A9-noteheadXBlack.xml | 1 - data/Petaluma/E0AF-noteheadPlusBlack.xml | 1 - data/Petaluma/E0B5-noteheadWholeWithX.xml | 1 - data/Petaluma/E0B6-noteheadHalfWithX.xml | 1 - data/Petaluma/E0B7-noteheadVoidWithX.xml | 1 - data/Petaluma/E0D9-noteheadDiamondHalf.xml | 1 - .../Petaluma/E0DA-noteheadDiamondHalfWide.xml | 1 - data/Petaluma/E0DB-noteheadDiamondBlack.xml | 1 - .../E0DC-noteheadDiamondBlackWide.xml | 1 - data/Petaluma/E0DD-noteheadDiamondWhite.xml | 1 - .../E0DE-noteheadDiamondWhiteWide.xml | 1 - .../Petaluma/E0F5-noteheadParenthesisLeft.xml | 1 - .../E0F6-noteheadParenthesisRight.xml | 1 - data/Petaluma/E0FA-noteheadWholeFilled.xml | 1 - .../E101-noteheadSlashHorizontalEnds.xml | 1 - .../Petaluma/E102-noteheadSlashWhiteWhole.xml | 1 - data/Petaluma/E103-noteheadSlashWhiteHalf.xml | 1 - data/Petaluma/E220-tremolo1.xml | 1 - data/Petaluma/E221-tremolo2.xml | 1 - data/Petaluma/E222-tremolo3.xml | 1 - data/Petaluma/E223-tremolo4.xml | 1 - data/Petaluma/E224-tremolo5.xml | 1 - data/Petaluma/E22A-buzzRoll.xml | 1 - data/Petaluma/E240-flag8thUp.xml | 1 - data/Petaluma/E241-flag8thDown.xml | 1 - data/Petaluma/E242-flag16thUp.xml | 1 - data/Petaluma/E243-flag16thDown.xml | 1 - data/Petaluma/E244-flag32ndUp.xml | 1 - data/Petaluma/E245-flag32ndDown.xml | 1 - data/Petaluma/E246-flag64thUp.xml | 1 - data/Petaluma/E247-flag64thDown.xml | 1 - data/Petaluma/E248-flag128thUp.xml | 1 - data/Petaluma/E249-flag128thDown.xml | 1 - data/Petaluma/E24A-flag256thUp.xml | 1 - data/Petaluma/E24B-flag256thDown.xml | 1 - data/Petaluma/E24C-flag512thUp.xml | 1 - data/Petaluma/E24D-flag512thDown.xml | 1 - data/Petaluma/E24E-flag1024thUp.xml | 1 - data/Petaluma/E24F-flag1024thDown.xml | 1 - data/Petaluma/E260-accidentalFlat.xml | 1 - data/Petaluma/E261-accidentalNatural.xml | 1 - data/Petaluma/E262-accidentalSharp.xml | 1 - data/Petaluma/E263-accidentalDoubleSharp.xml | 1 - data/Petaluma/E264-accidentalDoubleFlat.xml | 1 - data/Petaluma/E265-accidentalTripleSharp.xml | 1 - data/Petaluma/E266-accidentalTripleFlat.xml | 1 - data/Petaluma/E267-accidentalNaturalFlat.xml | 1 - data/Petaluma/E268-accidentalNaturalSharp.xml | 1 - data/Petaluma/E269-accidentalSharpSharp.xml | 1 - data/Petaluma/E26A-accidentalParensLeft.xml | 1 - data/Petaluma/E26B-accidentalParensRight.xml | 1 - data/Petaluma/E26C-accidentalBracketLeft.xml | 1 - data/Petaluma/E26D-accidentalBracketRight.xml | 1 - .../E270-accidentalQuarterToneFlatArrowUp.xml | 1 - ...cidentalThreeQuarterTonesFlatArrowDown.xml | 1 - ...cidentalQuarterToneSharpNaturalArrowUp.xml | 1 - ...identalQuarterToneFlatNaturalArrowDown.xml | 1 - ...ccidentalThreeQuarterTonesSharpArrowUp.xml | 1 - ...75-accidentalQuarterToneSharpArrowDown.xml | 1 - .../E280-accidentalQuarterToneFlatStein.xml | 1 - ...identalThreeQuarterTonesFlatZimmermann.xml | 1 - .../E282-accidentalQuarterToneSharpStein.xml | 1 - ...-accidentalThreeQuarterTonesSharpStein.xml | 1 - .../E440-accidentalBuyukMucennebFlat.xml | 1 - .../E441-accidentalKucukMucennebFlat.xml | 1 - data/Petaluma/E442-accidentalBakiyeFlat.xml | 1 - data/Petaluma/E443-accidentalKomaFlat.xml | 1 - data/Petaluma/E444-accidentalKomaSharp.xml | 1 - data/Petaluma/E445-accidentalBakiyeSharp.xml | 1 - .../E446-accidentalKucukMucennebSharp.xml | 1 - .../E447-accidentalBuyukMucennebSharp.xml | 1 - data/Petaluma/E4A0-articAccentAbove.xml | 1 - data/Petaluma/E4A1-articAccentBelow.xml | 1 - data/Petaluma/E4A2-articStaccatoAbove.xml | 1 - data/Petaluma/E4A3-articStaccatoBelow.xml | 1 - data/Petaluma/E4A4-articTenutoAbove.xml | 1 - data/Petaluma/E4A5-articTenutoBelow.xml | 1 - .../Petaluma/E4A6-articStaccatissimoAbove.xml | 1 - .../Petaluma/E4A7-articStaccatissimoBelow.xml | 1 - .../E4A8-articStaccatissimoWedgeAbove.xml | 1 - .../E4A9-articStaccatissimoWedgeBelow.xml | 1 - .../E4AA-articStaccatissimoStrokeAbove.xml | 1 - .../E4AB-articStaccatissimoStrokeBelow.xml | 1 - data/Petaluma/E4AC-articMarcatoAbove.xml | 1 - data/Petaluma/E4AD-articMarcatoBelow.xml | 1 - .../E4AE-articMarcatoStaccatoAbove.xml | 1 - .../E4AF-articMarcatoStaccatoBelow.xml | 1 - .../E4B0-articAccentStaccatoAbove.xml | 1 - .../E4B1-articAccentStaccatoBelow.xml | 1 - .../E4B2-articTenutoStaccatoAbove.xml | 1 - .../E4B3-articTenutoStaccatoBelow.xml | 1 - data/Petaluma/E4B4-articTenutoAccentAbove.xml | 1 - data/Petaluma/E4B5-articTenutoAccentBelow.xml | 1 - data/Petaluma/E4B6-articStressAbove.xml | 1 - data/Petaluma/E4B7-articStressBelow.xml | 1 - data/Petaluma/E4B8-articUnstressAbove.xml | 1 - data/Petaluma/E4B9-articUnstressBelow.xml | 1 - .../Petaluma/E4BA-articLaissezVibrerAbove.xml | 1 - .../Petaluma/E4BB-articLaissezVibrerBelow.xml | 1 - .../Petaluma/E4BC-articMarcatoTenutoAbove.xml | 1 - .../Petaluma/E4BD-articMarcatoTenutoBelow.xml | 1 - data/Petaluma/E4C0-fermataAbove.xml | 1 - data/Petaluma/E4C1-fermataBelow.xml | 1 - data/Petaluma/E4C2-fermataVeryShortAbove.xml | 1 - data/Petaluma/E4C3-fermataVeryShortBelow.xml | 1 - data/Petaluma/E4C4-fermataShortAbove.xml | 1 - data/Petaluma/E4C5-fermataShortBelow.xml | 1 - data/Petaluma/E4C6-fermataLongAbove.xml | 1 - data/Petaluma/E4C7-fermataLongBelow.xml | 1 - data/Petaluma/E4C8-fermataVeryLongAbove.xml | 1 - data/Petaluma/E4C9-fermataVeryLongBelow.xml | 1 - data/Petaluma/E4CE-breathMarkComma.xml | 1 - data/Petaluma/E4E0-restMaxima.xml | 1 - data/Petaluma/E4E1-restLonga.xml | 1 - data/Petaluma/E4E2-restDoubleWhole.xml | 1 - data/Petaluma/E4E3-restWhole.xml | 1 - data/Petaluma/E4E4-restHalf.xml | 1 - data/Petaluma/E4E5-restQuarter.xml | 1 - data/Petaluma/E4E6-rest8th.xml | 1 - data/Petaluma/E4E7-rest16th.xml | 1 - data/Petaluma/E4E8-rest32nd.xml | 1 - data/Petaluma/E4E9-rest64th.xml | 1 - data/Petaluma/E4EA-rest128th.xml | 1 - data/Petaluma/E4EB-rest256th.xml | 1 - data/Petaluma/E4EC-rest512th.xml | 1 - data/Petaluma/E4ED-rest1024th.xml | 1 - data/Petaluma/E4F2-restQuarterOld.xml | 1 - data/Petaluma/E4F6-restQuarterZ.xml | 1 - data/Petaluma/E500-repeat1Bar.xml | 1 - data/Petaluma/E501-repeat2Bars.xml | 1 - data/Petaluma/E502-repeat4Bars.xml | 1 - data/Petaluma/E503-repeatBarUpperDot.xml | 1 - data/Petaluma/E504-repeatBarSlash.xml | 1 - data/Petaluma/E505-repeatBarLowerDot.xml | 1 - data/Petaluma/E510-ottava.xml | 1 - data/Petaluma/E511-ottavaAlta.xml | 1 - data/Petaluma/E512-ottavaBassa.xml | 1 - data/Petaluma/E513-ottavaBassaBa.xml | 1 - data/Petaluma/E514-quindicesima.xml | 1 - data/Petaluma/E515-quindicesimaAlta.xml | 1 - data/Petaluma/E516-quindicesimaBassa.xml | 1 - data/Petaluma/E517-ventiduesima.xml | 1 - data/Petaluma/E518-ventiduesimaAlta.xml | 1 - data/Petaluma/E519-ventiduesimaBassa.xml | 1 - data/Petaluma/E51A-octaveParensLeft.xml | 1 - data/Petaluma/E51B-octaveParensRight.xml | 1 - data/Petaluma/E51C-ottavaBassaVb.xml | 1 - data/Petaluma/E51D-quindicesimaBassaMb.xml | 1 - data/Petaluma/E51E-ventiduesimaBassaMb.xml | 1 - data/Petaluma/E520-dynamicPiano.xml | 1 - data/Petaluma/E521-dynamicMezzo.xml | 1 - data/Petaluma/E522-dynamicForte.xml | 1 - data/Petaluma/E523-dynamicRinforzando.xml | 1 - data/Petaluma/E524-dynamicSforzando.xml | 1 - data/Petaluma/E525-dynamicZ.xml | 1 - data/Petaluma/E526-dynamicNiente.xml | 1 - data/Petaluma/E527-dynamicPPPPPP.xml | 1 - data/Petaluma/E528-dynamicPPPPP.xml | 1 - data/Petaluma/E529-dynamicPPPP.xml | 1 - data/Petaluma/E52A-dynamicPPP.xml | 1 - data/Petaluma/E52B-dynamicPP.xml | 1 - data/Petaluma/E52C-dynamicMP.xml | 1 - data/Petaluma/E52D-dynamicMF.xml | 1 - data/Petaluma/E52E-dynamicPF.xml | 1 - data/Petaluma/E52F-dynamicFF.xml | 1 - data/Petaluma/E530-dynamicFFF.xml | 1 - data/Petaluma/E531-dynamicFFFF.xml | 1 - data/Petaluma/E532-dynamicFFFFF.xml | 1 - data/Petaluma/E533-dynamicFFFFFF.xml | 1 - data/Petaluma/E534-dynamicFortePiano.xml | 1 - data/Petaluma/E535-dynamicForzando.xml | 1 - data/Petaluma/E536-dynamicSforzando1.xml | 1 - data/Petaluma/E537-dynamicSforzandoPiano.xml | 1 - .../E538-dynamicSforzandoPianissimo.xml | 1 - data/Petaluma/E539-dynamicSforzato.xml | 1 - data/Petaluma/E53A-dynamicSforzatoPiano.xml | 1 - data/Petaluma/E53B-dynamicSforzatoFF.xml | 1 - data/Petaluma/E53C-dynamicRinforzando1.xml | 1 - data/Petaluma/E53D-dynamicRinforzando2.xml | 1 - data/Petaluma/E566-ornamentTrill.xml | 1 - data/Petaluma/E567-ornamentTurn.xml | 1 - data/Petaluma/E568-ornamentTurnInverted.xml | 1 - data/Petaluma/E569-ornamentTurnSlash.xml | 1 - data/Petaluma/E56A-ornamentTurnUp.xml | 1 - data/Petaluma/E56B-ornamentTurnUpS.xml | 1 - data/Petaluma/E56C-ornamentShortTrill.xml | 1 - data/Petaluma/E56D-ornamentMordent.xml | 1 - data/Petaluma/E56E-ornamentTremblement.xml | 1 - data/Petaluma/E56F-ornamentHaydn.xml | 1 - data/Petaluma/E583-ornamentVerticalLine.xml | 1 - data/Petaluma/E587-ornamentSchleifer.xml | 1 - data/Petaluma/E5B0-ornamentPrecompSlide.xml | 1 - .../E5B1-ornamentPrecompDescendingSlide.xml | 1 - .../E5B2-ornamentPrecompAppoggTrill.xml | 1 - .../E5B3-ornamentPrecompAppoggTrillSuffix.xml | 1 - ...5B4-ornamentPrecompTurnTrillDAnglebert.xml | 1 - ...B5-ornamentPrecompSlideTrillDAnglebert.xml | 1 - .../E5B6-ornamentPrecompSlideTrillMarpurg.xml | 1 - .../E5B7-ornamentPrecompTurnTrillBach.xml | 1 - .../E5B8-ornamentPrecompSlideTrillBach.xml | 1 - .../E5B9-ornamentPrecompSlideTrillMuffat.xml | 1 - ...-ornamentPrecompSlideTrillSuffixMuffat.xml | 1 - ...5BB-ornamentPrecompTrillSuffixDandrieu.xml | 1 - .../E5BC-ornamentPrecompPortDeVoixMordent.xml | 1 - .../E5BD-ornamentPrecompTrillWithMordent.xml | 1 - data/Petaluma/E5BE-ornamentPrecompCadence.xml | 1 - .../E5BF-ornamentPrecompCadenceWithTurn.xml | 1 - ...rnamentPrecompDoubleCadenceLowerPrefix.xml | 1 - ...E5C1-ornamentPrecompCadenceUpperPrefix.xml | 1 - ...-ornamentPrecompCadenceUpperPrefixTurn.xml | 1 - ...rnamentPrecompDoubleCadenceUpperPrefix.xml | 1 - ...entPrecompDoubleCadenceUpperPrefixTurn.xml | 1 - .../E5C5-ornamentPrecompMordentRelease.xml | 1 - ...E5C6-ornamentPrecompMordentUpperPrefix.xml | 1 - ...amentPrecompInvertedMordentUpperPrefix.xml | 1 - .../E5C8-ornamentPrecompTrillLowerSuffix.xml | 1 - data/Petaluma/E5E5-brassMuteClosed.xml | 1 - data/Petaluma/E5E6-brassMuteHalfClosed.xml | 1 - data/Petaluma/E5E7-brassMuteOpen.xml | 1 - data/Petaluma/E610-stringsDownBow.xml | 1 - data/Petaluma/E611-stringsDownBowTurned.xml | 1 - data/Petaluma/E612-stringsUpBow.xml | 1 - data/Petaluma/E613-stringsUpBowTurned.xml | 1 - data/Petaluma/E614-stringsHarmonic.xml | 1 - .../E630-pluckedSnapPizzicatoBelow.xml | 1 - .../E631-pluckedSnapPizzicatoAbove.xml | 1 - data/Petaluma/E632-pluckedBuzzPizzicato.xml | 1 - .../E633-pluckedLeftHandPizzicato.xml | 1 - data/Petaluma/E638-pluckedDamp.xml | 1 - data/Petaluma/E645-vocalSprechgesang.xml | 1 - data/Petaluma/E650-keyboardPedalPed.xml | 1 - data/Petaluma/E651-keyboardPedalP.xml | 1 - data/Petaluma/E655-keyboardPedalUp.xml | 1 - data/Petaluma/E659-keyboardPedalSost.xml | 1 - data/Petaluma/E65A-keyboardPedalS.xml | 1 - data/Petaluma/E880-tuplet0.xml | 1 - data/Petaluma/E881-tuplet1.xml | 1 - data/Petaluma/E882-tuplet2.xml | 1 - data/Petaluma/E883-tuplet3.xml | 1 - data/Petaluma/E884-tuplet4.xml | 1 - data/Petaluma/E885-tuplet5.xml | 1 - data/Petaluma/E886-tuplet6.xml | 1 - data/Petaluma/E887-tuplet7.xml | 1 - data/Petaluma/E888-tuplet8.xml | 1 - data/Petaluma/E889-tuplet9.xml | 1 - data/Petaluma/E88A-tupletColon.xml | 1 - .../E938-mensuralNoteheadSemibrevisBlack.xml | 1 - .../E939-mensuralNoteheadSemibrevisVoid.xml | 1 - .../E93C-mensuralNoteheadMinimaWhite.xml | 1 - .../E93D-mensuralNoteheadSemiminimaWhite.xml | 1 - data/Petaluma/E93E-mensuralCombStemUp.xml | 1 - data/Petaluma/E93F-mensuralCombStemDown.xml | 1 - .../E949-mensuralCombStemUpFlagSemiminima.xml | 1 - ...94A-mensuralCombStemDownFlagSemiminima.xml | 1 - .../E94B-mensuralCombStemUpFlagFusa.xml | 1 - .../E94C-mensuralCombStemDownFlagFusa.xml | 1 - data/Petaluma/EAA4-wiggleTrill.xml | 1 - data/Petaluma/EAA9-wiggleArpeggiatoUp.xml | 1 - data/Petaluma/EAAA-wiggleArpeggiatoDown.xml | 1 - .../Petaluma/EAAD-wiggleArpeggiatoUpArrow.xml | 1 - .../EAAE-wiggleArpeggiatoDownArrow.xml | 1 - data/Petaluma/EAAF-wiggleGlissando.xml | 1 - 1591 files changed, 4370 deletions(-) delete mode 100644 data/Bravura.xml delete mode 100644 data/Bravura/E000-brace.xml delete mode 100644 data/Bravura/E003-bracketTop.xml delete mode 100644 data/Bravura/E004-bracketBottom.xml delete mode 100644 data/Bravura/E043-repeatDots.xml delete mode 100644 data/Bravura/E044-repeatDot.xml delete mode 100644 data/Bravura/E045-dalSegno.xml delete mode 100644 data/Bravura/E046-daCapo.xml delete mode 100644 data/Bravura/E047-segno.xml delete mode 100644 data/Bravura/E048-coda.xml delete mode 100644 data/Bravura/E049-codaSquare.xml delete mode 100644 data/Bravura/E04B-segnoSerpent2.xml delete mode 100644 data/Bravura/E050-gClef.xml delete mode 100644 data/Bravura/E051-gClef15mb.xml delete mode 100644 data/Bravura/E052-gClef8vb.xml delete mode 100644 data/Bravura/E053-gClef8va.xml delete mode 100644 data/Bravura/E054-gClef15ma.xml delete mode 100644 data/Bravura/E055-gClef8vbOld.xml delete mode 100644 data/Bravura/E056-gClef8vbCClef.xml delete mode 100644 data/Bravura/E05C-cClef.xml delete mode 100644 data/Bravura/E05D-cClef8vb.xml delete mode 100644 data/Bravura/E062-fClef.xml delete mode 100644 data/Bravura/E063-fClef15mb.xml delete mode 100644 data/Bravura/E064-fClef8vb.xml delete mode 100644 data/Bravura/E065-fClef8va.xml delete mode 100644 data/Bravura/E066-fClef15ma.xml delete mode 100644 data/Bravura/E069-unpitchedPercussionClef1.xml delete mode 100644 data/Bravura/E06A-unpitchedPercussionClef2.xml delete mode 100644 data/Bravura/E073-gClefReversed.xml delete mode 100644 data/Bravura/E074-gClefTurned.xml delete mode 100644 data/Bravura/E075-cClefReversed.xml delete mode 100644 data/Bravura/E076-fClefReversed.xml delete mode 100644 data/Bravura/E077-fClefTurned.xml delete mode 100644 data/Bravura/E080-timeSig0.xml delete mode 100644 data/Bravura/E081-timeSig1.xml delete mode 100644 data/Bravura/E082-timeSig2.xml delete mode 100644 data/Bravura/E083-timeSig3.xml delete mode 100644 data/Bravura/E084-timeSig4.xml delete mode 100644 data/Bravura/E085-timeSig5.xml delete mode 100644 data/Bravura/E086-timeSig6.xml delete mode 100644 data/Bravura/E087-timeSig7.xml delete mode 100644 data/Bravura/E088-timeSig8.xml delete mode 100644 data/Bravura/E089-timeSig9.xml delete mode 100644 data/Bravura/E08A-timeSigCommon.xml delete mode 100644 data/Bravura/E08B-timeSigCutCommon.xml delete mode 100644 data/Bravura/E08C-timeSigPlus.xml delete mode 100644 data/Bravura/E08D-timeSigPlusSmall.xml delete mode 100644 data/Bravura/E08E-timeSigFractionalSlash.xml delete mode 100644 data/Bravura/E08F-timeSigEquals.xml delete mode 100644 data/Bravura/E090-timeSigMinus.xml delete mode 100644 data/Bravura/E091-timeSigMultiply.xml delete mode 100644 data/Bravura/E092-timeSigParensLeftSmall.xml delete mode 100644 data/Bravura/E093-timeSigParensRightSmall.xml delete mode 100644 data/Bravura/E094-timeSigParensLeft.xml delete mode 100644 data/Bravura/E095-timeSigParensRight.xml delete mode 100644 data/Bravura/E0A0-noteheadDoubleWhole.xml delete mode 100644 data/Bravura/E0A1-noteheadDoubleWholeSquare.xml delete mode 100644 data/Bravura/E0A2-noteheadWhole.xml delete mode 100644 data/Bravura/E0A3-noteheadHalf.xml delete mode 100644 data/Bravura/E0A4-noteheadBlack.xml delete mode 100644 data/Bravura/E0A5-noteheadNull.xml delete mode 100644 data/Bravura/E0A9-noteheadXBlack.xml delete mode 100644 data/Bravura/E0AF-noteheadPlusBlack.xml delete mode 100644 data/Bravura/E0B5-noteheadWholeWithX.xml delete mode 100644 data/Bravura/E0B6-noteheadHalfWithX.xml delete mode 100644 data/Bravura/E0B7-noteheadVoidWithX.xml delete mode 100644 data/Bravura/E0D9-noteheadDiamondHalf.xml delete mode 100644 data/Bravura/E0DA-noteheadDiamondHalfWide.xml delete mode 100644 data/Bravura/E0DB-noteheadDiamondBlack.xml delete mode 100644 data/Bravura/E0DC-noteheadDiamondBlackWide.xml delete mode 100644 data/Bravura/E0DD-noteheadDiamondWhite.xml delete mode 100644 data/Bravura/E0DE-noteheadDiamondWhiteWide.xml delete mode 100644 data/Bravura/E0F5-noteheadParenthesisLeft.xml delete mode 100644 data/Bravura/E0F6-noteheadParenthesisRight.xml delete mode 100644 data/Bravura/E0FA-noteheadWholeFilled.xml delete mode 100644 data/Bravura/E101-noteheadSlashHorizontalEnds.xml delete mode 100644 data/Bravura/E102-noteheadSlashWhiteWhole.xml delete mode 100644 data/Bravura/E103-noteheadSlashWhiteHalf.xml delete mode 100644 data/Bravura/E220-tremolo1.xml delete mode 100644 data/Bravura/E221-tremolo2.xml delete mode 100644 data/Bravura/E222-tremolo3.xml delete mode 100644 data/Bravura/E223-tremolo4.xml delete mode 100644 data/Bravura/E224-tremolo5.xml delete mode 100644 data/Bravura/E22A-buzzRoll.xml delete mode 100644 data/Bravura/E240-flag8thUp.xml delete mode 100644 data/Bravura/E241-flag8thDown.xml delete mode 100644 data/Bravura/E242-flag16thUp.xml delete mode 100644 data/Bravura/E243-flag16thDown.xml delete mode 100644 data/Bravura/E244-flag32ndUp.xml delete mode 100644 data/Bravura/E245-flag32ndDown.xml delete mode 100644 data/Bravura/E246-flag64thUp.xml delete mode 100644 data/Bravura/E247-flag64thDown.xml delete mode 100644 data/Bravura/E248-flag128thUp.xml delete mode 100644 data/Bravura/E249-flag128thDown.xml delete mode 100644 data/Bravura/E24A-flag256thUp.xml delete mode 100644 data/Bravura/E24B-flag256thDown.xml delete mode 100644 data/Bravura/E24C-flag512thUp.xml delete mode 100644 data/Bravura/E24D-flag512thDown.xml delete mode 100644 data/Bravura/E24E-flag1024thUp.xml delete mode 100644 data/Bravura/E24F-flag1024thDown.xml delete mode 100644 data/Bravura/E260-accidentalFlat.xml delete mode 100644 data/Bravura/E261-accidentalNatural.xml delete mode 100644 data/Bravura/E262-accidentalSharp.xml delete mode 100644 data/Bravura/E263-accidentalDoubleSharp.xml delete mode 100644 data/Bravura/E264-accidentalDoubleFlat.xml delete mode 100644 data/Bravura/E265-accidentalTripleSharp.xml delete mode 100644 data/Bravura/E266-accidentalTripleFlat.xml delete mode 100644 data/Bravura/E267-accidentalNaturalFlat.xml delete mode 100644 data/Bravura/E268-accidentalNaturalSharp.xml delete mode 100644 data/Bravura/E269-accidentalSharpSharp.xml delete mode 100644 data/Bravura/E26A-accidentalParensLeft.xml delete mode 100644 data/Bravura/E26B-accidentalParensRight.xml delete mode 100644 data/Bravura/E26C-accidentalBracketLeft.xml delete mode 100644 data/Bravura/E26D-accidentalBracketRight.xml delete mode 100644 data/Bravura/E270-accidentalQuarterToneFlatArrowUp.xml delete mode 100644 data/Bravura/E271-accidentalThreeQuarterTonesFlatArrowDown.xml delete mode 100644 data/Bravura/E272-accidentalQuarterToneSharpNaturalArrowUp.xml delete mode 100644 data/Bravura/E273-accidentalQuarterToneFlatNaturalArrowDown.xml delete mode 100644 data/Bravura/E274-accidentalThreeQuarterTonesSharpArrowUp.xml delete mode 100644 data/Bravura/E275-accidentalQuarterToneSharpArrowDown.xml delete mode 100644 data/Bravura/E280-accidentalQuarterToneFlatStein.xml delete mode 100644 data/Bravura/E281-accidentalThreeQuarterTonesFlatZimmermann.xml delete mode 100644 data/Bravura/E282-accidentalQuarterToneSharpStein.xml delete mode 100644 data/Bravura/E283-accidentalThreeQuarterTonesSharpStein.xml delete mode 100644 data/Bravura/E440-accidentalBuyukMucennebFlat.xml delete mode 100644 data/Bravura/E441-accidentalKucukMucennebFlat.xml delete mode 100644 data/Bravura/E442-accidentalBakiyeFlat.xml delete mode 100644 data/Bravura/E443-accidentalKomaFlat.xml delete mode 100644 data/Bravura/E444-accidentalKomaSharp.xml delete mode 100644 data/Bravura/E445-accidentalBakiyeSharp.xml delete mode 100644 data/Bravura/E446-accidentalKucukMucennebSharp.xml delete mode 100644 data/Bravura/E447-accidentalBuyukMucennebSharp.xml delete mode 100644 data/Bravura/E4A0-articAccentAbove.xml delete mode 100644 data/Bravura/E4A1-articAccentBelow.xml delete mode 100644 data/Bravura/E4A2-articStaccatoAbove.xml delete mode 100644 data/Bravura/E4A3-articStaccatoBelow.xml delete mode 100644 data/Bravura/E4A4-articTenutoAbove.xml delete mode 100644 data/Bravura/E4A5-articTenutoBelow.xml delete mode 100644 data/Bravura/E4A6-articStaccatissimoAbove.xml delete mode 100644 data/Bravura/E4A7-articStaccatissimoBelow.xml delete mode 100644 data/Bravura/E4A8-articStaccatissimoWedgeAbove.xml delete mode 100644 data/Bravura/E4A9-articStaccatissimoWedgeBelow.xml delete mode 100644 data/Bravura/E4AA-articStaccatissimoStrokeAbove.xml delete mode 100644 data/Bravura/E4AB-articStaccatissimoStrokeBelow.xml delete mode 100644 data/Bravura/E4AC-articMarcatoAbove.xml delete mode 100644 data/Bravura/E4AD-articMarcatoBelow.xml delete mode 100644 data/Bravura/E4AE-articMarcatoStaccatoAbove.xml delete mode 100644 data/Bravura/E4AF-articMarcatoStaccatoBelow.xml delete mode 100644 data/Bravura/E4B0-articAccentStaccatoAbove.xml delete mode 100644 data/Bravura/E4B1-articAccentStaccatoBelow.xml delete mode 100644 data/Bravura/E4B2-articTenutoStaccatoAbove.xml delete mode 100644 data/Bravura/E4B3-articTenutoStaccatoBelow.xml delete mode 100644 data/Bravura/E4B4-articTenutoAccentAbove.xml delete mode 100644 data/Bravura/E4B5-articTenutoAccentBelow.xml delete mode 100644 data/Bravura/E4B6-articStressAbove.xml delete mode 100644 data/Bravura/E4B7-articStressBelow.xml delete mode 100644 data/Bravura/E4B8-articUnstressAbove.xml delete mode 100644 data/Bravura/E4B9-articUnstressBelow.xml delete mode 100644 data/Bravura/E4BA-articLaissezVibrerAbove.xml delete mode 100644 data/Bravura/E4BB-articLaissezVibrerBelow.xml delete mode 100644 data/Bravura/E4BC-articMarcatoTenutoAbove.xml delete mode 100644 data/Bravura/E4BD-articMarcatoTenutoBelow.xml delete mode 100644 data/Bravura/E4C0-fermataAbove.xml delete mode 100644 data/Bravura/E4C1-fermataBelow.xml delete mode 100644 data/Bravura/E4C2-fermataVeryShortAbove.xml delete mode 100644 data/Bravura/E4C3-fermataVeryShortBelow.xml delete mode 100644 data/Bravura/E4C4-fermataShortAbove.xml delete mode 100644 data/Bravura/E4C5-fermataShortBelow.xml delete mode 100644 data/Bravura/E4C6-fermataLongAbove.xml delete mode 100644 data/Bravura/E4C7-fermataLongBelow.xml delete mode 100644 data/Bravura/E4C8-fermataVeryLongAbove.xml delete mode 100644 data/Bravura/E4C9-fermataVeryLongBelow.xml delete mode 100644 data/Bravura/E4CE-breathMarkComma.xml delete mode 100644 data/Bravura/E4E0-restMaxima.xml delete mode 100644 data/Bravura/E4E1-restLonga.xml delete mode 100644 data/Bravura/E4E2-restDoubleWhole.xml delete mode 100644 data/Bravura/E4E3-restWhole.xml delete mode 100644 data/Bravura/E4E4-restHalf.xml delete mode 100644 data/Bravura/E4E5-restQuarter.xml delete mode 100644 data/Bravura/E4E6-rest8th.xml delete mode 100644 data/Bravura/E4E7-rest16th.xml delete mode 100644 data/Bravura/E4E8-rest32nd.xml delete mode 100644 data/Bravura/E4E9-rest64th.xml delete mode 100644 data/Bravura/E4EA-rest128th.xml delete mode 100644 data/Bravura/E4EB-rest256th.xml delete mode 100644 data/Bravura/E4EC-rest512th.xml delete mode 100644 data/Bravura/E4ED-rest1024th.xml delete mode 100644 data/Bravura/E4F2-restQuarterOld.xml delete mode 100644 data/Bravura/E4F6-restQuarterZ.xml delete mode 100644 data/Bravura/E500-repeat1Bar.xml delete mode 100644 data/Bravura/E501-repeat2Bars.xml delete mode 100644 data/Bravura/E502-repeat4Bars.xml delete mode 100644 data/Bravura/E503-repeatBarUpperDot.xml delete mode 100644 data/Bravura/E504-repeatBarSlash.xml delete mode 100644 data/Bravura/E505-repeatBarLowerDot.xml delete mode 100644 data/Bravura/E510-ottava.xml delete mode 100644 data/Bravura/E511-ottavaAlta.xml delete mode 100644 data/Bravura/E512-ottavaBassa.xml delete mode 100644 data/Bravura/E513-ottavaBassaBa.xml delete mode 100644 data/Bravura/E514-quindicesima.xml delete mode 100644 data/Bravura/E515-quindicesimaAlta.xml delete mode 100644 data/Bravura/E516-quindicesimaBassa.xml delete mode 100644 data/Bravura/E517-ventiduesima.xml delete mode 100644 data/Bravura/E518-ventiduesimaAlta.xml delete mode 100644 data/Bravura/E519-ventiduesimaBassa.xml delete mode 100644 data/Bravura/E51A-octaveParensLeft.xml delete mode 100644 data/Bravura/E51B-octaveParensRight.xml delete mode 100644 data/Bravura/E51C-ottavaBassaVb.xml delete mode 100644 data/Bravura/E51D-quindicesimaBassaMb.xml delete mode 100644 data/Bravura/E51E-ventiduesimaBassaMb.xml delete mode 100644 data/Bravura/E520-dynamicPiano.xml delete mode 100644 data/Bravura/E521-dynamicMezzo.xml delete mode 100644 data/Bravura/E522-dynamicForte.xml delete mode 100644 data/Bravura/E523-dynamicRinforzando.xml delete mode 100644 data/Bravura/E524-dynamicSforzando.xml delete mode 100644 data/Bravura/E525-dynamicZ.xml delete mode 100644 data/Bravura/E526-dynamicNiente.xml delete mode 100644 data/Bravura/E527-dynamicPPPPPP.xml delete mode 100644 data/Bravura/E528-dynamicPPPPP.xml delete mode 100644 data/Bravura/E529-dynamicPPPP.xml delete mode 100644 data/Bravura/E52A-dynamicPPP.xml delete mode 100644 data/Bravura/E52B-dynamicPP.xml delete mode 100644 data/Bravura/E52C-dynamicMP.xml delete mode 100644 data/Bravura/E52D-dynamicMF.xml delete mode 100644 data/Bravura/E52E-dynamicPF.xml delete mode 100644 data/Bravura/E52F-dynamicFF.xml delete mode 100644 data/Bravura/E530-dynamicFFF.xml delete mode 100644 data/Bravura/E531-dynamicFFFF.xml delete mode 100644 data/Bravura/E532-dynamicFFFFF.xml delete mode 100644 data/Bravura/E533-dynamicFFFFFF.xml delete mode 100644 data/Bravura/E534-dynamicFortePiano.xml delete mode 100644 data/Bravura/E535-dynamicForzando.xml delete mode 100644 data/Bravura/E536-dynamicSforzando1.xml delete mode 100644 data/Bravura/E537-dynamicSforzandoPiano.xml delete mode 100644 data/Bravura/E538-dynamicSforzandoPianissimo.xml delete mode 100644 data/Bravura/E539-dynamicSforzato.xml delete mode 100644 data/Bravura/E53A-dynamicSforzatoPiano.xml delete mode 100644 data/Bravura/E53B-dynamicSforzatoFF.xml delete mode 100644 data/Bravura/E53C-dynamicRinforzando1.xml delete mode 100644 data/Bravura/E53D-dynamicRinforzando2.xml delete mode 100644 data/Bravura/E566-ornamentTrill.xml delete mode 100644 data/Bravura/E567-ornamentTurn.xml delete mode 100644 data/Bravura/E568-ornamentTurnInverted.xml delete mode 100644 data/Bravura/E569-ornamentTurnSlash.xml delete mode 100644 data/Bravura/E56A-ornamentTurnUp.xml delete mode 100644 data/Bravura/E56B-ornamentTurnUpS.xml delete mode 100644 data/Bravura/E56C-ornamentShortTrill.xml delete mode 100644 data/Bravura/E56D-ornamentMordent.xml delete mode 100644 data/Bravura/E56E-ornamentTremblement.xml delete mode 100644 data/Bravura/E56F-ornamentHaydn.xml delete mode 100644 data/Bravura/E583-ornamentVerticalLine.xml delete mode 100644 data/Bravura/E587-ornamentSchleifer.xml delete mode 100644 data/Bravura/E59D-ornamentZigZagLineNoRightEnd.xml delete mode 100644 data/Bravura/E59E-ornamentZigZagLineWithRightEnd.xml delete mode 100644 data/Bravura/E5B0-ornamentPrecompSlide.xml delete mode 100644 data/Bravura/E5B1-ornamentPrecompDescendingSlide.xml delete mode 100644 data/Bravura/E5B2-ornamentPrecompAppoggTrill.xml delete mode 100644 data/Bravura/E5B3-ornamentPrecompAppoggTrillSuffix.xml delete mode 100644 data/Bravura/E5B4-ornamentPrecompTurnTrillDAnglebert.xml delete mode 100644 data/Bravura/E5B5-ornamentPrecompSlideTrillDAnglebert.xml delete mode 100644 data/Bravura/E5B6-ornamentPrecompSlideTrillMarpurg.xml delete mode 100644 data/Bravura/E5B7-ornamentPrecompTurnTrillBach.xml delete mode 100644 data/Bravura/E5B8-ornamentPrecompSlideTrillBach.xml delete mode 100644 data/Bravura/E5B9-ornamentPrecompSlideTrillMuffat.xml delete mode 100644 data/Bravura/E5BA-ornamentPrecompSlideTrillSuffixMuffat.xml delete mode 100644 data/Bravura/E5BB-ornamentPrecompTrillSuffixDandrieu.xml delete mode 100644 data/Bravura/E5BC-ornamentPrecompPortDeVoixMordent.xml delete mode 100644 data/Bravura/E5BD-ornamentPrecompTrillWithMordent.xml delete mode 100644 data/Bravura/E5BE-ornamentPrecompCadence.xml delete mode 100644 data/Bravura/E5BF-ornamentPrecompCadenceWithTurn.xml delete mode 100644 data/Bravura/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml delete mode 100644 data/Bravura/E5C1-ornamentPrecompCadenceUpperPrefix.xml delete mode 100644 data/Bravura/E5C2-ornamentPrecompCadenceUpperPrefixTurn.xml delete mode 100644 data/Bravura/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml delete mode 100644 data/Bravura/E5C4-ornamentPrecompDoubleCadenceUpperPrefixTurn.xml delete mode 100644 data/Bravura/E5C5-ornamentPrecompMordentRelease.xml delete mode 100644 data/Bravura/E5C6-ornamentPrecompMordentUpperPrefix.xml delete mode 100644 data/Bravura/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml delete mode 100644 data/Bravura/E5C8-ornamentPrecompTrillLowerSuffix.xml delete mode 100644 data/Bravura/E5E5-brassMuteClosed.xml delete mode 100644 data/Bravura/E5E6-brassMuteHalfClosed.xml delete mode 100644 data/Bravura/E5E7-brassMuteOpen.xml delete mode 100644 data/Bravura/E610-stringsDownBow.xml delete mode 100644 data/Bravura/E611-stringsDownBowTurned.xml delete mode 100644 data/Bravura/E612-stringsUpBow.xml delete mode 100644 data/Bravura/E613-stringsUpBowTurned.xml delete mode 100644 data/Bravura/E614-stringsHarmonic.xml delete mode 100644 data/Bravura/E630-pluckedSnapPizzicatoBelow.xml delete mode 100644 data/Bravura/E631-pluckedSnapPizzicatoAbove.xml delete mode 100644 data/Bravura/E632-pluckedBuzzPizzicato.xml delete mode 100644 data/Bravura/E633-pluckedLeftHandPizzicato.xml delete mode 100644 data/Bravura/E638-pluckedDamp.xml delete mode 100644 data/Bravura/E645-vocalSprechgesang.xml delete mode 100644 data/Bravura/E650-keyboardPedalPed.xml delete mode 100644 data/Bravura/E651-keyboardPedalP.xml delete mode 100644 data/Bravura/E655-keyboardPedalUp.xml delete mode 100644 data/Bravura/E659-keyboardPedalSost.xml delete mode 100644 data/Bravura/E65A-keyboardPedalS.xml delete mode 100644 data/Bravura/E880-tuplet0.xml delete mode 100644 data/Bravura/E881-tuplet1.xml delete mode 100644 data/Bravura/E882-tuplet2.xml delete mode 100644 data/Bravura/E883-tuplet3.xml delete mode 100644 data/Bravura/E884-tuplet4.xml delete mode 100644 data/Bravura/E885-tuplet5.xml delete mode 100644 data/Bravura/E886-tuplet6.xml delete mode 100644 data/Bravura/E887-tuplet7.xml delete mode 100644 data/Bravura/E888-tuplet8.xml delete mode 100644 data/Bravura/E889-tuplet9.xml delete mode 100644 data/Bravura/E88A-tupletColon.xml delete mode 100644 data/Bravura/E901-mensuralGclefPetrucci.xml delete mode 100644 data/Bravura/E902-chantFclef.xml delete mode 100644 data/Bravura/E904-mensuralFclefPetrucci.xml delete mode 100644 data/Bravura/E906-chantCclef.xml delete mode 100644 data/Bravura/E907-mensuralCclefPetrucciPosLowest.xml delete mode 100644 data/Bravura/E908-mensuralCclefPetrucciPosLow.xml delete mode 100644 data/Bravura/E909-mensuralCclefPetrucciPosMiddle.xml delete mode 100644 data/Bravura/E90A-mensuralCclefPetrucciPosHigh.xml delete mode 100644 data/Bravura/E90B-mensuralCclefPetrucciPosHighest.xml delete mode 100644 data/Bravura/E910-mensuralProlation1.xml delete mode 100644 data/Bravura/E911-mensuralProlation2.xml delete mode 100644 data/Bravura/E912-mensuralProlation3.xml delete mode 100644 data/Bravura/E913-mensuralProlation4.xml delete mode 100644 data/Bravura/E914-mensuralProlation5.xml delete mode 100644 data/Bravura/E915-mensuralProlation6.xml delete mode 100644 data/Bravura/E916-mensuralProlation7.xml delete mode 100644 data/Bravura/E917-mensuralProlation8.xml delete mode 100644 data/Bravura/E918-mensuralProlation9.xml delete mode 100644 data/Bravura/E919-mensuralProlation10.xml delete mode 100644 data/Bravura/E91A-mensuralProlation11.xml delete mode 100644 data/Bravura/E91B-mensuralProportionTempusPerfectum.xml delete mode 100644 data/Bravura/E91C-mensuralProportionProportioDupla1.xml delete mode 100644 data/Bravura/E91D-mensuralProportionProportioDupla2.xml delete mode 100644 data/Bravura/E91E-mensuralProportionProportioTripla.xml delete mode 100644 data/Bravura/E91F-mensuralProportionProportioQuadrupla.xml delete mode 100644 data/Bravura/E920-mensuralProlationCombiningDot.xml delete mode 100644 data/Bravura/E921-mensuralProlationCombiningTwoDots.xml delete mode 100644 data/Bravura/E922-mensuralProlationCombiningThreeDots.xml delete mode 100644 data/Bravura/E923-mensuralProlationCombiningThreeDotsTri.xml delete mode 100644 data/Bravura/E924-mensuralProlationCombiningDotVoid.xml delete mode 100644 data/Bravura/E925-mensuralProlationCombiningStroke.xml delete mode 100644 data/Bravura/E938-mensuralNoteheadSemibrevisBlack.xml delete mode 100644 data/Bravura/E939-mensuralNoteheadSemibrevisVoid.xml delete mode 100644 data/Bravura/E93C-mensuralNoteheadMinimaWhite.xml delete mode 100644 data/Bravura/E93D-mensuralNoteheadSemiminimaWhite.xml delete mode 100644 data/Bravura/E93E-mensuralCombStemUp.xml delete mode 100644 data/Bravura/E93F-mensuralCombStemDown.xml delete mode 100644 data/Bravura/E949-mensuralCombStemUpFlagSemiminima.xml delete mode 100644 data/Bravura/E94A-mensuralCombStemDownFlagSemiminima.xml delete mode 100644 data/Bravura/E94B-mensuralCombStemUpFlagFusa.xml delete mode 100644 data/Bravura/E94C-mensuralCombStemDownFlagFusa.xml delete mode 100644 data/Bravura/E990-chantPunctum.xml delete mode 100644 data/Bravura/E991-chantPunctumInclinatum.xml delete mode 100644 data/Bravura/E996-chantPunctumVirga.xml delete mode 100644 data/Bravura/E99B-chantQuilisma.xml delete mode 100644 data/Bravura/E99E-chantOriscusLiquescens.xml delete mode 100644 data/Bravura/E99F-chantStrophicus.xml delete mode 100644 data/Bravura/E9B4-chantEntryLineAsc2nd.xml delete mode 100644 data/Bravura/E9B5-chantEntryLineAsc3rd.xml delete mode 100644 data/Bravura/E9B6-chantEntryLineAsc4th.xml delete mode 100644 data/Bravura/E9B7-chantEntryLineAsc5th.xml delete mode 100644 data/Bravura/E9B9-chantLigaturaDesc2nd.xml delete mode 100644 data/Bravura/E9BA-chantLigaturaDesc3rd.xml delete mode 100644 data/Bravura/E9BB-chantLigaturaDesc4th.xml delete mode 100644 data/Bravura/E9BC-chantLigaturaDesc5th.xml delete mode 100644 data/Bravura/E9E0-medRenFlatSoftB.xml delete mode 100644 data/Bravura/E9E1-medRenFlatHardB.xml delete mode 100644 data/Bravura/E9E2-medRenNatural.xml delete mode 100644 data/Bravura/E9E3-medRenSharpCroix.xml delete mode 100644 data/Bravura/E9F0-mensuralRestMaxima.xml delete mode 100644 data/Bravura/E9F1-mensuralRestLongaPerfecta.xml delete mode 100644 data/Bravura/E9F2-mensuralRestLongaImperfecta.xml delete mode 100644 data/Bravura/E9F3-mensuralRestBrevis.xml delete mode 100644 data/Bravura/E9F4-mensuralRestSemibrevis.xml delete mode 100644 data/Bravura/E9F5-mensuralRestMinima.xml delete mode 100644 data/Bravura/E9F6-mensuralRestSemiminima.xml delete mode 100644 data/Bravura/E9F7-mensuralRestFusa.xml delete mode 100644 data/Bravura/E9F8-mensuralRestSemifusa.xml delete mode 100644 data/Bravura/EA02-mensuralCustosUp.xml delete mode 100644 data/Bravura/EA06-chantCustosStemUpPosMiddle.xml delete mode 100644 data/Bravura/EAA4-wiggleTrill.xml delete mode 100644 data/Bravura/EAA9-wiggleArpeggiatoUp.xml delete mode 100644 data/Bravura/EAAA-wiggleArpeggiatoDown.xml delete mode 100644 data/Bravura/EAAD-wiggleArpeggiatoUpArrow.xml delete mode 100644 data/Bravura/EAAE-wiggleArpeggiatoDownArrow.xml delete mode 100644 data/Bravura/EAAF-wiggleGlissando.xml delete mode 100644 data/Bravura/EBA7-luteDurationWhole.xml delete mode 100644 data/Bravura/EBA8-luteDurationHalf.xml delete mode 100644 data/Bravura/EBA9-luteDurationQuarter.xml delete mode 100644 data/Bravura/EBAA-luteDuration8th.xml delete mode 100644 data/Bravura/EBAB-luteDuration16th.xml delete mode 100644 data/Bravura/EBAC-luteDuration32nd.xml delete mode 100644 data/Bravura/EBC0-luteFrenchFretA.xml delete mode 100644 data/Bravura/EBC1-luteFrenchFretB.xml delete mode 100644 data/Bravura/EBC2-luteFrenchFretC.xml delete mode 100644 data/Bravura/EBC3-luteFrenchFretD.xml delete mode 100644 data/Bravura/EBC4-luteFrenchFretE.xml delete mode 100644 data/Bravura/EBC5-luteFrenchFretF.xml delete mode 100644 data/Bravura/EBC6-luteFrenchFretG.xml delete mode 100644 data/Bravura/EBC7-luteFrenchFretH.xml delete mode 100644 data/Bravura/EBC8-luteFrenchFretI.xml delete mode 100644 data/Bravura/EBC9-luteFrenchFretK.xml delete mode 100644 data/Bravura/EBCA-luteFrenchFretL.xml delete mode 100644 data/Bravura/EBCB-luteFrenchFretM.xml delete mode 100644 data/Bravura/EBCC-luteFrenchFretN.xml delete mode 100644 data/Bravura/EBE0-luteItalianFret0.xml delete mode 100644 data/Bravura/EBE1-luteItalianFret1.xml delete mode 100644 data/Bravura/EBE2-luteItalianFret2.xml delete mode 100644 data/Bravura/EBE3-luteItalianFret3.xml delete mode 100644 data/Bravura/EBE4-luteItalianFret4.xml delete mode 100644 data/Bravura/EBE5-luteItalianFret5.xml delete mode 100644 data/Bravura/EBE6-luteItalianFret6.xml delete mode 100644 data/Bravura/EBE7-luteItalianFret7.xml delete mode 100644 data/Bravura/EBE8-luteItalianFret8.xml delete mode 100644 data/Bravura/EBE9-luteItalianFret9.xml delete mode 100644 data/Bravura/ED40-articSoftAccentAbove.xml delete mode 100644 data/Bravura/ED41-articSoftAccentBelow.xml delete mode 100644 data/Gootville.xml delete mode 100644 data/Gootville/E003-bracketTop.xml delete mode 100644 data/Gootville/E004-bracketBottom.xml delete mode 100644 data/Gootville/E043-repeatDots.xml delete mode 100644 data/Gootville/E044-repeatDot.xml delete mode 100644 data/Gootville/E047-segno.xml delete mode 100644 data/Gootville/E048-coda.xml delete mode 100644 data/Gootville/E049-codaSquare.xml delete mode 100644 data/Gootville/E050-gClef.xml delete mode 100644 data/Gootville/E051-gClef15mb.xml delete mode 100644 data/Gootville/E052-gClef8vb.xml delete mode 100644 data/Gootville/E053-gClef8va.xml delete mode 100644 data/Gootville/E054-gClef15ma.xml delete mode 100644 data/Gootville/E05C-cClef.xml delete mode 100644 data/Gootville/E05D-cClef8vb.xml delete mode 100644 data/Gootville/E062-fClef.xml delete mode 100644 data/Gootville/E063-fClef15mb.xml delete mode 100644 data/Gootville/E064-fClef8vb.xml delete mode 100644 data/Gootville/E065-fClef8va.xml delete mode 100644 data/Gootville/E066-fClef15ma.xml delete mode 100644 data/Gootville/E069-unpitchedPercussionClef1.xml delete mode 100644 data/Gootville/E06A-unpitchedPercussionClef2.xml delete mode 100644 data/Gootville/E080-timeSig0.xml delete mode 100644 data/Gootville/E081-timeSig1.xml delete mode 100644 data/Gootville/E082-timeSig2.xml delete mode 100644 data/Gootville/E083-timeSig3.xml delete mode 100644 data/Gootville/E084-timeSig4.xml delete mode 100644 data/Gootville/E085-timeSig5.xml delete mode 100644 data/Gootville/E086-timeSig6.xml delete mode 100644 data/Gootville/E087-timeSig7.xml delete mode 100644 data/Gootville/E088-timeSig8.xml delete mode 100644 data/Gootville/E089-timeSig9.xml delete mode 100644 data/Gootville/E08A-timeSigCommon.xml delete mode 100644 data/Gootville/E08B-timeSigCutCommon.xml delete mode 100644 data/Gootville/E092-timeSigParensLeftSmall.xml delete mode 100644 data/Gootville/E093-timeSigParensRightSmall.xml delete mode 100644 data/Gootville/E094-timeSigParensLeft.xml delete mode 100644 data/Gootville/E095-timeSigParensRight.xml delete mode 100644 data/Gootville/E0A0-noteheadDoubleWhole.xml delete mode 100644 data/Gootville/E0A1-noteheadDoubleWholeSquare.xml delete mode 100644 data/Gootville/E0A2-noteheadWhole.xml delete mode 100644 data/Gootville/E0A3-noteheadHalf.xml delete mode 100644 data/Gootville/E0A4-noteheadBlack.xml delete mode 100644 data/Gootville/E0A9-noteheadXBlack.xml delete mode 100644 data/Gootville/E0D9-noteheadDiamondHalf.xml delete mode 100644 data/Gootville/E0DA-noteheadDiamondHalfWide.xml delete mode 100644 data/Gootville/E0DB-noteheadDiamondBlack.xml delete mode 100644 data/Gootville/E0DC-noteheadDiamondBlackWide.xml delete mode 100644 data/Gootville/E0DD-noteheadDiamondWhite.xml delete mode 100644 data/Gootville/E0DE-noteheadDiamondWhiteWide.xml delete mode 100644 data/Gootville/E0F5-noteheadParenthesisLeft.xml delete mode 100644 data/Gootville/E0F6-noteheadParenthesisRight.xml delete mode 100644 data/Gootville/E101-noteheadSlashHorizontalEnds.xml delete mode 100644 data/Gootville/E102-noteheadSlashWhiteWhole.xml delete mode 100644 data/Gootville/E103-noteheadSlashWhiteHalf.xml delete mode 100644 data/Gootville/E240-flag8thUp.xml delete mode 100644 data/Gootville/E241-flag8thDown.xml delete mode 100644 data/Gootville/E242-flag16thUp.xml delete mode 100644 data/Gootville/E243-flag16thDown.xml delete mode 100644 data/Gootville/E244-flag32ndUp.xml delete mode 100644 data/Gootville/E245-flag32ndDown.xml delete mode 100644 data/Gootville/E246-flag64thUp.xml delete mode 100644 data/Gootville/E247-flag64thDown.xml delete mode 100644 data/Gootville/E248-flag128thUp.xml delete mode 100644 data/Gootville/E249-flag128thDown.xml delete mode 100644 data/Gootville/E260-accidentalFlat.xml delete mode 100644 data/Gootville/E261-accidentalNatural.xml delete mode 100644 data/Gootville/E262-accidentalSharp.xml delete mode 100644 data/Gootville/E263-accidentalDoubleSharp.xml delete mode 100644 data/Gootville/E264-accidentalDoubleFlat.xml delete mode 100644 data/Gootville/E26A-accidentalParensLeft.xml delete mode 100644 data/Gootville/E26B-accidentalParensRight.xml delete mode 100644 data/Gootville/E270-accidentalQuarterToneFlatArrowUp.xml delete mode 100644 data/Gootville/E271-accidentalThreeQuarterTonesFlatArrowDown.xml delete mode 100644 data/Gootville/E272-accidentalQuarterToneSharpNaturalArrowUp.xml delete mode 100644 data/Gootville/E273-accidentalQuarterToneFlatNaturalArrowDown.xml delete mode 100644 data/Gootville/E274-accidentalThreeQuarterTonesSharpArrowUp.xml delete mode 100644 data/Gootville/E275-accidentalQuarterToneSharpArrowDown.xml delete mode 100644 data/Gootville/E280-accidentalQuarterToneFlatStein.xml delete mode 100644 data/Gootville/E281-accidentalThreeQuarterTonesFlatZimmermann.xml delete mode 100644 data/Gootville/E282-accidentalQuarterToneSharpStein.xml delete mode 100644 data/Gootville/E283-accidentalThreeQuarterTonesSharpStein.xml delete mode 100644 data/Gootville/E440-accidentalBuyukMucennebFlat.xml delete mode 100644 data/Gootville/E441-accidentalKucukMucennebFlat.xml delete mode 100644 data/Gootville/E442-accidentalBakiyeFlat.xml delete mode 100644 data/Gootville/E443-accidentalKomaFlat.xml delete mode 100644 data/Gootville/E444-accidentalKomaSharp.xml delete mode 100644 data/Gootville/E445-accidentalBakiyeSharp.xml delete mode 100644 data/Gootville/E446-accidentalKucukMucennebSharp.xml delete mode 100644 data/Gootville/E447-accidentalBuyukMucennebSharp.xml delete mode 100644 data/Gootville/E4A0-articAccentAbove.xml delete mode 100644 data/Gootville/E4A1-articAccentBelow.xml delete mode 100644 data/Gootville/E4A2-articStaccatoAbove.xml delete mode 100644 data/Gootville/E4A3-articStaccatoBelow.xml delete mode 100644 data/Gootville/E4A4-articTenutoAbove.xml delete mode 100644 data/Gootville/E4A5-articTenutoBelow.xml delete mode 100644 data/Gootville/E4A6-articStaccatissimoAbove.xml delete mode 100644 data/Gootville/E4A7-articStaccatissimoBelow.xml delete mode 100644 data/Gootville/E4A8-articStaccatissimoWedgeAbove.xml delete mode 100644 data/Gootville/E4A9-articStaccatissimoWedgeBelow.xml delete mode 100644 data/Gootville/E4AC-articMarcatoAbove.xml delete mode 100644 data/Gootville/E4AD-articMarcatoBelow.xml delete mode 100644 data/Gootville/E4B2-articTenutoStaccatoAbove.xml delete mode 100644 data/Gootville/E4B3-articTenutoStaccatoBelow.xml delete mode 100644 data/Gootville/E4B6-articStressAbove.xml delete mode 100644 data/Gootville/E4B7-articStressBelow.xml delete mode 100644 data/Gootville/E4C0-fermataAbove.xml delete mode 100644 data/Gootville/E4C1-fermataBelow.xml delete mode 100644 data/Gootville/E4C4-fermataShortAbove.xml delete mode 100644 data/Gootville/E4C5-fermataShortBelow.xml delete mode 100644 data/Gootville/E4C6-fermataLongAbove.xml delete mode 100644 data/Gootville/E4C7-fermataLongBelow.xml delete mode 100644 data/Gootville/E4C8-fermataVeryLongAbove.xml delete mode 100644 data/Gootville/E4C9-fermataVeryLongBelow.xml delete mode 100644 data/Gootville/E4CE-breathMarkComma.xml delete mode 100644 data/Gootville/E4E1-restLonga.xml delete mode 100644 data/Gootville/E4E2-restDoubleWhole.xml delete mode 100644 data/Gootville/E4E3-restWhole.xml delete mode 100644 data/Gootville/E4E4-restHalf.xml delete mode 100644 data/Gootville/E4E5-restQuarter.xml delete mode 100644 data/Gootville/E4E6-rest8th.xml delete mode 100644 data/Gootville/E4E7-rest16th.xml delete mode 100644 data/Gootville/E4E8-rest32nd.xml delete mode 100644 data/Gootville/E4E9-rest64th.xml delete mode 100644 data/Gootville/E4EA-rest128th.xml delete mode 100644 data/Gootville/E4F2-restQuarterOld.xml delete mode 100644 data/Gootville/E510-ottava.xml delete mode 100644 data/Gootville/E514-quindicesima.xml delete mode 100644 data/Gootville/E517-ventiduesima.xml delete mode 100644 data/Gootville/E51A-octaveParensLeft.xml delete mode 100644 data/Gootville/E51B-octaveParensRight.xml delete mode 100644 data/Gootville/E520-dynamicPiano.xml delete mode 100644 data/Gootville/E521-dynamicMezzo.xml delete mode 100644 data/Gootville/E522-dynamicForte.xml delete mode 100644 data/Gootville/E523-dynamicRinforzando.xml delete mode 100644 data/Gootville/E524-dynamicSforzando.xml delete mode 100644 data/Gootville/E525-dynamicZ.xml delete mode 100644 data/Gootville/E526-dynamicNiente.xml delete mode 100644 data/Gootville/E527-dynamicPPPPPP.xml delete mode 100644 data/Gootville/E528-dynamicPPPPP.xml delete mode 100644 data/Gootville/E529-dynamicPPPP.xml delete mode 100644 data/Gootville/E52A-dynamicPPP.xml delete mode 100644 data/Gootville/E52B-dynamicPP.xml delete mode 100644 data/Gootville/E52C-dynamicMP.xml delete mode 100644 data/Gootville/E52D-dynamicMF.xml delete mode 100644 data/Gootville/E52E-dynamicPF.xml delete mode 100644 data/Gootville/E52F-dynamicFF.xml delete mode 100644 data/Gootville/E530-dynamicFFF.xml delete mode 100644 data/Gootville/E531-dynamicFFFF.xml delete mode 100644 data/Gootville/E532-dynamicFFFFF.xml delete mode 100644 data/Gootville/E533-dynamicFFFFFF.xml delete mode 100644 data/Gootville/E534-dynamicFortePiano.xml delete mode 100644 data/Gootville/E535-dynamicForzando.xml delete mode 100644 data/Gootville/E536-dynamicSforzando1.xml delete mode 100644 data/Gootville/E537-dynamicSforzandoPiano.xml delete mode 100644 data/Gootville/E538-dynamicSforzandoPianissimo.xml delete mode 100644 data/Gootville/E539-dynamicSforzato.xml delete mode 100644 data/Gootville/E53A-dynamicSforzatoPiano.xml delete mode 100644 data/Gootville/E53B-dynamicSforzatoFF.xml delete mode 100644 data/Gootville/E53C-dynamicRinforzando1.xml delete mode 100644 data/Gootville/E53D-dynamicRinforzando2.xml delete mode 100644 data/Gootville/E566-ornamentTrill.xml delete mode 100644 data/Gootville/E567-ornamentTurn.xml delete mode 100644 data/Gootville/E568-ornamentTurnInverted.xml delete mode 100644 data/Gootville/E569-ornamentTurnSlash.xml delete mode 100644 data/Gootville/E56C-ornamentShortTrill.xml delete mode 100644 data/Gootville/E56D-ornamentMordent.xml delete mode 100644 data/Gootville/E56E-ornamentTremblement.xml delete mode 100644 data/Gootville/E59D-ornamentZigZagLineNoRightEnd.xml delete mode 100644 data/Gootville/E59E-ornamentZigZagLineWithRightEnd.xml delete mode 100644 data/Gootville/E5B0-ornamentPrecompSlide.xml delete mode 100644 data/Gootville/E5E5-brassMuteClosed.xml delete mode 100644 data/Gootville/E5E7-brassMuteOpen.xml delete mode 100644 data/Gootville/E610-stringsDownBow.xml delete mode 100644 data/Gootville/E611-stringsDownBowTurned.xml delete mode 100644 data/Gootville/E612-stringsUpBow.xml delete mode 100644 data/Gootville/E613-stringsUpBowTurned.xml delete mode 100644 data/Gootville/E630-pluckedSnapPizzicatoBelow.xml delete mode 100644 data/Gootville/E631-pluckedSnapPizzicatoAbove.xml delete mode 100644 data/Gootville/E650-keyboardPedalPed.xml delete mode 100644 data/Gootville/E651-keyboardPedalP.xml delete mode 100644 data/Gootville/E655-keyboardPedalUp.xml delete mode 100644 data/Gootville/EAA4-wiggleTrill.xml delete mode 100644 data/Gootville/EAA9-wiggleArpeggiatoUp.xml delete mode 100644 data/Gootville/EAAA-wiggleArpeggiatoDown.xml delete mode 100644 data/Gootville/EAAD-wiggleArpeggiatoUpArrow.xml delete mode 100644 data/Gootville/EAAE-wiggleArpeggiatoDownArrow.xml delete mode 100644 data/Gootville/EAAF-wiggleGlissando.xml delete mode 100644 data/Leipzig.xml delete mode 100644 data/Leipzig/E000-brace.xml delete mode 100644 data/Leipzig/E003-bracketTop.xml delete mode 100644 data/Leipzig/E004-bracketBottom.xml delete mode 100644 data/Leipzig/E043-repeatDots.xml delete mode 100644 data/Leipzig/E044-repeatDot.xml delete mode 100644 data/Leipzig/E045-dalSegno.xml delete mode 100644 data/Leipzig/E046-daCapo.xml delete mode 100644 data/Leipzig/E047-segno.xml delete mode 100644 data/Leipzig/E048-coda.xml delete mode 100644 data/Leipzig/E049-codaSquare.xml delete mode 100644 data/Leipzig/E04B-segnoSerpent2.xml delete mode 100644 data/Leipzig/E050-gClef.xml delete mode 100644 data/Leipzig/E051-gClef15mb.xml delete mode 100644 data/Leipzig/E052-gClef8vb.xml delete mode 100644 data/Leipzig/E053-gClef8va.xml delete mode 100644 data/Leipzig/E054-gClef15ma.xml delete mode 100644 data/Leipzig/E055-gClef8vbOld.xml delete mode 100644 data/Leipzig/E056-gClef8vbCClef.xml delete mode 100644 data/Leipzig/E05C-cClef.xml delete mode 100644 data/Leipzig/E05D-cClef8vb.xml delete mode 100644 data/Leipzig/E062-fClef.xml delete mode 100644 data/Leipzig/E063-fClef15mb.xml delete mode 100644 data/Leipzig/E064-fClef8vb.xml delete mode 100644 data/Leipzig/E065-fClef8va.xml delete mode 100644 data/Leipzig/E066-fClef15ma.xml delete mode 100644 data/Leipzig/E069-unpitchedPercussionClef1.xml delete mode 100644 data/Leipzig/E06A-unpitchedPercussionClef2.xml delete mode 100644 data/Leipzig/E073-gClefReversed.xml delete mode 100644 data/Leipzig/E074-gClefTurned.xml delete mode 100644 data/Leipzig/E075-cClefReversed.xml delete mode 100644 data/Leipzig/E076-fClefReversed.xml delete mode 100644 data/Leipzig/E077-fClefTurned.xml delete mode 100644 data/Leipzig/E080-timeSig0.xml delete mode 100644 data/Leipzig/E081-timeSig1.xml delete mode 100644 data/Leipzig/E082-timeSig2.xml delete mode 100644 data/Leipzig/E083-timeSig3.xml delete mode 100644 data/Leipzig/E084-timeSig4.xml delete mode 100644 data/Leipzig/E085-timeSig5.xml delete mode 100644 data/Leipzig/E086-timeSig6.xml delete mode 100644 data/Leipzig/E087-timeSig7.xml delete mode 100644 data/Leipzig/E088-timeSig8.xml delete mode 100644 data/Leipzig/E089-timeSig9.xml delete mode 100644 data/Leipzig/E08A-timeSigCommon.xml delete mode 100644 data/Leipzig/E08B-timeSigCutCommon.xml delete mode 100644 data/Leipzig/E08C-timeSigPlus.xml delete mode 100644 data/Leipzig/E08D-timeSigPlusSmall.xml delete mode 100644 data/Leipzig/E08E-timeSigFractionalSlash.xml delete mode 100644 data/Leipzig/E08F-timeSigEquals.xml delete mode 100644 data/Leipzig/E090-timeSigMinus.xml delete mode 100644 data/Leipzig/E091-timeSigMultiply.xml delete mode 100644 data/Leipzig/E092-timeSigParensLeftSmall.xml delete mode 100644 data/Leipzig/E093-timeSigParensRightSmall.xml delete mode 100644 data/Leipzig/E094-timeSigParensLeft.xml delete mode 100644 data/Leipzig/E095-timeSigParensRight.xml delete mode 100644 data/Leipzig/E0A0-noteheadDoubleWhole.xml delete mode 100644 data/Leipzig/E0A1-noteheadDoubleWholeSquare.xml delete mode 100644 data/Leipzig/E0A2-noteheadWhole.xml delete mode 100644 data/Leipzig/E0A3-noteheadHalf.xml delete mode 100644 data/Leipzig/E0A4-noteheadBlack.xml delete mode 100644 data/Leipzig/E0A5-noteheadNull.xml delete mode 100644 data/Leipzig/E0A9-noteheadXBlack.xml delete mode 100644 data/Leipzig/E0AF-noteheadPlusBlack.xml delete mode 100644 data/Leipzig/E0B5-noteheadWholeWithX.xml delete mode 100644 data/Leipzig/E0B6-noteheadHalfWithX.xml delete mode 100644 data/Leipzig/E0B7-noteheadVoidWithX.xml delete mode 100644 data/Leipzig/E0D9-noteheadDiamondHalf.xml delete mode 100644 data/Leipzig/E0DA-noteheadDiamondHalfWide.xml delete mode 100644 data/Leipzig/E0DB-noteheadDiamondBlack.xml delete mode 100644 data/Leipzig/E0DC-noteheadDiamondBlackWide.xml delete mode 100644 data/Leipzig/E0DD-noteheadDiamondWhite.xml delete mode 100644 data/Leipzig/E0DE-noteheadDiamondWhiteWide.xml delete mode 100644 data/Leipzig/E0F5-noteheadParenthesisLeft.xml delete mode 100644 data/Leipzig/E0F6-noteheadParenthesisRight.xml delete mode 100644 data/Leipzig/E0FA-noteheadWholeFilled.xml delete mode 100644 data/Leipzig/E101-noteheadSlashHorizontalEnds.xml delete mode 100644 data/Leipzig/E102-noteheadSlashWhiteWhole.xml delete mode 100644 data/Leipzig/E103-noteheadSlashWhiteHalf.xml delete mode 100644 data/Leipzig/E220-tremolo1.xml delete mode 100644 data/Leipzig/E221-tremolo2.xml delete mode 100644 data/Leipzig/E222-tremolo3.xml delete mode 100644 data/Leipzig/E223-tremolo4.xml delete mode 100644 data/Leipzig/E224-tremolo5.xml delete mode 100644 data/Leipzig/E22A-buzzRoll.xml delete mode 100644 data/Leipzig/E240-flag8thUp.xml delete mode 100644 data/Leipzig/E241-flag8thDown.xml delete mode 100644 data/Leipzig/E242-flag16thUp.xml delete mode 100644 data/Leipzig/E243-flag16thDown.xml delete mode 100644 data/Leipzig/E244-flag32ndUp.xml delete mode 100644 data/Leipzig/E245-flag32ndDown.xml delete mode 100644 data/Leipzig/E246-flag64thUp.xml delete mode 100644 data/Leipzig/E247-flag64thDown.xml delete mode 100644 data/Leipzig/E248-flag128thUp.xml delete mode 100644 data/Leipzig/E249-flag128thDown.xml delete mode 100644 data/Leipzig/E24A-flag256thUp.xml delete mode 100644 data/Leipzig/E24B-flag256thDown.xml delete mode 100644 data/Leipzig/E24C-flag512thUp.xml delete mode 100644 data/Leipzig/E24D-flag512thDown.xml delete mode 100644 data/Leipzig/E24E-flag1024thUp.xml delete mode 100644 data/Leipzig/E24F-flag1024thDown.xml delete mode 100644 data/Leipzig/E260-accidentalFlat.xml delete mode 100644 data/Leipzig/E261-accidentalNatural.xml delete mode 100644 data/Leipzig/E262-accidentalSharp.xml delete mode 100644 data/Leipzig/E263-accidentalDoubleSharp.xml delete mode 100644 data/Leipzig/E264-accidentalDoubleFlat.xml delete mode 100644 data/Leipzig/E265-accidentalTripleSharp.xml delete mode 100644 data/Leipzig/E266-accidentalTripleFlat.xml delete mode 100644 data/Leipzig/E267-accidentalNaturalFlat.xml delete mode 100644 data/Leipzig/E268-accidentalNaturalSharp.xml delete mode 100644 data/Leipzig/E269-accidentalSharpSharp.xml delete mode 100644 data/Leipzig/E26A-accidentalParensLeft.xml delete mode 100644 data/Leipzig/E26B-accidentalParensRight.xml delete mode 100644 data/Leipzig/E26C-accidentalBracketLeft.xml delete mode 100644 data/Leipzig/E26D-accidentalBracketRight.xml delete mode 100644 data/Leipzig/E270-accidentalQuarterToneFlatArrowUp.xml delete mode 100644 data/Leipzig/E271-accidentalThreeQuarterTonesFlatArrowDown.xml delete mode 100644 data/Leipzig/E272-accidentalQuarterToneSharpNaturalArrowUp.xml delete mode 100644 data/Leipzig/E273-accidentalQuarterToneFlatNaturalArrowDown.xml delete mode 100644 data/Leipzig/E274-accidentalThreeQuarterTonesSharpArrowUp.xml delete mode 100644 data/Leipzig/E275-accidentalQuarterToneSharpArrowDown.xml delete mode 100644 data/Leipzig/E280-accidentalQuarterToneFlatStein.xml delete mode 100644 data/Leipzig/E281-accidentalThreeQuarterTonesFlatZimmermann.xml delete mode 100644 data/Leipzig/E282-accidentalQuarterToneSharpStein.xml delete mode 100644 data/Leipzig/E283-accidentalThreeQuarterTonesSharpStein.xml delete mode 100644 data/Leipzig/E440-accidentalBuyukMucennebFlat.xml delete mode 100644 data/Leipzig/E441-accidentalKucukMucennebFlat.xml delete mode 100644 data/Leipzig/E442-accidentalBakiyeFlat.xml delete mode 100644 data/Leipzig/E443-accidentalKomaFlat.xml delete mode 100644 data/Leipzig/E444-accidentalKomaSharp.xml delete mode 100644 data/Leipzig/E445-accidentalBakiyeSharp.xml delete mode 100644 data/Leipzig/E446-accidentalKucukMucennebSharp.xml delete mode 100644 data/Leipzig/E447-accidentalBuyukMucennebSharp.xml delete mode 100644 data/Leipzig/E4A0-articAccentAbove.xml delete mode 100644 data/Leipzig/E4A1-articAccentBelow.xml delete mode 100644 data/Leipzig/E4A2-articStaccatoAbove.xml delete mode 100644 data/Leipzig/E4A3-articStaccatoBelow.xml delete mode 100644 data/Leipzig/E4A4-articTenutoAbove.xml delete mode 100644 data/Leipzig/E4A5-articTenutoBelow.xml delete mode 100644 data/Leipzig/E4A6-articStaccatissimoAbove.xml delete mode 100644 data/Leipzig/E4A7-articStaccatissimoBelow.xml delete mode 100644 data/Leipzig/E4A8-articStaccatissimoWedgeAbove.xml delete mode 100644 data/Leipzig/E4A9-articStaccatissimoWedgeBelow.xml delete mode 100644 data/Leipzig/E4AA-articStaccatissimoStrokeAbove.xml delete mode 100644 data/Leipzig/E4AB-articStaccatissimoStrokeBelow.xml delete mode 100644 data/Leipzig/E4AC-articMarcatoAbove.xml delete mode 100644 data/Leipzig/E4AD-articMarcatoBelow.xml delete mode 100644 data/Leipzig/E4AE-articMarcatoStaccatoAbove.xml delete mode 100644 data/Leipzig/E4AF-articMarcatoStaccatoBelow.xml delete mode 100644 data/Leipzig/E4B0-articAccentStaccatoAbove.xml delete mode 100644 data/Leipzig/E4B1-articAccentStaccatoBelow.xml delete mode 100644 data/Leipzig/E4B2-articTenutoStaccatoAbove.xml delete mode 100644 data/Leipzig/E4B3-articTenutoStaccatoBelow.xml delete mode 100644 data/Leipzig/E4B4-articTenutoAccentAbove.xml delete mode 100644 data/Leipzig/E4B5-articTenutoAccentBelow.xml delete mode 100644 data/Leipzig/E4B6-articStressAbove.xml delete mode 100644 data/Leipzig/E4B7-articStressBelow.xml delete mode 100644 data/Leipzig/E4B8-articUnstressAbove.xml delete mode 100644 data/Leipzig/E4B9-articUnstressBelow.xml delete mode 100644 data/Leipzig/E4BA-articLaissezVibrerAbove.xml delete mode 100644 data/Leipzig/E4BB-articLaissezVibrerBelow.xml delete mode 100644 data/Leipzig/E4BC-articMarcatoTenutoAbove.xml delete mode 100644 data/Leipzig/E4BD-articMarcatoTenutoBelow.xml delete mode 100644 data/Leipzig/E4C0-fermataAbove.xml delete mode 100644 data/Leipzig/E4C1-fermataBelow.xml delete mode 100644 data/Leipzig/E4C2-fermataVeryShortAbove.xml delete mode 100644 data/Leipzig/E4C3-fermataVeryShortBelow.xml delete mode 100644 data/Leipzig/E4C4-fermataShortAbove.xml delete mode 100644 data/Leipzig/E4C5-fermataShortBelow.xml delete mode 100644 data/Leipzig/E4C6-fermataLongAbove.xml delete mode 100644 data/Leipzig/E4C7-fermataLongBelow.xml delete mode 100644 data/Leipzig/E4C8-fermataVeryLongAbove.xml delete mode 100644 data/Leipzig/E4C9-fermataVeryLongBelow.xml delete mode 100644 data/Leipzig/E4CE-breathMarkComma.xml delete mode 100644 data/Leipzig/E4E0-restMaxima.xml delete mode 100644 data/Leipzig/E4E1-restLonga.xml delete mode 100644 data/Leipzig/E4E2-restDoubleWhole.xml delete mode 100644 data/Leipzig/E4E3-restWhole.xml delete mode 100644 data/Leipzig/E4E4-restHalf.xml delete mode 100644 data/Leipzig/E4E5-restQuarter.xml delete mode 100644 data/Leipzig/E4E6-rest8th.xml delete mode 100644 data/Leipzig/E4E7-rest16th.xml delete mode 100644 data/Leipzig/E4E8-rest32nd.xml delete mode 100644 data/Leipzig/E4E9-rest64th.xml delete mode 100644 data/Leipzig/E4EA-rest128th.xml delete mode 100644 data/Leipzig/E4EB-rest256th.xml delete mode 100644 data/Leipzig/E4EC-rest512th.xml delete mode 100644 data/Leipzig/E4ED-rest1024th.xml delete mode 100644 data/Leipzig/E4F2-restQuarterOld.xml delete mode 100644 data/Leipzig/E4F6-restQuarterZ.xml delete mode 100644 data/Leipzig/E500-repeat1Bar.xml delete mode 100644 data/Leipzig/E501-repeat2Bars.xml delete mode 100644 data/Leipzig/E502-repeat4Bars.xml delete mode 100644 data/Leipzig/E503-repeatBarUpperDot.xml delete mode 100644 data/Leipzig/E504-repeatBarSlash.xml delete mode 100644 data/Leipzig/E505-repeatBarLowerDot.xml delete mode 100644 data/Leipzig/E510-ottava.xml delete mode 100644 data/Leipzig/E511-ottavaAlta.xml delete mode 100644 data/Leipzig/E512-ottavaBassa.xml delete mode 100644 data/Leipzig/E513-ottavaBassaBa.xml delete mode 100644 data/Leipzig/E514-quindicesima.xml delete mode 100644 data/Leipzig/E515-quindicesimaAlta.xml delete mode 100644 data/Leipzig/E516-quindicesimaBassa.xml delete mode 100644 data/Leipzig/E517-ventiduesima.xml delete mode 100644 data/Leipzig/E518-ventiduesimaAlta.xml delete mode 100644 data/Leipzig/E519-ventiduesimaBassa.xml delete mode 100644 data/Leipzig/E51A-octaveParensLeft.xml delete mode 100644 data/Leipzig/E51B-octaveParensRight.xml delete mode 100644 data/Leipzig/E51C-ottavaBassaVb.xml delete mode 100644 data/Leipzig/E51D-quindicesimaBassaMb.xml delete mode 100644 data/Leipzig/E51E-ventiduesimaBassaMb.xml delete mode 100644 data/Leipzig/E520-dynamicPiano.xml delete mode 100644 data/Leipzig/E521-dynamicMezzo.xml delete mode 100644 data/Leipzig/E522-dynamicForte.xml delete mode 100644 data/Leipzig/E523-dynamicRinforzando.xml delete mode 100644 data/Leipzig/E524-dynamicSforzando.xml delete mode 100644 data/Leipzig/E525-dynamicZ.xml delete mode 100644 data/Leipzig/E526-dynamicNiente.xml delete mode 100644 data/Leipzig/E527-dynamicPPPPPP.xml delete mode 100644 data/Leipzig/E528-dynamicPPPPP.xml delete mode 100644 data/Leipzig/E529-dynamicPPPP.xml delete mode 100644 data/Leipzig/E52A-dynamicPPP.xml delete mode 100644 data/Leipzig/E52B-dynamicPP.xml delete mode 100644 data/Leipzig/E52C-dynamicMP.xml delete mode 100644 data/Leipzig/E52D-dynamicMF.xml delete mode 100644 data/Leipzig/E52E-dynamicPF.xml delete mode 100644 data/Leipzig/E52F-dynamicFF.xml delete mode 100644 data/Leipzig/E530-dynamicFFF.xml delete mode 100644 data/Leipzig/E531-dynamicFFFF.xml delete mode 100644 data/Leipzig/E532-dynamicFFFFF.xml delete mode 100644 data/Leipzig/E533-dynamicFFFFFF.xml delete mode 100644 data/Leipzig/E534-dynamicFortePiano.xml delete mode 100644 data/Leipzig/E535-dynamicForzando.xml delete mode 100644 data/Leipzig/E536-dynamicSforzando1.xml delete mode 100644 data/Leipzig/E537-dynamicSforzandoPiano.xml delete mode 100644 data/Leipzig/E538-dynamicSforzandoPianissimo.xml delete mode 100644 data/Leipzig/E539-dynamicSforzato.xml delete mode 100644 data/Leipzig/E53A-dynamicSforzatoPiano.xml delete mode 100644 data/Leipzig/E53B-dynamicSforzatoFF.xml delete mode 100644 data/Leipzig/E53C-dynamicRinforzando1.xml delete mode 100644 data/Leipzig/E53D-dynamicRinforzando2.xml delete mode 100644 data/Leipzig/E566-ornamentTrill.xml delete mode 100644 data/Leipzig/E567-ornamentTurn.xml delete mode 100644 data/Leipzig/E568-ornamentTurnInverted.xml delete mode 100644 data/Leipzig/E569-ornamentTurnSlash.xml delete mode 100644 data/Leipzig/E56A-ornamentTurnUp.xml delete mode 100644 data/Leipzig/E56B-ornamentTurnUpS.xml delete mode 100644 data/Leipzig/E56C-ornamentShortTrill.xml delete mode 100644 data/Leipzig/E56D-ornamentMordent.xml delete mode 100644 data/Leipzig/E56E-ornamentTremblement.xml delete mode 100644 data/Leipzig/E56F-ornamentHaydn.xml delete mode 100644 data/Leipzig/E583-ornamentVerticalLine.xml delete mode 100644 data/Leipzig/E587-ornamentSchleifer.xml delete mode 100644 data/Leipzig/E59D-ornamentZigZagLineNoRightEnd.xml delete mode 100644 data/Leipzig/E59E-ornamentZigZagLineWithRightEnd.xml delete mode 100644 data/Leipzig/E5B0-ornamentPrecompSlide.xml delete mode 100644 data/Leipzig/E5B1-ornamentPrecompDescendingSlide.xml delete mode 100644 data/Leipzig/E5B2-ornamentPrecompAppoggTrill.xml delete mode 100644 data/Leipzig/E5B3-ornamentPrecompAppoggTrillSuffix.xml delete mode 100644 data/Leipzig/E5B4-ornamentPrecompTurnTrillDAnglebert.xml delete mode 100644 data/Leipzig/E5B5-ornamentPrecompSlideTrillDAnglebert.xml delete mode 100644 data/Leipzig/E5B6-ornamentPrecompSlideTrillMarpurg.xml delete mode 100644 data/Leipzig/E5B7-ornamentPrecompTurnTrillBach.xml delete mode 100644 data/Leipzig/E5B8-ornamentPrecompSlideTrillBach.xml delete mode 100644 data/Leipzig/E5B9-ornamentPrecompSlideTrillMuffat.xml delete mode 100644 data/Leipzig/E5BA-ornamentPrecompSlideTrillSuffixMuffat.xml delete mode 100644 data/Leipzig/E5BB-ornamentPrecompTrillSuffixDandrieu.xml delete mode 100644 data/Leipzig/E5BC-ornamentPrecompPortDeVoixMordent.xml delete mode 100644 data/Leipzig/E5BD-ornamentPrecompTrillWithMordent.xml delete mode 100644 data/Leipzig/E5BE-ornamentPrecompCadence.xml delete mode 100644 data/Leipzig/E5BF-ornamentPrecompCadenceWithTurn.xml delete mode 100644 data/Leipzig/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml delete mode 100644 data/Leipzig/E5C1-ornamentPrecompCadenceUpperPrefix.xml delete mode 100644 data/Leipzig/E5C2-ornamentPrecompCadenceUpperPrefixTurn.xml delete mode 100644 data/Leipzig/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml delete mode 100644 data/Leipzig/E5C4-ornamentPrecompDoubleCadenceUpperPrefixTurn.xml delete mode 100644 data/Leipzig/E5C5-ornamentPrecompMordentRelease.xml delete mode 100644 data/Leipzig/E5C6-ornamentPrecompMordentUpperPrefix.xml delete mode 100644 data/Leipzig/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml delete mode 100644 data/Leipzig/E5C8-ornamentPrecompTrillLowerSuffix.xml delete mode 100644 data/Leipzig/E5E5-brassMuteClosed.xml delete mode 100644 data/Leipzig/E5E6-brassMuteHalfClosed.xml delete mode 100644 data/Leipzig/E5E7-brassMuteOpen.xml delete mode 100644 data/Leipzig/E610-stringsDownBow.xml delete mode 100644 data/Leipzig/E611-stringsDownBowTurned.xml delete mode 100644 data/Leipzig/E612-stringsUpBow.xml delete mode 100644 data/Leipzig/E613-stringsUpBowTurned.xml delete mode 100644 data/Leipzig/E614-stringsHarmonic.xml delete mode 100644 data/Leipzig/E630-pluckedSnapPizzicatoBelow.xml delete mode 100644 data/Leipzig/E631-pluckedSnapPizzicatoAbove.xml delete mode 100644 data/Leipzig/E632-pluckedBuzzPizzicato.xml delete mode 100644 data/Leipzig/E633-pluckedLeftHandPizzicato.xml delete mode 100644 data/Leipzig/E638-pluckedDamp.xml delete mode 100644 data/Leipzig/E645-vocalSprechgesang.xml delete mode 100644 data/Leipzig/E650-keyboardPedalPed.xml delete mode 100644 data/Leipzig/E651-keyboardPedalP.xml delete mode 100644 data/Leipzig/E655-keyboardPedalUp.xml delete mode 100644 data/Leipzig/E659-keyboardPedalSost.xml delete mode 100644 data/Leipzig/E65A-keyboardPedalS.xml delete mode 100644 data/Leipzig/E880-tuplet0.xml delete mode 100644 data/Leipzig/E881-tuplet1.xml delete mode 100644 data/Leipzig/E882-tuplet2.xml delete mode 100644 data/Leipzig/E883-tuplet3.xml delete mode 100644 data/Leipzig/E884-tuplet4.xml delete mode 100644 data/Leipzig/E885-tuplet5.xml delete mode 100644 data/Leipzig/E886-tuplet6.xml delete mode 100644 data/Leipzig/E887-tuplet7.xml delete mode 100644 data/Leipzig/E888-tuplet8.xml delete mode 100644 data/Leipzig/E889-tuplet9.xml delete mode 100644 data/Leipzig/E88A-tupletColon.xml delete mode 100644 data/Leipzig/E901-mensuralGclefPetrucci.xml delete mode 100644 data/Leipzig/E902-chantFclef.xml delete mode 100644 data/Leipzig/E904-mensuralFclefPetrucci.xml delete mode 100644 data/Leipzig/E906-chantCclef.xml delete mode 100644 data/Leipzig/E907-mensuralCclefPetrucciPosLowest.xml delete mode 100644 data/Leipzig/E908-mensuralCclefPetrucciPosLow.xml delete mode 100644 data/Leipzig/E909-mensuralCclefPetrucciPosMiddle.xml delete mode 100644 data/Leipzig/E90A-mensuralCclefPetrucciPosHigh.xml delete mode 100644 data/Leipzig/E90B-mensuralCclefPetrucciPosHighest.xml delete mode 100644 data/Leipzig/E910-mensuralProlation1.xml delete mode 100644 data/Leipzig/E911-mensuralProlation2.xml delete mode 100644 data/Leipzig/E912-mensuralProlation3.xml delete mode 100644 data/Leipzig/E913-mensuralProlation4.xml delete mode 100644 data/Leipzig/E914-mensuralProlation5.xml delete mode 100644 data/Leipzig/E915-mensuralProlation6.xml delete mode 100644 data/Leipzig/E916-mensuralProlation7.xml delete mode 100644 data/Leipzig/E917-mensuralProlation8.xml delete mode 100644 data/Leipzig/E918-mensuralProlation9.xml delete mode 100644 data/Leipzig/E919-mensuralProlation10.xml delete mode 100644 data/Leipzig/E91A-mensuralProlation11.xml delete mode 100644 data/Leipzig/E91B-mensuralProportionTempusPerfectum.xml delete mode 100644 data/Leipzig/E91C-mensuralProportionProportioDupla1.xml delete mode 100644 data/Leipzig/E91D-mensuralProportionProportioDupla2.xml delete mode 100644 data/Leipzig/E91E-mensuralProportionProportioTripla.xml delete mode 100644 data/Leipzig/E91F-mensuralProportionProportioQuadrupla.xml delete mode 100644 data/Leipzig/E920-mensuralProlationCombiningDot.xml delete mode 100644 data/Leipzig/E921-mensuralProlationCombiningTwoDots.xml delete mode 100644 data/Leipzig/E922-mensuralProlationCombiningThreeDots.xml delete mode 100644 data/Leipzig/E923-mensuralProlationCombiningThreeDotsTri.xml delete mode 100644 data/Leipzig/E924-mensuralProlationCombiningDotVoid.xml delete mode 100644 data/Leipzig/E925-mensuralProlationCombiningStroke.xml delete mode 100644 data/Leipzig/E938-mensuralNoteheadSemibrevisBlack.xml delete mode 100644 data/Leipzig/E939-mensuralNoteheadSemibrevisVoid.xml delete mode 100644 data/Leipzig/E93C-mensuralNoteheadMinimaWhite.xml delete mode 100644 data/Leipzig/E93D-mensuralNoteheadSemiminimaWhite.xml delete mode 100644 data/Leipzig/E93E-mensuralCombStemUp.xml delete mode 100644 data/Leipzig/E93F-mensuralCombStemDown.xml delete mode 100644 data/Leipzig/E949-mensuralCombStemUpFlagSemiminima.xml delete mode 100644 data/Leipzig/E94A-mensuralCombStemDownFlagSemiminima.xml delete mode 100644 data/Leipzig/E94B-mensuralCombStemUpFlagFusa.xml delete mode 100644 data/Leipzig/E94C-mensuralCombStemDownFlagFusa.xml delete mode 100644 data/Leipzig/E9E0-medRenFlatSoftB.xml delete mode 100644 data/Leipzig/E9E1-medRenFlatHardB.xml delete mode 100644 data/Leipzig/E9E2-medRenNatural.xml delete mode 100644 data/Leipzig/E9E3-medRenSharpCroix.xml delete mode 100644 data/Leipzig/E9F0-mensuralRestMaxima.xml delete mode 100644 data/Leipzig/E9F1-mensuralRestLongaPerfecta.xml delete mode 100644 data/Leipzig/E9F2-mensuralRestLongaImperfecta.xml delete mode 100644 data/Leipzig/E9F3-mensuralRestBrevis.xml delete mode 100644 data/Leipzig/E9F4-mensuralRestSemibrevis.xml delete mode 100644 data/Leipzig/E9F5-mensuralRestMinima.xml delete mode 100644 data/Leipzig/E9F6-mensuralRestSemiminima.xml delete mode 100644 data/Leipzig/E9F7-mensuralRestFusa.xml delete mode 100644 data/Leipzig/E9F8-mensuralRestSemifusa.xml delete mode 100644 data/Leipzig/EA02-mensuralCustosUp.xml delete mode 100644 data/Leipzig/EA06-chantCustosStemUpPosMiddle.xml delete mode 100644 data/Leipzig/EAA4-wiggleTrill.xml delete mode 100644 data/Leipzig/EAA9-wiggleArpeggiatoUp.xml delete mode 100644 data/Leipzig/EAAA-wiggleArpeggiatoDown.xml delete mode 100644 data/Leipzig/EAAD-wiggleArpeggiatoUpArrow.xml delete mode 100644 data/Leipzig/EAAE-wiggleArpeggiatoDownArrow.xml delete mode 100644 data/Leipzig/EAAF-wiggleGlissando.xml delete mode 100644 data/Leipzig/EBA7-luteDurationWhole.xml delete mode 100644 data/Leipzig/EBA8-luteDurationHalf.xml delete mode 100644 data/Leipzig/EBA9-luteDurationQuarter.xml delete mode 100644 data/Leipzig/EBAA-luteDuration8th.xml delete mode 100644 data/Leipzig/EBAB-luteDuration16th.xml delete mode 100644 data/Leipzig/EBAC-luteDuration32nd.xml delete mode 100644 data/Leipzig/EBC0-luteFrenchFretA.xml delete mode 100644 data/Leipzig/EBC1-luteFrenchFretB.xml delete mode 100644 data/Leipzig/EBC2-luteFrenchFretC.xml delete mode 100644 data/Leipzig/EBC3-luteFrenchFretD.xml delete mode 100644 data/Leipzig/EBC4-luteFrenchFretE.xml delete mode 100644 data/Leipzig/EBC5-luteFrenchFretF.xml delete mode 100644 data/Leipzig/EBC6-luteFrenchFretG.xml delete mode 100644 data/Leipzig/EBC7-luteFrenchFretH.xml delete mode 100644 data/Leipzig/EBC8-luteFrenchFretI.xml delete mode 100644 data/Leipzig/EBC9-luteFrenchFretK.xml delete mode 100644 data/Leipzig/EBCA-luteFrenchFretL.xml delete mode 100644 data/Leipzig/EBCB-luteFrenchFretM.xml delete mode 100644 data/Leipzig/EBCC-luteFrenchFretN.xml delete mode 100644 data/Leipzig/EBE0-luteItalianFret0.xml delete mode 100644 data/Leipzig/EBE1-luteItalianFret1.xml delete mode 100644 data/Leipzig/EBE2-luteItalianFret2.xml delete mode 100644 data/Leipzig/EBE3-luteItalianFret3.xml delete mode 100644 data/Leipzig/EBE4-luteItalianFret4.xml delete mode 100644 data/Leipzig/EBE5-luteItalianFret5.xml delete mode 100644 data/Leipzig/EBE6-luteItalianFret6.xml delete mode 100644 data/Leipzig/EBE7-luteItalianFret7.xml delete mode 100644 data/Leipzig/EBE8-luteItalianFret8.xml delete mode 100644 data/Leipzig/EBE9-luteItalianFret9.xml delete mode 100644 data/Leipzig/ED40-articSoftAccentAbove.xml delete mode 100644 data/Leipzig/ED41-articSoftAccentBelow.xml delete mode 100644 data/Leland.xml delete mode 100644 data/Leland/E000-brace.xml delete mode 100644 data/Leland/E003-bracketTop.xml delete mode 100644 data/Leland/E004-bracketBottom.xml delete mode 100644 data/Leland/E043-repeatDots.xml delete mode 100644 data/Leland/E044-repeatDot.xml delete mode 100644 data/Leland/E047-segno.xml delete mode 100644 data/Leland/E048-coda.xml delete mode 100644 data/Leland/E049-codaSquare.xml delete mode 100644 data/Leland/E04B-segnoSerpent2.xml delete mode 100644 data/Leland/E050-gClef.xml delete mode 100644 data/Leland/E051-gClef15mb.xml delete mode 100644 data/Leland/E052-gClef8vb.xml delete mode 100644 data/Leland/E053-gClef8va.xml delete mode 100644 data/Leland/E054-gClef15ma.xml delete mode 100644 data/Leland/E055-gClef8vbOld.xml delete mode 100644 data/Leland/E05C-cClef.xml delete mode 100644 data/Leland/E05D-cClef8vb.xml delete mode 100644 data/Leland/E062-fClef.xml delete mode 100644 data/Leland/E063-fClef15mb.xml delete mode 100644 data/Leland/E064-fClef8vb.xml delete mode 100644 data/Leland/E065-fClef8va.xml delete mode 100644 data/Leland/E066-fClef15ma.xml delete mode 100644 data/Leland/E069-unpitchedPercussionClef1.xml delete mode 100644 data/Leland/E06A-unpitchedPercussionClef2.xml delete mode 100644 data/Leland/E080-timeSig0.xml delete mode 100644 data/Leland/E081-timeSig1.xml delete mode 100644 data/Leland/E082-timeSig2.xml delete mode 100644 data/Leland/E083-timeSig3.xml delete mode 100644 data/Leland/E084-timeSig4.xml delete mode 100644 data/Leland/E085-timeSig5.xml delete mode 100644 data/Leland/E086-timeSig6.xml delete mode 100644 data/Leland/E087-timeSig7.xml delete mode 100644 data/Leland/E088-timeSig8.xml delete mode 100644 data/Leland/E089-timeSig9.xml delete mode 100644 data/Leland/E08A-timeSigCommon.xml delete mode 100644 data/Leland/E08B-timeSigCutCommon.xml delete mode 100644 data/Leland/E08C-timeSigPlus.xml delete mode 100644 data/Leland/E0A0-noteheadDoubleWhole.xml delete mode 100644 data/Leland/E0A1-noteheadDoubleWholeSquare.xml delete mode 100644 data/Leland/E0A2-noteheadWhole.xml delete mode 100644 data/Leland/E0A3-noteheadHalf.xml delete mode 100644 data/Leland/E0A4-noteheadBlack.xml delete mode 100644 data/Leland/E0A5-noteheadNull.xml delete mode 100644 data/Leland/E0A9-noteheadXBlack.xml delete mode 100644 data/Leland/E0AF-noteheadPlusBlack.xml delete mode 100644 data/Leland/E0D9-noteheadDiamondHalf.xml delete mode 100644 data/Leland/E0DB-noteheadDiamondBlack.xml delete mode 100644 data/Leland/E0F5-noteheadParenthesisLeft.xml delete mode 100644 data/Leland/E0F6-noteheadParenthesisRight.xml delete mode 100644 data/Leland/E220-tremolo1.xml delete mode 100644 data/Leland/E221-tremolo2.xml delete mode 100644 data/Leland/E222-tremolo3.xml delete mode 100644 data/Leland/E223-tremolo4.xml delete mode 100644 data/Leland/E224-tremolo5.xml delete mode 100644 data/Leland/E22A-buzzRoll.xml delete mode 100644 data/Leland/E240-flag8thUp.xml delete mode 100644 data/Leland/E241-flag8thDown.xml delete mode 100644 data/Leland/E242-flag16thUp.xml delete mode 100644 data/Leland/E243-flag16thDown.xml delete mode 100644 data/Leland/E244-flag32ndUp.xml delete mode 100644 data/Leland/E245-flag32ndDown.xml delete mode 100644 data/Leland/E246-flag64thUp.xml delete mode 100644 data/Leland/E247-flag64thDown.xml delete mode 100644 data/Leland/E248-flag128thUp.xml delete mode 100644 data/Leland/E249-flag128thDown.xml delete mode 100644 data/Leland/E24A-flag256thUp.xml delete mode 100644 data/Leland/E24B-flag256thDown.xml delete mode 100644 data/Leland/E24C-flag512thUp.xml delete mode 100644 data/Leland/E24D-flag512thDown.xml delete mode 100644 data/Leland/E24E-flag1024thUp.xml delete mode 100644 data/Leland/E24F-flag1024thDown.xml delete mode 100644 data/Leland/E260-accidentalFlat.xml delete mode 100644 data/Leland/E261-accidentalNatural.xml delete mode 100644 data/Leland/E262-accidentalSharp.xml delete mode 100644 data/Leland/E263-accidentalDoubleSharp.xml delete mode 100644 data/Leland/E264-accidentalDoubleFlat.xml delete mode 100644 data/Leland/E265-accidentalTripleSharp.xml delete mode 100644 data/Leland/E266-accidentalTripleFlat.xml delete mode 100644 data/Leland/E267-accidentalNaturalFlat.xml delete mode 100644 data/Leland/E268-accidentalNaturalSharp.xml delete mode 100644 data/Leland/E269-accidentalSharpSharp.xml delete mode 100644 data/Leland/E26A-accidentalParensLeft.xml delete mode 100644 data/Leland/E26B-accidentalParensRight.xml delete mode 100644 data/Leland/E26C-accidentalBracketLeft.xml delete mode 100644 data/Leland/E26D-accidentalBracketRight.xml delete mode 100644 data/Leland/E270-accidentalQuarterToneFlatArrowUp.xml delete mode 100644 data/Leland/E271-accidentalThreeQuarterTonesFlatArrowDown.xml delete mode 100644 data/Leland/E272-accidentalQuarterToneSharpNaturalArrowUp.xml delete mode 100644 data/Leland/E273-accidentalQuarterToneFlatNaturalArrowDown.xml delete mode 100644 data/Leland/E274-accidentalThreeQuarterTonesSharpArrowUp.xml delete mode 100644 data/Leland/E275-accidentalQuarterToneSharpArrowDown.xml delete mode 100644 data/Leland/E280-accidentalQuarterToneFlatStein.xml delete mode 100644 data/Leland/E281-accidentalThreeQuarterTonesFlatZimmermann.xml delete mode 100644 data/Leland/E282-accidentalQuarterToneSharpStein.xml delete mode 100644 data/Leland/E283-accidentalThreeQuarterTonesSharpStein.xml delete mode 100644 data/Leland/E440-accidentalBuyukMucennebFlat.xml delete mode 100644 data/Leland/E442-accidentalBakiyeFlat.xml delete mode 100644 data/Leland/E446-accidentalKucukMucennebSharp.xml delete mode 100644 data/Leland/E447-accidentalBuyukMucennebSharp.xml delete mode 100644 data/Leland/E4A0-articAccentAbove.xml delete mode 100644 data/Leland/E4A1-articAccentBelow.xml delete mode 100644 data/Leland/E4A2-articStaccatoAbove.xml delete mode 100644 data/Leland/E4A3-articStaccatoBelow.xml delete mode 100644 data/Leland/E4A4-articTenutoAbove.xml delete mode 100644 data/Leland/E4A5-articTenutoBelow.xml delete mode 100644 data/Leland/E4A6-articStaccatissimoAbove.xml delete mode 100644 data/Leland/E4A7-articStaccatissimoBelow.xml delete mode 100644 data/Leland/E4A8-articStaccatissimoWedgeAbove.xml delete mode 100644 data/Leland/E4A9-articStaccatissimoWedgeBelow.xml delete mode 100644 data/Leland/E4AC-articMarcatoAbove.xml delete mode 100644 data/Leland/E4AD-articMarcatoBelow.xml delete mode 100644 data/Leland/E4AE-articMarcatoStaccatoAbove.xml delete mode 100644 data/Leland/E4AF-articMarcatoStaccatoBelow.xml delete mode 100644 data/Leland/E4B0-articAccentStaccatoAbove.xml delete mode 100644 data/Leland/E4B1-articAccentStaccatoBelow.xml delete mode 100644 data/Leland/E4B2-articTenutoStaccatoAbove.xml delete mode 100644 data/Leland/E4B3-articTenutoStaccatoBelow.xml delete mode 100644 data/Leland/E4B4-articTenutoAccentAbove.xml delete mode 100644 data/Leland/E4B5-articTenutoAccentBelow.xml delete mode 100644 data/Leland/E4B6-articStressAbove.xml delete mode 100644 data/Leland/E4B7-articStressBelow.xml delete mode 100644 data/Leland/E4B8-articUnstressAbove.xml delete mode 100644 data/Leland/E4B9-articUnstressBelow.xml delete mode 100644 data/Leland/E4BA-articLaissezVibrerAbove.xml delete mode 100644 data/Leland/E4BB-articLaissezVibrerBelow.xml delete mode 100644 data/Leland/E4BC-articMarcatoTenutoAbove.xml delete mode 100644 data/Leland/E4BD-articMarcatoTenutoBelow.xml delete mode 100644 data/Leland/E4C0-fermataAbove.xml delete mode 100644 data/Leland/E4C1-fermataBelow.xml delete mode 100644 data/Leland/E4C4-fermataShortAbove.xml delete mode 100644 data/Leland/E4C5-fermataShortBelow.xml delete mode 100644 data/Leland/E4C6-fermataLongAbove.xml delete mode 100644 data/Leland/E4C7-fermataLongBelow.xml delete mode 100644 data/Leland/E4C8-fermataVeryLongAbove.xml delete mode 100644 data/Leland/E4C9-fermataVeryLongBelow.xml delete mode 100644 data/Leland/E4CE-breathMarkComma.xml delete mode 100644 data/Leland/E4E0-restMaxima.xml delete mode 100644 data/Leland/E4E1-restLonga.xml delete mode 100644 data/Leland/E4E2-restDoubleWhole.xml delete mode 100644 data/Leland/E4E3-restWhole.xml delete mode 100644 data/Leland/E4E4-restHalf.xml delete mode 100644 data/Leland/E4E5-restQuarter.xml delete mode 100644 data/Leland/E4E6-rest8th.xml delete mode 100644 data/Leland/E4E7-rest16th.xml delete mode 100644 data/Leland/E4E8-rest32nd.xml delete mode 100644 data/Leland/E4E9-rest64th.xml delete mode 100644 data/Leland/E4EA-rest128th.xml delete mode 100644 data/Leland/E4EB-rest256th.xml delete mode 100644 data/Leland/E4EC-rest512th.xml delete mode 100644 data/Leland/E4ED-rest1024th.xml delete mode 100644 data/Leland/E4F2-restQuarterOld.xml delete mode 100644 data/Leland/E4F6-restQuarterZ.xml delete mode 100644 data/Leland/E500-repeat1Bar.xml delete mode 100644 data/Leland/E501-repeat2Bars.xml delete mode 100644 data/Leland/E502-repeat4Bars.xml delete mode 100644 data/Leland/E503-repeatBarUpperDot.xml delete mode 100644 data/Leland/E504-repeatBarSlash.xml delete mode 100644 data/Leland/E505-repeatBarLowerDot.xml delete mode 100644 data/Leland/E510-ottava.xml delete mode 100644 data/Leland/E511-ottavaAlta.xml delete mode 100644 data/Leland/E512-ottavaBassa.xml delete mode 100644 data/Leland/E513-ottavaBassaBa.xml delete mode 100644 data/Leland/E514-quindicesima.xml delete mode 100644 data/Leland/E515-quindicesimaAlta.xml delete mode 100644 data/Leland/E516-quindicesimaBassa.xml delete mode 100644 data/Leland/E517-ventiduesima.xml delete mode 100644 data/Leland/E518-ventiduesimaAlta.xml delete mode 100644 data/Leland/E519-ventiduesimaBassa.xml delete mode 100644 data/Leland/E51A-octaveParensLeft.xml delete mode 100644 data/Leland/E51B-octaveParensRight.xml delete mode 100644 data/Leland/E51C-ottavaBassaVb.xml delete mode 100644 data/Leland/E51D-quindicesimaBassaMb.xml delete mode 100644 data/Leland/E51E-ventiduesimaBassaMb.xml delete mode 100644 data/Leland/E520-dynamicPiano.xml delete mode 100644 data/Leland/E521-dynamicMezzo.xml delete mode 100644 data/Leland/E522-dynamicForte.xml delete mode 100644 data/Leland/E523-dynamicRinforzando.xml delete mode 100644 data/Leland/E524-dynamicSforzando.xml delete mode 100644 data/Leland/E525-dynamicZ.xml delete mode 100644 data/Leland/E526-dynamicNiente.xml delete mode 100644 data/Leland/E527-dynamicPPPPPP.xml delete mode 100644 data/Leland/E528-dynamicPPPPP.xml delete mode 100644 data/Leland/E529-dynamicPPPP.xml delete mode 100644 data/Leland/E52A-dynamicPPP.xml delete mode 100644 data/Leland/E52B-dynamicPP.xml delete mode 100644 data/Leland/E52C-dynamicMP.xml delete mode 100644 data/Leland/E52D-dynamicMF.xml delete mode 100644 data/Leland/E52E-dynamicPF.xml delete mode 100644 data/Leland/E52F-dynamicFF.xml delete mode 100644 data/Leland/E530-dynamicFFF.xml delete mode 100644 data/Leland/E531-dynamicFFFF.xml delete mode 100644 data/Leland/E532-dynamicFFFFF.xml delete mode 100644 data/Leland/E533-dynamicFFFFFF.xml delete mode 100644 data/Leland/E534-dynamicFortePiano.xml delete mode 100644 data/Leland/E535-dynamicForzando.xml delete mode 100644 data/Leland/E536-dynamicSforzando1.xml delete mode 100644 data/Leland/E537-dynamicSforzandoPiano.xml delete mode 100644 data/Leland/E538-dynamicSforzandoPianissimo.xml delete mode 100644 data/Leland/E539-dynamicSforzato.xml delete mode 100644 data/Leland/E53A-dynamicSforzatoPiano.xml delete mode 100644 data/Leland/E53B-dynamicSforzatoFF.xml delete mode 100644 data/Leland/E53C-dynamicRinforzando1.xml delete mode 100644 data/Leland/E53D-dynamicRinforzando2.xml delete mode 100644 data/Leland/E566-ornamentTrill.xml delete mode 100644 data/Leland/E567-ornamentTurn.xml delete mode 100644 data/Leland/E568-ornamentTurnInverted.xml delete mode 100644 data/Leland/E569-ornamentTurnSlash.xml delete mode 100644 data/Leland/E56A-ornamentTurnUp.xml delete mode 100644 data/Leland/E56B-ornamentTurnUpS.xml delete mode 100644 data/Leland/E56C-ornamentShortTrill.xml delete mode 100644 data/Leland/E56D-ornamentMordent.xml delete mode 100644 data/Leland/E56E-ornamentTremblement.xml delete mode 100644 data/Leland/E56F-ornamentHaydn.xml delete mode 100644 data/Leland/E583-ornamentVerticalLine.xml delete mode 100644 data/Leland/E587-ornamentSchleifer.xml delete mode 100644 data/Leland/E59D-ornamentZigZagLineNoRightEnd.xml delete mode 100644 data/Leland/E59E-ornamentZigZagLineWithRightEnd.xml delete mode 100644 data/Leland/E5B2-ornamentPrecompAppoggTrill.xml delete mode 100644 data/Leland/E5B5-ornamentPrecompSlideTrillDAnglebert.xml delete mode 100644 data/Leland/E5B8-ornamentPrecompSlideTrillBach.xml delete mode 100644 data/Leland/E5BB-ornamentPrecompTrillSuffixDandrieu.xml delete mode 100644 data/Leland/E5BC-ornamentPrecompPortDeVoixMordent.xml delete mode 100644 data/Leland/E5BD-ornamentPrecompTrillWithMordent.xml delete mode 100644 data/Leland/E5BE-ornamentPrecompCadence.xml delete mode 100644 data/Leland/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml delete mode 100644 data/Leland/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml delete mode 100644 data/Leland/E5C6-ornamentPrecompMordentUpperPrefix.xml delete mode 100644 data/Leland/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml delete mode 100644 data/Leland/E5C8-ornamentPrecompTrillLowerSuffix.xml delete mode 100644 data/Leland/E5E5-brassMuteClosed.xml delete mode 100644 data/Leland/E5E6-brassMuteHalfClosed.xml delete mode 100644 data/Leland/E5E7-brassMuteOpen.xml delete mode 100644 data/Leland/E610-stringsDownBow.xml delete mode 100644 data/Leland/E611-stringsDownBowTurned.xml delete mode 100644 data/Leland/E612-stringsUpBow.xml delete mode 100644 data/Leland/E613-stringsUpBowTurned.xml delete mode 100644 data/Leland/E614-stringsHarmonic.xml delete mode 100644 data/Leland/E630-pluckedSnapPizzicatoBelow.xml delete mode 100644 data/Leland/E631-pluckedSnapPizzicatoAbove.xml delete mode 100644 data/Leland/E632-pluckedBuzzPizzicato.xml delete mode 100644 data/Leland/E650-keyboardPedalPed.xml delete mode 100644 data/Leland/E651-keyboardPedalP.xml delete mode 100644 data/Leland/E655-keyboardPedalUp.xml delete mode 100644 data/Leland/E880-tuplet0.xml delete mode 100644 data/Leland/E881-tuplet1.xml delete mode 100644 data/Leland/E882-tuplet2.xml delete mode 100644 data/Leland/E883-tuplet3.xml delete mode 100644 data/Leland/E884-tuplet4.xml delete mode 100644 data/Leland/E885-tuplet5.xml delete mode 100644 data/Leland/E886-tuplet6.xml delete mode 100644 data/Leland/E887-tuplet7.xml delete mode 100644 data/Leland/E888-tuplet8.xml delete mode 100644 data/Leland/E889-tuplet9.xml delete mode 100644 data/Leland/E88A-tupletColon.xml delete mode 100644 data/Leland/E93C-mensuralNoteheadMinimaWhite.xml delete mode 100644 data/Leland/E93D-mensuralNoteheadSemiminimaWhite.xml delete mode 100644 data/Leland/EAA4-wiggleTrill.xml delete mode 100644 data/Leland/EAA9-wiggleArpeggiatoUp.xml delete mode 100644 data/Leland/EAAA-wiggleArpeggiatoDown.xml delete mode 100644 data/Leland/EAAD-wiggleArpeggiatoUpArrow.xml delete mode 100644 data/Leland/EAAE-wiggleArpeggiatoDownArrow.xml delete mode 100644 data/Petaluma.xml delete mode 100644 data/Petaluma/E000-brace.xml delete mode 100644 data/Petaluma/E003-bracketTop.xml delete mode 100644 data/Petaluma/E004-bracketBottom.xml delete mode 100644 data/Petaluma/E043-repeatDots.xml delete mode 100644 data/Petaluma/E044-repeatDot.xml delete mode 100644 data/Petaluma/E045-dalSegno.xml delete mode 100644 data/Petaluma/E046-daCapo.xml delete mode 100644 data/Petaluma/E047-segno.xml delete mode 100644 data/Petaluma/E048-coda.xml delete mode 100644 data/Petaluma/E049-codaSquare.xml delete mode 100644 data/Petaluma/E04B-segnoSerpent2.xml delete mode 100644 data/Petaluma/E050-gClef.xml delete mode 100644 data/Petaluma/E051-gClef15mb.xml delete mode 100644 data/Petaluma/E052-gClef8vb.xml delete mode 100644 data/Petaluma/E053-gClef8va.xml delete mode 100644 data/Petaluma/E054-gClef15ma.xml delete mode 100644 data/Petaluma/E055-gClef8vbOld.xml delete mode 100644 data/Petaluma/E056-gClef8vbCClef.xml delete mode 100644 data/Petaluma/E05C-cClef.xml delete mode 100644 data/Petaluma/E05D-cClef8vb.xml delete mode 100644 data/Petaluma/E062-fClef.xml delete mode 100644 data/Petaluma/E063-fClef15mb.xml delete mode 100644 data/Petaluma/E064-fClef8vb.xml delete mode 100644 data/Petaluma/E065-fClef8va.xml delete mode 100644 data/Petaluma/E066-fClef15ma.xml delete mode 100644 data/Petaluma/E069-unpitchedPercussionClef1.xml delete mode 100644 data/Petaluma/E06A-unpitchedPercussionClef2.xml delete mode 100644 data/Petaluma/E073-gClefReversed.xml delete mode 100644 data/Petaluma/E074-gClefTurned.xml delete mode 100644 data/Petaluma/E075-cClefReversed.xml delete mode 100644 data/Petaluma/E076-fClefReversed.xml delete mode 100644 data/Petaluma/E077-fClefTurned.xml delete mode 100644 data/Petaluma/E080-timeSig0.xml delete mode 100644 data/Petaluma/E081-timeSig1.xml delete mode 100644 data/Petaluma/E082-timeSig2.xml delete mode 100644 data/Petaluma/E083-timeSig3.xml delete mode 100644 data/Petaluma/E084-timeSig4.xml delete mode 100644 data/Petaluma/E085-timeSig5.xml delete mode 100644 data/Petaluma/E086-timeSig6.xml delete mode 100644 data/Petaluma/E087-timeSig7.xml delete mode 100644 data/Petaluma/E088-timeSig8.xml delete mode 100644 data/Petaluma/E089-timeSig9.xml delete mode 100644 data/Petaluma/E08A-timeSigCommon.xml delete mode 100644 data/Petaluma/E08B-timeSigCutCommon.xml delete mode 100644 data/Petaluma/E08C-timeSigPlus.xml delete mode 100644 data/Petaluma/E08D-timeSigPlusSmall.xml delete mode 100644 data/Petaluma/E08E-timeSigFractionalSlash.xml delete mode 100644 data/Petaluma/E08F-timeSigEquals.xml delete mode 100644 data/Petaluma/E090-timeSigMinus.xml delete mode 100644 data/Petaluma/E091-timeSigMultiply.xml delete mode 100644 data/Petaluma/E092-timeSigParensLeftSmall.xml delete mode 100644 data/Petaluma/E093-timeSigParensRightSmall.xml delete mode 100644 data/Petaluma/E094-timeSigParensLeft.xml delete mode 100644 data/Petaluma/E095-timeSigParensRight.xml delete mode 100644 data/Petaluma/E0A0-noteheadDoubleWhole.xml delete mode 100644 data/Petaluma/E0A1-noteheadDoubleWholeSquare.xml delete mode 100644 data/Petaluma/E0A2-noteheadWhole.xml delete mode 100644 data/Petaluma/E0A3-noteheadHalf.xml delete mode 100644 data/Petaluma/E0A4-noteheadBlack.xml delete mode 100644 data/Petaluma/E0A5-noteheadNull.xml delete mode 100644 data/Petaluma/E0A9-noteheadXBlack.xml delete mode 100644 data/Petaluma/E0AF-noteheadPlusBlack.xml delete mode 100644 data/Petaluma/E0B5-noteheadWholeWithX.xml delete mode 100644 data/Petaluma/E0B6-noteheadHalfWithX.xml delete mode 100644 data/Petaluma/E0B7-noteheadVoidWithX.xml delete mode 100644 data/Petaluma/E0D9-noteheadDiamondHalf.xml delete mode 100644 data/Petaluma/E0DA-noteheadDiamondHalfWide.xml delete mode 100644 data/Petaluma/E0DB-noteheadDiamondBlack.xml delete mode 100644 data/Petaluma/E0DC-noteheadDiamondBlackWide.xml delete mode 100644 data/Petaluma/E0DD-noteheadDiamondWhite.xml delete mode 100644 data/Petaluma/E0DE-noteheadDiamondWhiteWide.xml delete mode 100644 data/Petaluma/E0F5-noteheadParenthesisLeft.xml delete mode 100644 data/Petaluma/E0F6-noteheadParenthesisRight.xml delete mode 100644 data/Petaluma/E0FA-noteheadWholeFilled.xml delete mode 100644 data/Petaluma/E101-noteheadSlashHorizontalEnds.xml delete mode 100644 data/Petaluma/E102-noteheadSlashWhiteWhole.xml delete mode 100644 data/Petaluma/E103-noteheadSlashWhiteHalf.xml delete mode 100644 data/Petaluma/E220-tremolo1.xml delete mode 100644 data/Petaluma/E221-tremolo2.xml delete mode 100644 data/Petaluma/E222-tremolo3.xml delete mode 100644 data/Petaluma/E223-tremolo4.xml delete mode 100644 data/Petaluma/E224-tremolo5.xml delete mode 100644 data/Petaluma/E22A-buzzRoll.xml delete mode 100644 data/Petaluma/E240-flag8thUp.xml delete mode 100644 data/Petaluma/E241-flag8thDown.xml delete mode 100644 data/Petaluma/E242-flag16thUp.xml delete mode 100644 data/Petaluma/E243-flag16thDown.xml delete mode 100644 data/Petaluma/E244-flag32ndUp.xml delete mode 100644 data/Petaluma/E245-flag32ndDown.xml delete mode 100644 data/Petaluma/E246-flag64thUp.xml delete mode 100644 data/Petaluma/E247-flag64thDown.xml delete mode 100644 data/Petaluma/E248-flag128thUp.xml delete mode 100644 data/Petaluma/E249-flag128thDown.xml delete mode 100644 data/Petaluma/E24A-flag256thUp.xml delete mode 100644 data/Petaluma/E24B-flag256thDown.xml delete mode 100644 data/Petaluma/E24C-flag512thUp.xml delete mode 100644 data/Petaluma/E24D-flag512thDown.xml delete mode 100644 data/Petaluma/E24E-flag1024thUp.xml delete mode 100644 data/Petaluma/E24F-flag1024thDown.xml delete mode 100644 data/Petaluma/E260-accidentalFlat.xml delete mode 100644 data/Petaluma/E261-accidentalNatural.xml delete mode 100644 data/Petaluma/E262-accidentalSharp.xml delete mode 100644 data/Petaluma/E263-accidentalDoubleSharp.xml delete mode 100644 data/Petaluma/E264-accidentalDoubleFlat.xml delete mode 100644 data/Petaluma/E265-accidentalTripleSharp.xml delete mode 100644 data/Petaluma/E266-accidentalTripleFlat.xml delete mode 100644 data/Petaluma/E267-accidentalNaturalFlat.xml delete mode 100644 data/Petaluma/E268-accidentalNaturalSharp.xml delete mode 100644 data/Petaluma/E269-accidentalSharpSharp.xml delete mode 100644 data/Petaluma/E26A-accidentalParensLeft.xml delete mode 100644 data/Petaluma/E26B-accidentalParensRight.xml delete mode 100644 data/Petaluma/E26C-accidentalBracketLeft.xml delete mode 100644 data/Petaluma/E26D-accidentalBracketRight.xml delete mode 100644 data/Petaluma/E270-accidentalQuarterToneFlatArrowUp.xml delete mode 100644 data/Petaluma/E271-accidentalThreeQuarterTonesFlatArrowDown.xml delete mode 100644 data/Petaluma/E272-accidentalQuarterToneSharpNaturalArrowUp.xml delete mode 100644 data/Petaluma/E273-accidentalQuarterToneFlatNaturalArrowDown.xml delete mode 100644 data/Petaluma/E274-accidentalThreeQuarterTonesSharpArrowUp.xml delete mode 100644 data/Petaluma/E275-accidentalQuarterToneSharpArrowDown.xml delete mode 100644 data/Petaluma/E280-accidentalQuarterToneFlatStein.xml delete mode 100644 data/Petaluma/E281-accidentalThreeQuarterTonesFlatZimmermann.xml delete mode 100644 data/Petaluma/E282-accidentalQuarterToneSharpStein.xml delete mode 100644 data/Petaluma/E283-accidentalThreeQuarterTonesSharpStein.xml delete mode 100644 data/Petaluma/E440-accidentalBuyukMucennebFlat.xml delete mode 100644 data/Petaluma/E441-accidentalKucukMucennebFlat.xml delete mode 100644 data/Petaluma/E442-accidentalBakiyeFlat.xml delete mode 100644 data/Petaluma/E443-accidentalKomaFlat.xml delete mode 100644 data/Petaluma/E444-accidentalKomaSharp.xml delete mode 100644 data/Petaluma/E445-accidentalBakiyeSharp.xml delete mode 100644 data/Petaluma/E446-accidentalKucukMucennebSharp.xml delete mode 100644 data/Petaluma/E447-accidentalBuyukMucennebSharp.xml delete mode 100644 data/Petaluma/E4A0-articAccentAbove.xml delete mode 100644 data/Petaluma/E4A1-articAccentBelow.xml delete mode 100644 data/Petaluma/E4A2-articStaccatoAbove.xml delete mode 100644 data/Petaluma/E4A3-articStaccatoBelow.xml delete mode 100644 data/Petaluma/E4A4-articTenutoAbove.xml delete mode 100644 data/Petaluma/E4A5-articTenutoBelow.xml delete mode 100644 data/Petaluma/E4A6-articStaccatissimoAbove.xml delete mode 100644 data/Petaluma/E4A7-articStaccatissimoBelow.xml delete mode 100644 data/Petaluma/E4A8-articStaccatissimoWedgeAbove.xml delete mode 100644 data/Petaluma/E4A9-articStaccatissimoWedgeBelow.xml delete mode 100644 data/Petaluma/E4AA-articStaccatissimoStrokeAbove.xml delete mode 100644 data/Petaluma/E4AB-articStaccatissimoStrokeBelow.xml delete mode 100644 data/Petaluma/E4AC-articMarcatoAbove.xml delete mode 100644 data/Petaluma/E4AD-articMarcatoBelow.xml delete mode 100644 data/Petaluma/E4AE-articMarcatoStaccatoAbove.xml delete mode 100644 data/Petaluma/E4AF-articMarcatoStaccatoBelow.xml delete mode 100644 data/Petaluma/E4B0-articAccentStaccatoAbove.xml delete mode 100644 data/Petaluma/E4B1-articAccentStaccatoBelow.xml delete mode 100644 data/Petaluma/E4B2-articTenutoStaccatoAbove.xml delete mode 100644 data/Petaluma/E4B3-articTenutoStaccatoBelow.xml delete mode 100644 data/Petaluma/E4B4-articTenutoAccentAbove.xml delete mode 100644 data/Petaluma/E4B5-articTenutoAccentBelow.xml delete mode 100644 data/Petaluma/E4B6-articStressAbove.xml delete mode 100644 data/Petaluma/E4B7-articStressBelow.xml delete mode 100644 data/Petaluma/E4B8-articUnstressAbove.xml delete mode 100644 data/Petaluma/E4B9-articUnstressBelow.xml delete mode 100644 data/Petaluma/E4BA-articLaissezVibrerAbove.xml delete mode 100644 data/Petaluma/E4BB-articLaissezVibrerBelow.xml delete mode 100644 data/Petaluma/E4BC-articMarcatoTenutoAbove.xml delete mode 100644 data/Petaluma/E4BD-articMarcatoTenutoBelow.xml delete mode 100644 data/Petaluma/E4C0-fermataAbove.xml delete mode 100644 data/Petaluma/E4C1-fermataBelow.xml delete mode 100644 data/Petaluma/E4C2-fermataVeryShortAbove.xml delete mode 100644 data/Petaluma/E4C3-fermataVeryShortBelow.xml delete mode 100644 data/Petaluma/E4C4-fermataShortAbove.xml delete mode 100644 data/Petaluma/E4C5-fermataShortBelow.xml delete mode 100644 data/Petaluma/E4C6-fermataLongAbove.xml delete mode 100644 data/Petaluma/E4C7-fermataLongBelow.xml delete mode 100644 data/Petaluma/E4C8-fermataVeryLongAbove.xml delete mode 100644 data/Petaluma/E4C9-fermataVeryLongBelow.xml delete mode 100644 data/Petaluma/E4CE-breathMarkComma.xml delete mode 100644 data/Petaluma/E4E0-restMaxima.xml delete mode 100644 data/Petaluma/E4E1-restLonga.xml delete mode 100644 data/Petaluma/E4E2-restDoubleWhole.xml delete mode 100644 data/Petaluma/E4E3-restWhole.xml delete mode 100644 data/Petaluma/E4E4-restHalf.xml delete mode 100644 data/Petaluma/E4E5-restQuarter.xml delete mode 100644 data/Petaluma/E4E6-rest8th.xml delete mode 100644 data/Petaluma/E4E7-rest16th.xml delete mode 100644 data/Petaluma/E4E8-rest32nd.xml delete mode 100644 data/Petaluma/E4E9-rest64th.xml delete mode 100644 data/Petaluma/E4EA-rest128th.xml delete mode 100644 data/Petaluma/E4EB-rest256th.xml delete mode 100644 data/Petaluma/E4EC-rest512th.xml delete mode 100644 data/Petaluma/E4ED-rest1024th.xml delete mode 100644 data/Petaluma/E4F2-restQuarterOld.xml delete mode 100644 data/Petaluma/E4F6-restQuarterZ.xml delete mode 100644 data/Petaluma/E500-repeat1Bar.xml delete mode 100644 data/Petaluma/E501-repeat2Bars.xml delete mode 100644 data/Petaluma/E502-repeat4Bars.xml delete mode 100644 data/Petaluma/E503-repeatBarUpperDot.xml delete mode 100644 data/Petaluma/E504-repeatBarSlash.xml delete mode 100644 data/Petaluma/E505-repeatBarLowerDot.xml delete mode 100644 data/Petaluma/E510-ottava.xml delete mode 100644 data/Petaluma/E511-ottavaAlta.xml delete mode 100644 data/Petaluma/E512-ottavaBassa.xml delete mode 100644 data/Petaluma/E513-ottavaBassaBa.xml delete mode 100644 data/Petaluma/E514-quindicesima.xml delete mode 100644 data/Petaluma/E515-quindicesimaAlta.xml delete mode 100644 data/Petaluma/E516-quindicesimaBassa.xml delete mode 100644 data/Petaluma/E517-ventiduesima.xml delete mode 100644 data/Petaluma/E518-ventiduesimaAlta.xml delete mode 100644 data/Petaluma/E519-ventiduesimaBassa.xml delete mode 100644 data/Petaluma/E51A-octaveParensLeft.xml delete mode 100644 data/Petaluma/E51B-octaveParensRight.xml delete mode 100644 data/Petaluma/E51C-ottavaBassaVb.xml delete mode 100644 data/Petaluma/E51D-quindicesimaBassaMb.xml delete mode 100644 data/Petaluma/E51E-ventiduesimaBassaMb.xml delete mode 100644 data/Petaluma/E520-dynamicPiano.xml delete mode 100644 data/Petaluma/E521-dynamicMezzo.xml delete mode 100644 data/Petaluma/E522-dynamicForte.xml delete mode 100644 data/Petaluma/E523-dynamicRinforzando.xml delete mode 100644 data/Petaluma/E524-dynamicSforzando.xml delete mode 100644 data/Petaluma/E525-dynamicZ.xml delete mode 100644 data/Petaluma/E526-dynamicNiente.xml delete mode 100644 data/Petaluma/E527-dynamicPPPPPP.xml delete mode 100644 data/Petaluma/E528-dynamicPPPPP.xml delete mode 100644 data/Petaluma/E529-dynamicPPPP.xml delete mode 100644 data/Petaluma/E52A-dynamicPPP.xml delete mode 100644 data/Petaluma/E52B-dynamicPP.xml delete mode 100644 data/Petaluma/E52C-dynamicMP.xml delete mode 100644 data/Petaluma/E52D-dynamicMF.xml delete mode 100644 data/Petaluma/E52E-dynamicPF.xml delete mode 100644 data/Petaluma/E52F-dynamicFF.xml delete mode 100644 data/Petaluma/E530-dynamicFFF.xml delete mode 100644 data/Petaluma/E531-dynamicFFFF.xml delete mode 100644 data/Petaluma/E532-dynamicFFFFF.xml delete mode 100644 data/Petaluma/E533-dynamicFFFFFF.xml delete mode 100644 data/Petaluma/E534-dynamicFortePiano.xml delete mode 100644 data/Petaluma/E535-dynamicForzando.xml delete mode 100644 data/Petaluma/E536-dynamicSforzando1.xml delete mode 100644 data/Petaluma/E537-dynamicSforzandoPiano.xml delete mode 100644 data/Petaluma/E538-dynamicSforzandoPianissimo.xml delete mode 100644 data/Petaluma/E539-dynamicSforzato.xml delete mode 100644 data/Petaluma/E53A-dynamicSforzatoPiano.xml delete mode 100644 data/Petaluma/E53B-dynamicSforzatoFF.xml delete mode 100644 data/Petaluma/E53C-dynamicRinforzando1.xml delete mode 100644 data/Petaluma/E53D-dynamicRinforzando2.xml delete mode 100644 data/Petaluma/E566-ornamentTrill.xml delete mode 100644 data/Petaluma/E567-ornamentTurn.xml delete mode 100644 data/Petaluma/E568-ornamentTurnInverted.xml delete mode 100644 data/Petaluma/E569-ornamentTurnSlash.xml delete mode 100644 data/Petaluma/E56A-ornamentTurnUp.xml delete mode 100644 data/Petaluma/E56B-ornamentTurnUpS.xml delete mode 100644 data/Petaluma/E56C-ornamentShortTrill.xml delete mode 100644 data/Petaluma/E56D-ornamentMordent.xml delete mode 100644 data/Petaluma/E56E-ornamentTremblement.xml delete mode 100644 data/Petaluma/E56F-ornamentHaydn.xml delete mode 100644 data/Petaluma/E583-ornamentVerticalLine.xml delete mode 100644 data/Petaluma/E587-ornamentSchleifer.xml delete mode 100644 data/Petaluma/E5B0-ornamentPrecompSlide.xml delete mode 100644 data/Petaluma/E5B1-ornamentPrecompDescendingSlide.xml delete mode 100644 data/Petaluma/E5B2-ornamentPrecompAppoggTrill.xml delete mode 100644 data/Petaluma/E5B3-ornamentPrecompAppoggTrillSuffix.xml delete mode 100644 data/Petaluma/E5B4-ornamentPrecompTurnTrillDAnglebert.xml delete mode 100644 data/Petaluma/E5B5-ornamentPrecompSlideTrillDAnglebert.xml delete mode 100644 data/Petaluma/E5B6-ornamentPrecompSlideTrillMarpurg.xml delete mode 100644 data/Petaluma/E5B7-ornamentPrecompTurnTrillBach.xml delete mode 100644 data/Petaluma/E5B8-ornamentPrecompSlideTrillBach.xml delete mode 100644 data/Petaluma/E5B9-ornamentPrecompSlideTrillMuffat.xml delete mode 100644 data/Petaluma/E5BA-ornamentPrecompSlideTrillSuffixMuffat.xml delete mode 100644 data/Petaluma/E5BB-ornamentPrecompTrillSuffixDandrieu.xml delete mode 100644 data/Petaluma/E5BC-ornamentPrecompPortDeVoixMordent.xml delete mode 100644 data/Petaluma/E5BD-ornamentPrecompTrillWithMordent.xml delete mode 100644 data/Petaluma/E5BE-ornamentPrecompCadence.xml delete mode 100644 data/Petaluma/E5BF-ornamentPrecompCadenceWithTurn.xml delete mode 100644 data/Petaluma/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml delete mode 100644 data/Petaluma/E5C1-ornamentPrecompCadenceUpperPrefix.xml delete mode 100644 data/Petaluma/E5C2-ornamentPrecompCadenceUpperPrefixTurn.xml delete mode 100644 data/Petaluma/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml delete mode 100644 data/Petaluma/E5C4-ornamentPrecompDoubleCadenceUpperPrefixTurn.xml delete mode 100644 data/Petaluma/E5C5-ornamentPrecompMordentRelease.xml delete mode 100644 data/Petaluma/E5C6-ornamentPrecompMordentUpperPrefix.xml delete mode 100644 data/Petaluma/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml delete mode 100644 data/Petaluma/E5C8-ornamentPrecompTrillLowerSuffix.xml delete mode 100644 data/Petaluma/E5E5-brassMuteClosed.xml delete mode 100644 data/Petaluma/E5E6-brassMuteHalfClosed.xml delete mode 100644 data/Petaluma/E5E7-brassMuteOpen.xml delete mode 100644 data/Petaluma/E610-stringsDownBow.xml delete mode 100644 data/Petaluma/E611-stringsDownBowTurned.xml delete mode 100644 data/Petaluma/E612-stringsUpBow.xml delete mode 100644 data/Petaluma/E613-stringsUpBowTurned.xml delete mode 100644 data/Petaluma/E614-stringsHarmonic.xml delete mode 100644 data/Petaluma/E630-pluckedSnapPizzicatoBelow.xml delete mode 100644 data/Petaluma/E631-pluckedSnapPizzicatoAbove.xml delete mode 100644 data/Petaluma/E632-pluckedBuzzPizzicato.xml delete mode 100644 data/Petaluma/E633-pluckedLeftHandPizzicato.xml delete mode 100644 data/Petaluma/E638-pluckedDamp.xml delete mode 100644 data/Petaluma/E645-vocalSprechgesang.xml delete mode 100644 data/Petaluma/E650-keyboardPedalPed.xml delete mode 100644 data/Petaluma/E651-keyboardPedalP.xml delete mode 100644 data/Petaluma/E655-keyboardPedalUp.xml delete mode 100644 data/Petaluma/E659-keyboardPedalSost.xml delete mode 100644 data/Petaluma/E65A-keyboardPedalS.xml delete mode 100644 data/Petaluma/E880-tuplet0.xml delete mode 100644 data/Petaluma/E881-tuplet1.xml delete mode 100644 data/Petaluma/E882-tuplet2.xml delete mode 100644 data/Petaluma/E883-tuplet3.xml delete mode 100644 data/Petaluma/E884-tuplet4.xml delete mode 100644 data/Petaluma/E885-tuplet5.xml delete mode 100644 data/Petaluma/E886-tuplet6.xml delete mode 100644 data/Petaluma/E887-tuplet7.xml delete mode 100644 data/Petaluma/E888-tuplet8.xml delete mode 100644 data/Petaluma/E889-tuplet9.xml delete mode 100644 data/Petaluma/E88A-tupletColon.xml delete mode 100644 data/Petaluma/E938-mensuralNoteheadSemibrevisBlack.xml delete mode 100644 data/Petaluma/E939-mensuralNoteheadSemibrevisVoid.xml delete mode 100644 data/Petaluma/E93C-mensuralNoteheadMinimaWhite.xml delete mode 100644 data/Petaluma/E93D-mensuralNoteheadSemiminimaWhite.xml delete mode 100644 data/Petaluma/E93E-mensuralCombStemUp.xml delete mode 100644 data/Petaluma/E93F-mensuralCombStemDown.xml delete mode 100644 data/Petaluma/E949-mensuralCombStemUpFlagSemiminima.xml delete mode 100644 data/Petaluma/E94A-mensuralCombStemDownFlagSemiminima.xml delete mode 100644 data/Petaluma/E94B-mensuralCombStemUpFlagFusa.xml delete mode 100644 data/Petaluma/E94C-mensuralCombStemDownFlagFusa.xml delete mode 100644 data/Petaluma/EAA4-wiggleTrill.xml delete mode 100644 data/Petaluma/EAA9-wiggleArpeggiatoUp.xml delete mode 100644 data/Petaluma/EAAA-wiggleArpeggiatoDown.xml delete mode 100644 data/Petaluma/EAAD-wiggleArpeggiatoUpArrow.xml delete mode 100644 data/Petaluma/EAAE-wiggleArpeggiatoDownArrow.xml delete mode 100644 data/Petaluma/EAAF-wiggleGlissando.xml diff --git a/data/Bravura.xml b/data/Bravura.xml deleted file mode 100644 index 6e510c50175..00000000000 --- a/data/Bravura.xml +++ /dev/null @@ -1,696 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
- - - - - -
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - - - - - - - - - - - - - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - -
- - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/Bravura/E000-brace.xml b/data/Bravura/E000-brace.xml deleted file mode 100644 index d041eb14545..00000000000 --- a/data/Bravura/E000-brace.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E003-bracketTop.xml b/data/Bravura/E003-bracketTop.xml deleted file mode 100644 index 505f66f59ca..00000000000 --- a/data/Bravura/E003-bracketTop.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E004-bracketBottom.xml b/data/Bravura/E004-bracketBottom.xml deleted file mode 100644 index 6052aa6ab71..00000000000 --- a/data/Bravura/E004-bracketBottom.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E043-repeatDots.xml b/data/Bravura/E043-repeatDots.xml deleted file mode 100644 index 7152109f60d..00000000000 --- a/data/Bravura/E043-repeatDots.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E044-repeatDot.xml b/data/Bravura/E044-repeatDot.xml deleted file mode 100644 index ac02dc32e29..00000000000 --- a/data/Bravura/E044-repeatDot.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E045-dalSegno.xml b/data/Bravura/E045-dalSegno.xml deleted file mode 100644 index 7f470fe9cb9..00000000000 --- a/data/Bravura/E045-dalSegno.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E046-daCapo.xml b/data/Bravura/E046-daCapo.xml deleted file mode 100644 index 8b10a53a9c2..00000000000 --- a/data/Bravura/E046-daCapo.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E047-segno.xml b/data/Bravura/E047-segno.xml deleted file mode 100644 index aad8401b5f3..00000000000 --- a/data/Bravura/E047-segno.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E048-coda.xml b/data/Bravura/E048-coda.xml deleted file mode 100644 index 2fdbc2f88bb..00000000000 --- a/data/Bravura/E048-coda.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E049-codaSquare.xml b/data/Bravura/E049-codaSquare.xml deleted file mode 100644 index cb79a2c3fcd..00000000000 --- a/data/Bravura/E049-codaSquare.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E04B-segnoSerpent2.xml b/data/Bravura/E04B-segnoSerpent2.xml deleted file mode 100644 index ff3ec28428d..00000000000 --- a/data/Bravura/E04B-segnoSerpent2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E050-gClef.xml b/data/Bravura/E050-gClef.xml deleted file mode 100644 index 708ea67125e..00000000000 --- a/data/Bravura/E050-gClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E051-gClef15mb.xml b/data/Bravura/E051-gClef15mb.xml deleted file mode 100644 index 442aebca255..00000000000 --- a/data/Bravura/E051-gClef15mb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E052-gClef8vb.xml b/data/Bravura/E052-gClef8vb.xml deleted file mode 100644 index 7f70c6f9947..00000000000 --- a/data/Bravura/E052-gClef8vb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E053-gClef8va.xml b/data/Bravura/E053-gClef8va.xml deleted file mode 100644 index ac3893c211f..00000000000 --- a/data/Bravura/E053-gClef8va.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E054-gClef15ma.xml b/data/Bravura/E054-gClef15ma.xml deleted file mode 100644 index 1a800dd6a77..00000000000 --- a/data/Bravura/E054-gClef15ma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E055-gClef8vbOld.xml b/data/Bravura/E055-gClef8vbOld.xml deleted file mode 100644 index 7d41455ba98..00000000000 --- a/data/Bravura/E055-gClef8vbOld.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E056-gClef8vbCClef.xml b/data/Bravura/E056-gClef8vbCClef.xml deleted file mode 100644 index 84576a5ed3a..00000000000 --- a/data/Bravura/E056-gClef8vbCClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E05C-cClef.xml b/data/Bravura/E05C-cClef.xml deleted file mode 100644 index ac0782156c0..00000000000 --- a/data/Bravura/E05C-cClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E05D-cClef8vb.xml b/data/Bravura/E05D-cClef8vb.xml deleted file mode 100644 index ad46fa632f5..00000000000 --- a/data/Bravura/E05D-cClef8vb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E062-fClef.xml b/data/Bravura/E062-fClef.xml deleted file mode 100644 index e78d3771932..00000000000 --- a/data/Bravura/E062-fClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E063-fClef15mb.xml b/data/Bravura/E063-fClef15mb.xml deleted file mode 100644 index a89896b2220..00000000000 --- a/data/Bravura/E063-fClef15mb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E064-fClef8vb.xml b/data/Bravura/E064-fClef8vb.xml deleted file mode 100644 index 95337d24f13..00000000000 --- a/data/Bravura/E064-fClef8vb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E065-fClef8va.xml b/data/Bravura/E065-fClef8va.xml deleted file mode 100644 index d37854d647f..00000000000 --- a/data/Bravura/E065-fClef8va.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E066-fClef15ma.xml b/data/Bravura/E066-fClef15ma.xml deleted file mode 100644 index 16f39468496..00000000000 --- a/data/Bravura/E066-fClef15ma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E069-unpitchedPercussionClef1.xml b/data/Bravura/E069-unpitchedPercussionClef1.xml deleted file mode 100644 index 11faf207b92..00000000000 --- a/data/Bravura/E069-unpitchedPercussionClef1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E06A-unpitchedPercussionClef2.xml b/data/Bravura/E06A-unpitchedPercussionClef2.xml deleted file mode 100644 index bf597710b52..00000000000 --- a/data/Bravura/E06A-unpitchedPercussionClef2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E073-gClefReversed.xml b/data/Bravura/E073-gClefReversed.xml deleted file mode 100644 index 2b7cead805c..00000000000 --- a/data/Bravura/E073-gClefReversed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E074-gClefTurned.xml b/data/Bravura/E074-gClefTurned.xml deleted file mode 100644 index 599e2b5b97a..00000000000 --- a/data/Bravura/E074-gClefTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E075-cClefReversed.xml b/data/Bravura/E075-cClefReversed.xml deleted file mode 100644 index 9d2137cb700..00000000000 --- a/data/Bravura/E075-cClefReversed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E076-fClefReversed.xml b/data/Bravura/E076-fClefReversed.xml deleted file mode 100644 index a35a1c0c588..00000000000 --- a/data/Bravura/E076-fClefReversed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E077-fClefTurned.xml b/data/Bravura/E077-fClefTurned.xml deleted file mode 100644 index 61e89fa7256..00000000000 --- a/data/Bravura/E077-fClefTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E080-timeSig0.xml b/data/Bravura/E080-timeSig0.xml deleted file mode 100644 index 65888083b1e..00000000000 --- a/data/Bravura/E080-timeSig0.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E081-timeSig1.xml b/data/Bravura/E081-timeSig1.xml deleted file mode 100644 index 77f884eaa73..00000000000 --- a/data/Bravura/E081-timeSig1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E082-timeSig2.xml b/data/Bravura/E082-timeSig2.xml deleted file mode 100644 index 7f4b11309cb..00000000000 --- a/data/Bravura/E082-timeSig2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E083-timeSig3.xml b/data/Bravura/E083-timeSig3.xml deleted file mode 100644 index f28b29b2cb1..00000000000 --- a/data/Bravura/E083-timeSig3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E084-timeSig4.xml b/data/Bravura/E084-timeSig4.xml deleted file mode 100644 index f51550c12df..00000000000 --- a/data/Bravura/E084-timeSig4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E085-timeSig5.xml b/data/Bravura/E085-timeSig5.xml deleted file mode 100644 index b820a814c9b..00000000000 --- a/data/Bravura/E085-timeSig5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E086-timeSig6.xml b/data/Bravura/E086-timeSig6.xml deleted file mode 100644 index 5b88da2bb4b..00000000000 --- a/data/Bravura/E086-timeSig6.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E087-timeSig7.xml b/data/Bravura/E087-timeSig7.xml deleted file mode 100644 index 3dc69f16f5b..00000000000 --- a/data/Bravura/E087-timeSig7.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E088-timeSig8.xml b/data/Bravura/E088-timeSig8.xml deleted file mode 100644 index 9b629ed6de2..00000000000 --- a/data/Bravura/E088-timeSig8.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E089-timeSig9.xml b/data/Bravura/E089-timeSig9.xml deleted file mode 100644 index 5e0a5e7d394..00000000000 --- a/data/Bravura/E089-timeSig9.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E08A-timeSigCommon.xml b/data/Bravura/E08A-timeSigCommon.xml deleted file mode 100644 index cffb2ae8911..00000000000 --- a/data/Bravura/E08A-timeSigCommon.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E08B-timeSigCutCommon.xml b/data/Bravura/E08B-timeSigCutCommon.xml deleted file mode 100644 index a63297775a5..00000000000 --- a/data/Bravura/E08B-timeSigCutCommon.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E08C-timeSigPlus.xml b/data/Bravura/E08C-timeSigPlus.xml deleted file mode 100644 index eeba8038c0d..00000000000 --- a/data/Bravura/E08C-timeSigPlus.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E08D-timeSigPlusSmall.xml b/data/Bravura/E08D-timeSigPlusSmall.xml deleted file mode 100644 index 9df2c847d10..00000000000 --- a/data/Bravura/E08D-timeSigPlusSmall.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E08E-timeSigFractionalSlash.xml b/data/Bravura/E08E-timeSigFractionalSlash.xml deleted file mode 100644 index 4a3343e913b..00000000000 --- a/data/Bravura/E08E-timeSigFractionalSlash.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E08F-timeSigEquals.xml b/data/Bravura/E08F-timeSigEquals.xml deleted file mode 100644 index 4f2ac8177c2..00000000000 --- a/data/Bravura/E08F-timeSigEquals.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E090-timeSigMinus.xml b/data/Bravura/E090-timeSigMinus.xml deleted file mode 100644 index 0d8b9103ec8..00000000000 --- a/data/Bravura/E090-timeSigMinus.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E091-timeSigMultiply.xml b/data/Bravura/E091-timeSigMultiply.xml deleted file mode 100644 index 2440f6894e5..00000000000 --- a/data/Bravura/E091-timeSigMultiply.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E092-timeSigParensLeftSmall.xml b/data/Bravura/E092-timeSigParensLeftSmall.xml deleted file mode 100644 index 356eebb803c..00000000000 --- a/data/Bravura/E092-timeSigParensLeftSmall.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E093-timeSigParensRightSmall.xml b/data/Bravura/E093-timeSigParensRightSmall.xml deleted file mode 100644 index 86964768210..00000000000 --- a/data/Bravura/E093-timeSigParensRightSmall.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E094-timeSigParensLeft.xml b/data/Bravura/E094-timeSigParensLeft.xml deleted file mode 100644 index 76e990bbf0b..00000000000 --- a/data/Bravura/E094-timeSigParensLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E095-timeSigParensRight.xml b/data/Bravura/E095-timeSigParensRight.xml deleted file mode 100644 index 58f6436e70a..00000000000 --- a/data/Bravura/E095-timeSigParensRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0A0-noteheadDoubleWhole.xml b/data/Bravura/E0A0-noteheadDoubleWhole.xml deleted file mode 100644 index efed65b7485..00000000000 --- a/data/Bravura/E0A0-noteheadDoubleWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0A1-noteheadDoubleWholeSquare.xml b/data/Bravura/E0A1-noteheadDoubleWholeSquare.xml deleted file mode 100644 index e09614fb0b0..00000000000 --- a/data/Bravura/E0A1-noteheadDoubleWholeSquare.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0A2-noteheadWhole.xml b/data/Bravura/E0A2-noteheadWhole.xml deleted file mode 100644 index 7668a0969b0..00000000000 --- a/data/Bravura/E0A2-noteheadWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0A3-noteheadHalf.xml b/data/Bravura/E0A3-noteheadHalf.xml deleted file mode 100644 index a71b697d242..00000000000 --- a/data/Bravura/E0A3-noteheadHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0A4-noteheadBlack.xml b/data/Bravura/E0A4-noteheadBlack.xml deleted file mode 100644 index b225dc3f7d7..00000000000 --- a/data/Bravura/E0A4-noteheadBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0A5-noteheadNull.xml b/data/Bravura/E0A5-noteheadNull.xml deleted file mode 100644 index 1445fb5f59a..00000000000 --- a/data/Bravura/E0A5-noteheadNull.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0A9-noteheadXBlack.xml b/data/Bravura/E0A9-noteheadXBlack.xml deleted file mode 100644 index 552d775249b..00000000000 --- a/data/Bravura/E0A9-noteheadXBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0AF-noteheadPlusBlack.xml b/data/Bravura/E0AF-noteheadPlusBlack.xml deleted file mode 100644 index 1eafa3dce03..00000000000 --- a/data/Bravura/E0AF-noteheadPlusBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0B5-noteheadWholeWithX.xml b/data/Bravura/E0B5-noteheadWholeWithX.xml deleted file mode 100644 index acce0c48a81..00000000000 --- a/data/Bravura/E0B5-noteheadWholeWithX.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0B6-noteheadHalfWithX.xml b/data/Bravura/E0B6-noteheadHalfWithX.xml deleted file mode 100644 index b42bcad3e3b..00000000000 --- a/data/Bravura/E0B6-noteheadHalfWithX.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0B7-noteheadVoidWithX.xml b/data/Bravura/E0B7-noteheadVoidWithX.xml deleted file mode 100644 index 97e2c175792..00000000000 --- a/data/Bravura/E0B7-noteheadVoidWithX.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0D9-noteheadDiamondHalf.xml b/data/Bravura/E0D9-noteheadDiamondHalf.xml deleted file mode 100644 index 13c19f237f9..00000000000 --- a/data/Bravura/E0D9-noteheadDiamondHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0DA-noteheadDiamondHalfWide.xml b/data/Bravura/E0DA-noteheadDiamondHalfWide.xml deleted file mode 100644 index f517c709444..00000000000 --- a/data/Bravura/E0DA-noteheadDiamondHalfWide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0DB-noteheadDiamondBlack.xml b/data/Bravura/E0DB-noteheadDiamondBlack.xml deleted file mode 100644 index 409994715ac..00000000000 --- a/data/Bravura/E0DB-noteheadDiamondBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0DC-noteheadDiamondBlackWide.xml b/data/Bravura/E0DC-noteheadDiamondBlackWide.xml deleted file mode 100644 index cbe6f7951dd..00000000000 --- a/data/Bravura/E0DC-noteheadDiamondBlackWide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0DD-noteheadDiamondWhite.xml b/data/Bravura/E0DD-noteheadDiamondWhite.xml deleted file mode 100644 index 1fc9b8951da..00000000000 --- a/data/Bravura/E0DD-noteheadDiamondWhite.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0DE-noteheadDiamondWhiteWide.xml b/data/Bravura/E0DE-noteheadDiamondWhiteWide.xml deleted file mode 100644 index aa35f276c3f..00000000000 --- a/data/Bravura/E0DE-noteheadDiamondWhiteWide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0F5-noteheadParenthesisLeft.xml b/data/Bravura/E0F5-noteheadParenthesisLeft.xml deleted file mode 100644 index 1c7428523e1..00000000000 --- a/data/Bravura/E0F5-noteheadParenthesisLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0F6-noteheadParenthesisRight.xml b/data/Bravura/E0F6-noteheadParenthesisRight.xml deleted file mode 100644 index 476df581fdb..00000000000 --- a/data/Bravura/E0F6-noteheadParenthesisRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E0FA-noteheadWholeFilled.xml b/data/Bravura/E0FA-noteheadWholeFilled.xml deleted file mode 100644 index c69596f769e..00000000000 --- a/data/Bravura/E0FA-noteheadWholeFilled.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E101-noteheadSlashHorizontalEnds.xml b/data/Bravura/E101-noteheadSlashHorizontalEnds.xml deleted file mode 100644 index cb9bd307cf0..00000000000 --- a/data/Bravura/E101-noteheadSlashHorizontalEnds.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E102-noteheadSlashWhiteWhole.xml b/data/Bravura/E102-noteheadSlashWhiteWhole.xml deleted file mode 100644 index 054464693f0..00000000000 --- a/data/Bravura/E102-noteheadSlashWhiteWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E103-noteheadSlashWhiteHalf.xml b/data/Bravura/E103-noteheadSlashWhiteHalf.xml deleted file mode 100644 index e92d2e47a0b..00000000000 --- a/data/Bravura/E103-noteheadSlashWhiteHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E220-tremolo1.xml b/data/Bravura/E220-tremolo1.xml deleted file mode 100644 index 0febed16fd0..00000000000 --- a/data/Bravura/E220-tremolo1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E221-tremolo2.xml b/data/Bravura/E221-tremolo2.xml deleted file mode 100644 index 71f7e784f85..00000000000 --- a/data/Bravura/E221-tremolo2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E222-tremolo3.xml b/data/Bravura/E222-tremolo3.xml deleted file mode 100644 index 05a1751fdb7..00000000000 --- a/data/Bravura/E222-tremolo3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E223-tremolo4.xml b/data/Bravura/E223-tremolo4.xml deleted file mode 100644 index 4bb89434a78..00000000000 --- a/data/Bravura/E223-tremolo4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E224-tremolo5.xml b/data/Bravura/E224-tremolo5.xml deleted file mode 100644 index 5769f29c692..00000000000 --- a/data/Bravura/E224-tremolo5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E22A-buzzRoll.xml b/data/Bravura/E22A-buzzRoll.xml deleted file mode 100644 index 7d7bd05b7ef..00000000000 --- a/data/Bravura/E22A-buzzRoll.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E240-flag8thUp.xml b/data/Bravura/E240-flag8thUp.xml deleted file mode 100644 index 1ee624d6732..00000000000 --- a/data/Bravura/E240-flag8thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E241-flag8thDown.xml b/data/Bravura/E241-flag8thDown.xml deleted file mode 100644 index 6c895e000f9..00000000000 --- a/data/Bravura/E241-flag8thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E242-flag16thUp.xml b/data/Bravura/E242-flag16thUp.xml deleted file mode 100644 index 3d1c4b1f708..00000000000 --- a/data/Bravura/E242-flag16thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E243-flag16thDown.xml b/data/Bravura/E243-flag16thDown.xml deleted file mode 100644 index 337253eeebe..00000000000 --- a/data/Bravura/E243-flag16thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E244-flag32ndUp.xml b/data/Bravura/E244-flag32ndUp.xml deleted file mode 100644 index 0c1f6c7d366..00000000000 --- a/data/Bravura/E244-flag32ndUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E245-flag32ndDown.xml b/data/Bravura/E245-flag32ndDown.xml deleted file mode 100644 index 1bf31b78f2a..00000000000 --- a/data/Bravura/E245-flag32ndDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E246-flag64thUp.xml b/data/Bravura/E246-flag64thUp.xml deleted file mode 100644 index 6fc7123f3d8..00000000000 --- a/data/Bravura/E246-flag64thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E247-flag64thDown.xml b/data/Bravura/E247-flag64thDown.xml deleted file mode 100644 index df79fd2c0a8..00000000000 --- a/data/Bravura/E247-flag64thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E248-flag128thUp.xml b/data/Bravura/E248-flag128thUp.xml deleted file mode 100644 index 367fb10d650..00000000000 --- a/data/Bravura/E248-flag128thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E249-flag128thDown.xml b/data/Bravura/E249-flag128thDown.xml deleted file mode 100644 index ae1da108d72..00000000000 --- a/data/Bravura/E249-flag128thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E24A-flag256thUp.xml b/data/Bravura/E24A-flag256thUp.xml deleted file mode 100644 index 4699bf88588..00000000000 --- a/data/Bravura/E24A-flag256thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E24B-flag256thDown.xml b/data/Bravura/E24B-flag256thDown.xml deleted file mode 100644 index 14395eace49..00000000000 --- a/data/Bravura/E24B-flag256thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E24C-flag512thUp.xml b/data/Bravura/E24C-flag512thUp.xml deleted file mode 100644 index 3438d8c3093..00000000000 --- a/data/Bravura/E24C-flag512thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E24D-flag512thDown.xml b/data/Bravura/E24D-flag512thDown.xml deleted file mode 100644 index 18a32803398..00000000000 --- a/data/Bravura/E24D-flag512thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E24E-flag1024thUp.xml b/data/Bravura/E24E-flag1024thUp.xml deleted file mode 100644 index 214a4155580..00000000000 --- a/data/Bravura/E24E-flag1024thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E24F-flag1024thDown.xml b/data/Bravura/E24F-flag1024thDown.xml deleted file mode 100644 index b5de10ac352..00000000000 --- a/data/Bravura/E24F-flag1024thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E260-accidentalFlat.xml b/data/Bravura/E260-accidentalFlat.xml deleted file mode 100644 index 0e56beae4af..00000000000 --- a/data/Bravura/E260-accidentalFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E261-accidentalNatural.xml b/data/Bravura/E261-accidentalNatural.xml deleted file mode 100644 index efa0ca04899..00000000000 --- a/data/Bravura/E261-accidentalNatural.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E262-accidentalSharp.xml b/data/Bravura/E262-accidentalSharp.xml deleted file mode 100644 index 02417421b0e..00000000000 --- a/data/Bravura/E262-accidentalSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E263-accidentalDoubleSharp.xml b/data/Bravura/E263-accidentalDoubleSharp.xml deleted file mode 100644 index 530b54a8064..00000000000 --- a/data/Bravura/E263-accidentalDoubleSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E264-accidentalDoubleFlat.xml b/data/Bravura/E264-accidentalDoubleFlat.xml deleted file mode 100644 index 5d3fef3484d..00000000000 --- a/data/Bravura/E264-accidentalDoubleFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E265-accidentalTripleSharp.xml b/data/Bravura/E265-accidentalTripleSharp.xml deleted file mode 100644 index 4f9bb7f5590..00000000000 --- a/data/Bravura/E265-accidentalTripleSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E266-accidentalTripleFlat.xml b/data/Bravura/E266-accidentalTripleFlat.xml deleted file mode 100644 index fd272217312..00000000000 --- a/data/Bravura/E266-accidentalTripleFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E267-accidentalNaturalFlat.xml b/data/Bravura/E267-accidentalNaturalFlat.xml deleted file mode 100644 index e9279c9fb97..00000000000 --- a/data/Bravura/E267-accidentalNaturalFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E268-accidentalNaturalSharp.xml b/data/Bravura/E268-accidentalNaturalSharp.xml deleted file mode 100644 index f7f1a587f2a..00000000000 --- a/data/Bravura/E268-accidentalNaturalSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E269-accidentalSharpSharp.xml b/data/Bravura/E269-accidentalSharpSharp.xml deleted file mode 100644 index d5f5252e7e5..00000000000 --- a/data/Bravura/E269-accidentalSharpSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E26A-accidentalParensLeft.xml b/data/Bravura/E26A-accidentalParensLeft.xml deleted file mode 100644 index b0f23f0f78d..00000000000 --- a/data/Bravura/E26A-accidentalParensLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E26B-accidentalParensRight.xml b/data/Bravura/E26B-accidentalParensRight.xml deleted file mode 100644 index ec2a01943e1..00000000000 --- a/data/Bravura/E26B-accidentalParensRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E26C-accidentalBracketLeft.xml b/data/Bravura/E26C-accidentalBracketLeft.xml deleted file mode 100644 index 60b8fbf9bae..00000000000 --- a/data/Bravura/E26C-accidentalBracketLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E26D-accidentalBracketRight.xml b/data/Bravura/E26D-accidentalBracketRight.xml deleted file mode 100644 index f8a58735f7d..00000000000 --- a/data/Bravura/E26D-accidentalBracketRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E270-accidentalQuarterToneFlatArrowUp.xml b/data/Bravura/E270-accidentalQuarterToneFlatArrowUp.xml deleted file mode 100644 index 6438387ea1f..00000000000 --- a/data/Bravura/E270-accidentalQuarterToneFlatArrowUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E271-accidentalThreeQuarterTonesFlatArrowDown.xml b/data/Bravura/E271-accidentalThreeQuarterTonesFlatArrowDown.xml deleted file mode 100644 index 87e35c8468f..00000000000 --- a/data/Bravura/E271-accidentalThreeQuarterTonesFlatArrowDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E272-accidentalQuarterToneSharpNaturalArrowUp.xml b/data/Bravura/E272-accidentalQuarterToneSharpNaturalArrowUp.xml deleted file mode 100644 index 9698bc84f1e..00000000000 --- a/data/Bravura/E272-accidentalQuarterToneSharpNaturalArrowUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E273-accidentalQuarterToneFlatNaturalArrowDown.xml b/data/Bravura/E273-accidentalQuarterToneFlatNaturalArrowDown.xml deleted file mode 100644 index 7aa6ea4d87d..00000000000 --- a/data/Bravura/E273-accidentalQuarterToneFlatNaturalArrowDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E274-accidentalThreeQuarterTonesSharpArrowUp.xml b/data/Bravura/E274-accidentalThreeQuarterTonesSharpArrowUp.xml deleted file mode 100644 index 659806b4409..00000000000 --- a/data/Bravura/E274-accidentalThreeQuarterTonesSharpArrowUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E275-accidentalQuarterToneSharpArrowDown.xml b/data/Bravura/E275-accidentalQuarterToneSharpArrowDown.xml deleted file mode 100644 index 1878535920e..00000000000 --- a/data/Bravura/E275-accidentalQuarterToneSharpArrowDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E280-accidentalQuarterToneFlatStein.xml b/data/Bravura/E280-accidentalQuarterToneFlatStein.xml deleted file mode 100644 index b0f740ca38e..00000000000 --- a/data/Bravura/E280-accidentalQuarterToneFlatStein.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E281-accidentalThreeQuarterTonesFlatZimmermann.xml b/data/Bravura/E281-accidentalThreeQuarterTonesFlatZimmermann.xml deleted file mode 100644 index f33360cdeaa..00000000000 --- a/data/Bravura/E281-accidentalThreeQuarterTonesFlatZimmermann.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E282-accidentalQuarterToneSharpStein.xml b/data/Bravura/E282-accidentalQuarterToneSharpStein.xml deleted file mode 100644 index c98e97805fa..00000000000 --- a/data/Bravura/E282-accidentalQuarterToneSharpStein.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E283-accidentalThreeQuarterTonesSharpStein.xml b/data/Bravura/E283-accidentalThreeQuarterTonesSharpStein.xml deleted file mode 100644 index 84ad6017781..00000000000 --- a/data/Bravura/E283-accidentalThreeQuarterTonesSharpStein.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E440-accidentalBuyukMucennebFlat.xml b/data/Bravura/E440-accidentalBuyukMucennebFlat.xml deleted file mode 100644 index c6b6c11126d..00000000000 --- a/data/Bravura/E440-accidentalBuyukMucennebFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E441-accidentalKucukMucennebFlat.xml b/data/Bravura/E441-accidentalKucukMucennebFlat.xml deleted file mode 100644 index 528e2ad1a9b..00000000000 --- a/data/Bravura/E441-accidentalKucukMucennebFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E442-accidentalBakiyeFlat.xml b/data/Bravura/E442-accidentalBakiyeFlat.xml deleted file mode 100644 index 77e3ea29ab7..00000000000 --- a/data/Bravura/E442-accidentalBakiyeFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E443-accidentalKomaFlat.xml b/data/Bravura/E443-accidentalKomaFlat.xml deleted file mode 100644 index 6e8011ffce0..00000000000 --- a/data/Bravura/E443-accidentalKomaFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E444-accidentalKomaSharp.xml b/data/Bravura/E444-accidentalKomaSharp.xml deleted file mode 100644 index d17c08d3fbb..00000000000 --- a/data/Bravura/E444-accidentalKomaSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E445-accidentalBakiyeSharp.xml b/data/Bravura/E445-accidentalBakiyeSharp.xml deleted file mode 100644 index 860088a94fd..00000000000 --- a/data/Bravura/E445-accidentalBakiyeSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E446-accidentalKucukMucennebSharp.xml b/data/Bravura/E446-accidentalKucukMucennebSharp.xml deleted file mode 100644 index 0743eeb95f7..00000000000 --- a/data/Bravura/E446-accidentalKucukMucennebSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E447-accidentalBuyukMucennebSharp.xml b/data/Bravura/E447-accidentalBuyukMucennebSharp.xml deleted file mode 100644 index d748bf4cbb5..00000000000 --- a/data/Bravura/E447-accidentalBuyukMucennebSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4A0-articAccentAbove.xml b/data/Bravura/E4A0-articAccentAbove.xml deleted file mode 100644 index 69dcb183cd0..00000000000 --- a/data/Bravura/E4A0-articAccentAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4A1-articAccentBelow.xml b/data/Bravura/E4A1-articAccentBelow.xml deleted file mode 100644 index c75f0de0456..00000000000 --- a/data/Bravura/E4A1-articAccentBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4A2-articStaccatoAbove.xml b/data/Bravura/E4A2-articStaccatoAbove.xml deleted file mode 100644 index 7d109f9a8b5..00000000000 --- a/data/Bravura/E4A2-articStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4A3-articStaccatoBelow.xml b/data/Bravura/E4A3-articStaccatoBelow.xml deleted file mode 100644 index 537aba00dc1..00000000000 --- a/data/Bravura/E4A3-articStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4A4-articTenutoAbove.xml b/data/Bravura/E4A4-articTenutoAbove.xml deleted file mode 100644 index f664beb6cf8..00000000000 --- a/data/Bravura/E4A4-articTenutoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4A5-articTenutoBelow.xml b/data/Bravura/E4A5-articTenutoBelow.xml deleted file mode 100644 index fe7147469c4..00000000000 --- a/data/Bravura/E4A5-articTenutoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4A6-articStaccatissimoAbove.xml b/data/Bravura/E4A6-articStaccatissimoAbove.xml deleted file mode 100644 index 1e3131d0fc7..00000000000 --- a/data/Bravura/E4A6-articStaccatissimoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4A7-articStaccatissimoBelow.xml b/data/Bravura/E4A7-articStaccatissimoBelow.xml deleted file mode 100644 index f8565946ae9..00000000000 --- a/data/Bravura/E4A7-articStaccatissimoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4A8-articStaccatissimoWedgeAbove.xml b/data/Bravura/E4A8-articStaccatissimoWedgeAbove.xml deleted file mode 100644 index 785dd49a688..00000000000 --- a/data/Bravura/E4A8-articStaccatissimoWedgeAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4A9-articStaccatissimoWedgeBelow.xml b/data/Bravura/E4A9-articStaccatissimoWedgeBelow.xml deleted file mode 100644 index 5317c818a26..00000000000 --- a/data/Bravura/E4A9-articStaccatissimoWedgeBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4AA-articStaccatissimoStrokeAbove.xml b/data/Bravura/E4AA-articStaccatissimoStrokeAbove.xml deleted file mode 100644 index a708758ab0a..00000000000 --- a/data/Bravura/E4AA-articStaccatissimoStrokeAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4AB-articStaccatissimoStrokeBelow.xml b/data/Bravura/E4AB-articStaccatissimoStrokeBelow.xml deleted file mode 100644 index e66603f1891..00000000000 --- a/data/Bravura/E4AB-articStaccatissimoStrokeBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4AC-articMarcatoAbove.xml b/data/Bravura/E4AC-articMarcatoAbove.xml deleted file mode 100644 index 1bccb8af598..00000000000 --- a/data/Bravura/E4AC-articMarcatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4AD-articMarcatoBelow.xml b/data/Bravura/E4AD-articMarcatoBelow.xml deleted file mode 100644 index 256559974ed..00000000000 --- a/data/Bravura/E4AD-articMarcatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4AE-articMarcatoStaccatoAbove.xml b/data/Bravura/E4AE-articMarcatoStaccatoAbove.xml deleted file mode 100644 index b36ae79d3a2..00000000000 --- a/data/Bravura/E4AE-articMarcatoStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4AF-articMarcatoStaccatoBelow.xml b/data/Bravura/E4AF-articMarcatoStaccatoBelow.xml deleted file mode 100644 index 427ffd0b3d1..00000000000 --- a/data/Bravura/E4AF-articMarcatoStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4B0-articAccentStaccatoAbove.xml b/data/Bravura/E4B0-articAccentStaccatoAbove.xml deleted file mode 100644 index f0e77ef3a4a..00000000000 --- a/data/Bravura/E4B0-articAccentStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4B1-articAccentStaccatoBelow.xml b/data/Bravura/E4B1-articAccentStaccatoBelow.xml deleted file mode 100644 index 6a17dad45cc..00000000000 --- a/data/Bravura/E4B1-articAccentStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4B2-articTenutoStaccatoAbove.xml b/data/Bravura/E4B2-articTenutoStaccatoAbove.xml deleted file mode 100644 index 399782635ba..00000000000 --- a/data/Bravura/E4B2-articTenutoStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4B3-articTenutoStaccatoBelow.xml b/data/Bravura/E4B3-articTenutoStaccatoBelow.xml deleted file mode 100644 index f3c8a2a6906..00000000000 --- a/data/Bravura/E4B3-articTenutoStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4B4-articTenutoAccentAbove.xml b/data/Bravura/E4B4-articTenutoAccentAbove.xml deleted file mode 100644 index 71b828bf314..00000000000 --- a/data/Bravura/E4B4-articTenutoAccentAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4B5-articTenutoAccentBelow.xml b/data/Bravura/E4B5-articTenutoAccentBelow.xml deleted file mode 100644 index 31e66fdb125..00000000000 --- a/data/Bravura/E4B5-articTenutoAccentBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4B6-articStressAbove.xml b/data/Bravura/E4B6-articStressAbove.xml deleted file mode 100644 index 20311f8b55e..00000000000 --- a/data/Bravura/E4B6-articStressAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4B7-articStressBelow.xml b/data/Bravura/E4B7-articStressBelow.xml deleted file mode 100644 index 8022dc7d01c..00000000000 --- a/data/Bravura/E4B7-articStressBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4B8-articUnstressAbove.xml b/data/Bravura/E4B8-articUnstressAbove.xml deleted file mode 100644 index 17486953899..00000000000 --- a/data/Bravura/E4B8-articUnstressAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4B9-articUnstressBelow.xml b/data/Bravura/E4B9-articUnstressBelow.xml deleted file mode 100644 index ff5143c2c2f..00000000000 --- a/data/Bravura/E4B9-articUnstressBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4BA-articLaissezVibrerAbove.xml b/data/Bravura/E4BA-articLaissezVibrerAbove.xml deleted file mode 100644 index 99ccb98782e..00000000000 --- a/data/Bravura/E4BA-articLaissezVibrerAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4BB-articLaissezVibrerBelow.xml b/data/Bravura/E4BB-articLaissezVibrerBelow.xml deleted file mode 100644 index 7a1cd43167f..00000000000 --- a/data/Bravura/E4BB-articLaissezVibrerBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4BC-articMarcatoTenutoAbove.xml b/data/Bravura/E4BC-articMarcatoTenutoAbove.xml deleted file mode 100644 index 24f5193f74e..00000000000 --- a/data/Bravura/E4BC-articMarcatoTenutoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4BD-articMarcatoTenutoBelow.xml b/data/Bravura/E4BD-articMarcatoTenutoBelow.xml deleted file mode 100644 index ca753958e92..00000000000 --- a/data/Bravura/E4BD-articMarcatoTenutoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4C0-fermataAbove.xml b/data/Bravura/E4C0-fermataAbove.xml deleted file mode 100644 index 887e71c1388..00000000000 --- a/data/Bravura/E4C0-fermataAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4C1-fermataBelow.xml b/data/Bravura/E4C1-fermataBelow.xml deleted file mode 100644 index 8503168a015..00000000000 --- a/data/Bravura/E4C1-fermataBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4C2-fermataVeryShortAbove.xml b/data/Bravura/E4C2-fermataVeryShortAbove.xml deleted file mode 100644 index ff95516fb87..00000000000 --- a/data/Bravura/E4C2-fermataVeryShortAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4C3-fermataVeryShortBelow.xml b/data/Bravura/E4C3-fermataVeryShortBelow.xml deleted file mode 100644 index c97f5e2eb34..00000000000 --- a/data/Bravura/E4C3-fermataVeryShortBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4C4-fermataShortAbove.xml b/data/Bravura/E4C4-fermataShortAbove.xml deleted file mode 100644 index f9c9e86ef29..00000000000 --- a/data/Bravura/E4C4-fermataShortAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4C5-fermataShortBelow.xml b/data/Bravura/E4C5-fermataShortBelow.xml deleted file mode 100644 index c2f9efc9676..00000000000 --- a/data/Bravura/E4C5-fermataShortBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4C6-fermataLongAbove.xml b/data/Bravura/E4C6-fermataLongAbove.xml deleted file mode 100644 index 32d40d209db..00000000000 --- a/data/Bravura/E4C6-fermataLongAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4C7-fermataLongBelow.xml b/data/Bravura/E4C7-fermataLongBelow.xml deleted file mode 100644 index 8da986c3763..00000000000 --- a/data/Bravura/E4C7-fermataLongBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4C8-fermataVeryLongAbove.xml b/data/Bravura/E4C8-fermataVeryLongAbove.xml deleted file mode 100644 index 74cd2194008..00000000000 --- a/data/Bravura/E4C8-fermataVeryLongAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4C9-fermataVeryLongBelow.xml b/data/Bravura/E4C9-fermataVeryLongBelow.xml deleted file mode 100644 index 8ffcb143815..00000000000 --- a/data/Bravura/E4C9-fermataVeryLongBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4CE-breathMarkComma.xml b/data/Bravura/E4CE-breathMarkComma.xml deleted file mode 100644 index 0246c08fd19..00000000000 --- a/data/Bravura/E4CE-breathMarkComma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4E0-restMaxima.xml b/data/Bravura/E4E0-restMaxima.xml deleted file mode 100644 index 954651f5ab8..00000000000 --- a/data/Bravura/E4E0-restMaxima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4E1-restLonga.xml b/data/Bravura/E4E1-restLonga.xml deleted file mode 100644 index 489d9aadfa5..00000000000 --- a/data/Bravura/E4E1-restLonga.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4E2-restDoubleWhole.xml b/data/Bravura/E4E2-restDoubleWhole.xml deleted file mode 100644 index e682ef0923c..00000000000 --- a/data/Bravura/E4E2-restDoubleWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4E3-restWhole.xml b/data/Bravura/E4E3-restWhole.xml deleted file mode 100644 index 5ef49f33be5..00000000000 --- a/data/Bravura/E4E3-restWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4E4-restHalf.xml b/data/Bravura/E4E4-restHalf.xml deleted file mode 100644 index 908fe6586a3..00000000000 --- a/data/Bravura/E4E4-restHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4E5-restQuarter.xml b/data/Bravura/E4E5-restQuarter.xml deleted file mode 100644 index 04f1d1238c4..00000000000 --- a/data/Bravura/E4E5-restQuarter.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4E6-rest8th.xml b/data/Bravura/E4E6-rest8th.xml deleted file mode 100644 index b5622052823..00000000000 --- a/data/Bravura/E4E6-rest8th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4E7-rest16th.xml b/data/Bravura/E4E7-rest16th.xml deleted file mode 100644 index cd50c5db1d6..00000000000 --- a/data/Bravura/E4E7-rest16th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4E8-rest32nd.xml b/data/Bravura/E4E8-rest32nd.xml deleted file mode 100644 index be9a83d813d..00000000000 --- a/data/Bravura/E4E8-rest32nd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4E9-rest64th.xml b/data/Bravura/E4E9-rest64th.xml deleted file mode 100644 index 04e2162cfc7..00000000000 --- a/data/Bravura/E4E9-rest64th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4EA-rest128th.xml b/data/Bravura/E4EA-rest128th.xml deleted file mode 100644 index 63a2df0be58..00000000000 --- a/data/Bravura/E4EA-rest128th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4EB-rest256th.xml b/data/Bravura/E4EB-rest256th.xml deleted file mode 100644 index bc1010eb49d..00000000000 --- a/data/Bravura/E4EB-rest256th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4EC-rest512th.xml b/data/Bravura/E4EC-rest512th.xml deleted file mode 100644 index 6b9b3ac9d1c..00000000000 --- a/data/Bravura/E4EC-rest512th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4ED-rest1024th.xml b/data/Bravura/E4ED-rest1024th.xml deleted file mode 100644 index 572a5d4e7f9..00000000000 --- a/data/Bravura/E4ED-rest1024th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4F2-restQuarterOld.xml b/data/Bravura/E4F2-restQuarterOld.xml deleted file mode 100644 index 20e70b0aaf3..00000000000 --- a/data/Bravura/E4F2-restQuarterOld.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E4F6-restQuarterZ.xml b/data/Bravura/E4F6-restQuarterZ.xml deleted file mode 100644 index b9e07171a3c..00000000000 --- a/data/Bravura/E4F6-restQuarterZ.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E500-repeat1Bar.xml b/data/Bravura/E500-repeat1Bar.xml deleted file mode 100644 index 1ae0e5e0040..00000000000 --- a/data/Bravura/E500-repeat1Bar.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E501-repeat2Bars.xml b/data/Bravura/E501-repeat2Bars.xml deleted file mode 100644 index 38d4000c8ea..00000000000 --- a/data/Bravura/E501-repeat2Bars.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E502-repeat4Bars.xml b/data/Bravura/E502-repeat4Bars.xml deleted file mode 100644 index 5a741a57049..00000000000 --- a/data/Bravura/E502-repeat4Bars.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E503-repeatBarUpperDot.xml b/data/Bravura/E503-repeatBarUpperDot.xml deleted file mode 100644 index 6142d1673d2..00000000000 --- a/data/Bravura/E503-repeatBarUpperDot.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E504-repeatBarSlash.xml b/data/Bravura/E504-repeatBarSlash.xml deleted file mode 100644 index 9158d3af0d6..00000000000 --- a/data/Bravura/E504-repeatBarSlash.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E505-repeatBarLowerDot.xml b/data/Bravura/E505-repeatBarLowerDot.xml deleted file mode 100644 index d7935b98fe8..00000000000 --- a/data/Bravura/E505-repeatBarLowerDot.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E510-ottava.xml b/data/Bravura/E510-ottava.xml deleted file mode 100644 index ffba9fabca7..00000000000 --- a/data/Bravura/E510-ottava.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E511-ottavaAlta.xml b/data/Bravura/E511-ottavaAlta.xml deleted file mode 100644 index 6e58362829a..00000000000 --- a/data/Bravura/E511-ottavaAlta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E512-ottavaBassa.xml b/data/Bravura/E512-ottavaBassa.xml deleted file mode 100644 index e51a616a297..00000000000 --- a/data/Bravura/E512-ottavaBassa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E513-ottavaBassaBa.xml b/data/Bravura/E513-ottavaBassaBa.xml deleted file mode 100644 index 891082dd249..00000000000 --- a/data/Bravura/E513-ottavaBassaBa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E514-quindicesima.xml b/data/Bravura/E514-quindicesima.xml deleted file mode 100644 index aea1a12a52c..00000000000 --- a/data/Bravura/E514-quindicesima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E515-quindicesimaAlta.xml b/data/Bravura/E515-quindicesimaAlta.xml deleted file mode 100644 index 66ac15b5571..00000000000 --- a/data/Bravura/E515-quindicesimaAlta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E516-quindicesimaBassa.xml b/data/Bravura/E516-quindicesimaBassa.xml deleted file mode 100644 index ddad82c5942..00000000000 --- a/data/Bravura/E516-quindicesimaBassa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E517-ventiduesima.xml b/data/Bravura/E517-ventiduesima.xml deleted file mode 100644 index 22213ef5469..00000000000 --- a/data/Bravura/E517-ventiduesima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E518-ventiduesimaAlta.xml b/data/Bravura/E518-ventiduesimaAlta.xml deleted file mode 100644 index 17e3ba2bc56..00000000000 --- a/data/Bravura/E518-ventiduesimaAlta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E519-ventiduesimaBassa.xml b/data/Bravura/E519-ventiduesimaBassa.xml deleted file mode 100644 index 57832c3fdad..00000000000 --- a/data/Bravura/E519-ventiduesimaBassa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E51A-octaveParensLeft.xml b/data/Bravura/E51A-octaveParensLeft.xml deleted file mode 100644 index 42eec0fc78e..00000000000 --- a/data/Bravura/E51A-octaveParensLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E51B-octaveParensRight.xml b/data/Bravura/E51B-octaveParensRight.xml deleted file mode 100644 index 47c7df910ea..00000000000 --- a/data/Bravura/E51B-octaveParensRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E51C-ottavaBassaVb.xml b/data/Bravura/E51C-ottavaBassaVb.xml deleted file mode 100644 index 000f876304b..00000000000 --- a/data/Bravura/E51C-ottavaBassaVb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E51D-quindicesimaBassaMb.xml b/data/Bravura/E51D-quindicesimaBassaMb.xml deleted file mode 100644 index 0ef7e2d4434..00000000000 --- a/data/Bravura/E51D-quindicesimaBassaMb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E51E-ventiduesimaBassaMb.xml b/data/Bravura/E51E-ventiduesimaBassaMb.xml deleted file mode 100644 index 2e752adaf37..00000000000 --- a/data/Bravura/E51E-ventiduesimaBassaMb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E520-dynamicPiano.xml b/data/Bravura/E520-dynamicPiano.xml deleted file mode 100644 index 77e0893f308..00000000000 --- a/data/Bravura/E520-dynamicPiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E521-dynamicMezzo.xml b/data/Bravura/E521-dynamicMezzo.xml deleted file mode 100644 index 4f43d49f9cb..00000000000 --- a/data/Bravura/E521-dynamicMezzo.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E522-dynamicForte.xml b/data/Bravura/E522-dynamicForte.xml deleted file mode 100644 index 1045c221096..00000000000 --- a/data/Bravura/E522-dynamicForte.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E523-dynamicRinforzando.xml b/data/Bravura/E523-dynamicRinforzando.xml deleted file mode 100644 index 3eb35c50987..00000000000 --- a/data/Bravura/E523-dynamicRinforzando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E524-dynamicSforzando.xml b/data/Bravura/E524-dynamicSforzando.xml deleted file mode 100644 index 6b2f34dd583..00000000000 --- a/data/Bravura/E524-dynamicSforzando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E525-dynamicZ.xml b/data/Bravura/E525-dynamicZ.xml deleted file mode 100644 index 2b91f98aad3..00000000000 --- a/data/Bravura/E525-dynamicZ.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E526-dynamicNiente.xml b/data/Bravura/E526-dynamicNiente.xml deleted file mode 100644 index 97681155dec..00000000000 --- a/data/Bravura/E526-dynamicNiente.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E527-dynamicPPPPPP.xml b/data/Bravura/E527-dynamicPPPPPP.xml deleted file mode 100644 index 89dcaf02197..00000000000 --- a/data/Bravura/E527-dynamicPPPPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E528-dynamicPPPPP.xml b/data/Bravura/E528-dynamicPPPPP.xml deleted file mode 100644 index a9486ab443a..00000000000 --- a/data/Bravura/E528-dynamicPPPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E529-dynamicPPPP.xml b/data/Bravura/E529-dynamicPPPP.xml deleted file mode 100644 index d3cdc43721e..00000000000 --- a/data/Bravura/E529-dynamicPPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E52A-dynamicPPP.xml b/data/Bravura/E52A-dynamicPPP.xml deleted file mode 100644 index 961198132f2..00000000000 --- a/data/Bravura/E52A-dynamicPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E52B-dynamicPP.xml b/data/Bravura/E52B-dynamicPP.xml deleted file mode 100644 index 10f7b1f7a5d..00000000000 --- a/data/Bravura/E52B-dynamicPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E52C-dynamicMP.xml b/data/Bravura/E52C-dynamicMP.xml deleted file mode 100644 index 5ac29c602bf..00000000000 --- a/data/Bravura/E52C-dynamicMP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E52D-dynamicMF.xml b/data/Bravura/E52D-dynamicMF.xml deleted file mode 100644 index a19a838cd7a..00000000000 --- a/data/Bravura/E52D-dynamicMF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E52E-dynamicPF.xml b/data/Bravura/E52E-dynamicPF.xml deleted file mode 100644 index 24987d5cf1f..00000000000 --- a/data/Bravura/E52E-dynamicPF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E52F-dynamicFF.xml b/data/Bravura/E52F-dynamicFF.xml deleted file mode 100644 index 2abab9cdec5..00000000000 --- a/data/Bravura/E52F-dynamicFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E530-dynamicFFF.xml b/data/Bravura/E530-dynamicFFF.xml deleted file mode 100644 index a35d1201705..00000000000 --- a/data/Bravura/E530-dynamicFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E531-dynamicFFFF.xml b/data/Bravura/E531-dynamicFFFF.xml deleted file mode 100644 index 7d0476081f6..00000000000 --- a/data/Bravura/E531-dynamicFFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E532-dynamicFFFFF.xml b/data/Bravura/E532-dynamicFFFFF.xml deleted file mode 100644 index 4181676b123..00000000000 --- a/data/Bravura/E532-dynamicFFFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E533-dynamicFFFFFF.xml b/data/Bravura/E533-dynamicFFFFFF.xml deleted file mode 100644 index 43c131dcc41..00000000000 --- a/data/Bravura/E533-dynamicFFFFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E534-dynamicFortePiano.xml b/data/Bravura/E534-dynamicFortePiano.xml deleted file mode 100644 index 8c69668cccb..00000000000 --- a/data/Bravura/E534-dynamicFortePiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E535-dynamicForzando.xml b/data/Bravura/E535-dynamicForzando.xml deleted file mode 100644 index 2a7982a57fb..00000000000 --- a/data/Bravura/E535-dynamicForzando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E536-dynamicSforzando1.xml b/data/Bravura/E536-dynamicSforzando1.xml deleted file mode 100644 index 06b1ee7ed38..00000000000 --- a/data/Bravura/E536-dynamicSforzando1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E537-dynamicSforzandoPiano.xml b/data/Bravura/E537-dynamicSforzandoPiano.xml deleted file mode 100644 index 8abd2dcc2fb..00000000000 --- a/data/Bravura/E537-dynamicSforzandoPiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E538-dynamicSforzandoPianissimo.xml b/data/Bravura/E538-dynamicSforzandoPianissimo.xml deleted file mode 100644 index 2a21246cedb..00000000000 --- a/data/Bravura/E538-dynamicSforzandoPianissimo.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E539-dynamicSforzato.xml b/data/Bravura/E539-dynamicSforzato.xml deleted file mode 100644 index 388a0760d76..00000000000 --- a/data/Bravura/E539-dynamicSforzato.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E53A-dynamicSforzatoPiano.xml b/data/Bravura/E53A-dynamicSforzatoPiano.xml deleted file mode 100644 index 4048cd8b0e1..00000000000 --- a/data/Bravura/E53A-dynamicSforzatoPiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E53B-dynamicSforzatoFF.xml b/data/Bravura/E53B-dynamicSforzatoFF.xml deleted file mode 100644 index 31c249b417c..00000000000 --- a/data/Bravura/E53B-dynamicSforzatoFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E53C-dynamicRinforzando1.xml b/data/Bravura/E53C-dynamicRinforzando1.xml deleted file mode 100644 index 4a326fa4811..00000000000 --- a/data/Bravura/E53C-dynamicRinforzando1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E53D-dynamicRinforzando2.xml b/data/Bravura/E53D-dynamicRinforzando2.xml deleted file mode 100644 index 77f62cdb60a..00000000000 --- a/data/Bravura/E53D-dynamicRinforzando2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E566-ornamentTrill.xml b/data/Bravura/E566-ornamentTrill.xml deleted file mode 100644 index 4273068d3d8..00000000000 --- a/data/Bravura/E566-ornamentTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E567-ornamentTurn.xml b/data/Bravura/E567-ornamentTurn.xml deleted file mode 100644 index 358a40a3b49..00000000000 --- a/data/Bravura/E567-ornamentTurn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E568-ornamentTurnInverted.xml b/data/Bravura/E568-ornamentTurnInverted.xml deleted file mode 100644 index 2423871589f..00000000000 --- a/data/Bravura/E568-ornamentTurnInverted.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E569-ornamentTurnSlash.xml b/data/Bravura/E569-ornamentTurnSlash.xml deleted file mode 100644 index ada260058dd..00000000000 --- a/data/Bravura/E569-ornamentTurnSlash.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E56A-ornamentTurnUp.xml b/data/Bravura/E56A-ornamentTurnUp.xml deleted file mode 100644 index d421ab83d4e..00000000000 --- a/data/Bravura/E56A-ornamentTurnUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E56B-ornamentTurnUpS.xml b/data/Bravura/E56B-ornamentTurnUpS.xml deleted file mode 100644 index af2eeef183f..00000000000 --- a/data/Bravura/E56B-ornamentTurnUpS.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E56C-ornamentShortTrill.xml b/data/Bravura/E56C-ornamentShortTrill.xml deleted file mode 100644 index ffde74903a6..00000000000 --- a/data/Bravura/E56C-ornamentShortTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E56D-ornamentMordent.xml b/data/Bravura/E56D-ornamentMordent.xml deleted file mode 100644 index fcbe4509864..00000000000 --- a/data/Bravura/E56D-ornamentMordent.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E56E-ornamentTremblement.xml b/data/Bravura/E56E-ornamentTremblement.xml deleted file mode 100644 index abe74888361..00000000000 --- a/data/Bravura/E56E-ornamentTremblement.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E56F-ornamentHaydn.xml b/data/Bravura/E56F-ornamentHaydn.xml deleted file mode 100644 index 2e092ac4d88..00000000000 --- a/data/Bravura/E56F-ornamentHaydn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E583-ornamentVerticalLine.xml b/data/Bravura/E583-ornamentVerticalLine.xml deleted file mode 100644 index f0370d67fb3..00000000000 --- a/data/Bravura/E583-ornamentVerticalLine.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E587-ornamentSchleifer.xml b/data/Bravura/E587-ornamentSchleifer.xml deleted file mode 100644 index 92e8508d917..00000000000 --- a/data/Bravura/E587-ornamentSchleifer.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E59D-ornamentZigZagLineNoRightEnd.xml b/data/Bravura/E59D-ornamentZigZagLineNoRightEnd.xml deleted file mode 100644 index 02fa87ea4df..00000000000 --- a/data/Bravura/E59D-ornamentZigZagLineNoRightEnd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E59E-ornamentZigZagLineWithRightEnd.xml b/data/Bravura/E59E-ornamentZigZagLineWithRightEnd.xml deleted file mode 100644 index 0d3bedcd1ae..00000000000 --- a/data/Bravura/E59E-ornamentZigZagLineWithRightEnd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5B0-ornamentPrecompSlide.xml b/data/Bravura/E5B0-ornamentPrecompSlide.xml deleted file mode 100644 index 906b4f4629e..00000000000 --- a/data/Bravura/E5B0-ornamentPrecompSlide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5B1-ornamentPrecompDescendingSlide.xml b/data/Bravura/E5B1-ornamentPrecompDescendingSlide.xml deleted file mode 100644 index a07ec907723..00000000000 --- a/data/Bravura/E5B1-ornamentPrecompDescendingSlide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5B2-ornamentPrecompAppoggTrill.xml b/data/Bravura/E5B2-ornamentPrecompAppoggTrill.xml deleted file mode 100644 index 629ea0e20f6..00000000000 --- a/data/Bravura/E5B2-ornamentPrecompAppoggTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5B3-ornamentPrecompAppoggTrillSuffix.xml b/data/Bravura/E5B3-ornamentPrecompAppoggTrillSuffix.xml deleted file mode 100644 index 0c75924fa1f..00000000000 --- a/data/Bravura/E5B3-ornamentPrecompAppoggTrillSuffix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5B4-ornamentPrecompTurnTrillDAnglebert.xml b/data/Bravura/E5B4-ornamentPrecompTurnTrillDAnglebert.xml deleted file mode 100644 index 77e58232029..00000000000 --- a/data/Bravura/E5B4-ornamentPrecompTurnTrillDAnglebert.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5B5-ornamentPrecompSlideTrillDAnglebert.xml b/data/Bravura/E5B5-ornamentPrecompSlideTrillDAnglebert.xml deleted file mode 100644 index 6797d1da571..00000000000 --- a/data/Bravura/E5B5-ornamentPrecompSlideTrillDAnglebert.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5B6-ornamentPrecompSlideTrillMarpurg.xml b/data/Bravura/E5B6-ornamentPrecompSlideTrillMarpurg.xml deleted file mode 100644 index 811ae026bd0..00000000000 --- a/data/Bravura/E5B6-ornamentPrecompSlideTrillMarpurg.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5B7-ornamentPrecompTurnTrillBach.xml b/data/Bravura/E5B7-ornamentPrecompTurnTrillBach.xml deleted file mode 100644 index 3496c17ce74..00000000000 --- a/data/Bravura/E5B7-ornamentPrecompTurnTrillBach.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5B8-ornamentPrecompSlideTrillBach.xml b/data/Bravura/E5B8-ornamentPrecompSlideTrillBach.xml deleted file mode 100644 index 78f8fdfc2b7..00000000000 --- a/data/Bravura/E5B8-ornamentPrecompSlideTrillBach.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5B9-ornamentPrecompSlideTrillMuffat.xml b/data/Bravura/E5B9-ornamentPrecompSlideTrillMuffat.xml deleted file mode 100644 index 42da135721d..00000000000 --- a/data/Bravura/E5B9-ornamentPrecompSlideTrillMuffat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5BA-ornamentPrecompSlideTrillSuffixMuffat.xml b/data/Bravura/E5BA-ornamentPrecompSlideTrillSuffixMuffat.xml deleted file mode 100644 index e1dd22353b1..00000000000 --- a/data/Bravura/E5BA-ornamentPrecompSlideTrillSuffixMuffat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5BB-ornamentPrecompTrillSuffixDandrieu.xml b/data/Bravura/E5BB-ornamentPrecompTrillSuffixDandrieu.xml deleted file mode 100644 index 3c941f0ba2b..00000000000 --- a/data/Bravura/E5BB-ornamentPrecompTrillSuffixDandrieu.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5BC-ornamentPrecompPortDeVoixMordent.xml b/data/Bravura/E5BC-ornamentPrecompPortDeVoixMordent.xml deleted file mode 100644 index 1e9854f9366..00000000000 --- a/data/Bravura/E5BC-ornamentPrecompPortDeVoixMordent.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5BD-ornamentPrecompTrillWithMordent.xml b/data/Bravura/E5BD-ornamentPrecompTrillWithMordent.xml deleted file mode 100644 index 27f15a1efbd..00000000000 --- a/data/Bravura/E5BD-ornamentPrecompTrillWithMordent.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5BE-ornamentPrecompCadence.xml b/data/Bravura/E5BE-ornamentPrecompCadence.xml deleted file mode 100644 index caca381e024..00000000000 --- a/data/Bravura/E5BE-ornamentPrecompCadence.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5BF-ornamentPrecompCadenceWithTurn.xml b/data/Bravura/E5BF-ornamentPrecompCadenceWithTurn.xml deleted file mode 100644 index 230b9d157ef..00000000000 --- a/data/Bravura/E5BF-ornamentPrecompCadenceWithTurn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml b/data/Bravura/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml deleted file mode 100644 index 8a64ec92b31..00000000000 --- a/data/Bravura/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5C1-ornamentPrecompCadenceUpperPrefix.xml b/data/Bravura/E5C1-ornamentPrecompCadenceUpperPrefix.xml deleted file mode 100644 index cc78e1c7348..00000000000 --- a/data/Bravura/E5C1-ornamentPrecompCadenceUpperPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5C2-ornamentPrecompCadenceUpperPrefixTurn.xml b/data/Bravura/E5C2-ornamentPrecompCadenceUpperPrefixTurn.xml deleted file mode 100644 index 8e052ef42a9..00000000000 --- a/data/Bravura/E5C2-ornamentPrecompCadenceUpperPrefixTurn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml b/data/Bravura/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml deleted file mode 100644 index 7ac64bc2423..00000000000 --- a/data/Bravura/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5C4-ornamentPrecompDoubleCadenceUpperPrefixTurn.xml b/data/Bravura/E5C4-ornamentPrecompDoubleCadenceUpperPrefixTurn.xml deleted file mode 100644 index d3128a1dad8..00000000000 --- a/data/Bravura/E5C4-ornamentPrecompDoubleCadenceUpperPrefixTurn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5C5-ornamentPrecompMordentRelease.xml b/data/Bravura/E5C5-ornamentPrecompMordentRelease.xml deleted file mode 100644 index 9d28b05d48b..00000000000 --- a/data/Bravura/E5C5-ornamentPrecompMordentRelease.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5C6-ornamentPrecompMordentUpperPrefix.xml b/data/Bravura/E5C6-ornamentPrecompMordentUpperPrefix.xml deleted file mode 100644 index 6563387704c..00000000000 --- a/data/Bravura/E5C6-ornamentPrecompMordentUpperPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml b/data/Bravura/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml deleted file mode 100644 index 5dfbe9b2ce4..00000000000 --- a/data/Bravura/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5C8-ornamentPrecompTrillLowerSuffix.xml b/data/Bravura/E5C8-ornamentPrecompTrillLowerSuffix.xml deleted file mode 100644 index 93dc1c4ce97..00000000000 --- a/data/Bravura/E5C8-ornamentPrecompTrillLowerSuffix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5E5-brassMuteClosed.xml b/data/Bravura/E5E5-brassMuteClosed.xml deleted file mode 100644 index 81647d32990..00000000000 --- a/data/Bravura/E5E5-brassMuteClosed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5E6-brassMuteHalfClosed.xml b/data/Bravura/E5E6-brassMuteHalfClosed.xml deleted file mode 100644 index 1fbbc0421c9..00000000000 --- a/data/Bravura/E5E6-brassMuteHalfClosed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E5E7-brassMuteOpen.xml b/data/Bravura/E5E7-brassMuteOpen.xml deleted file mode 100644 index 87739c7f744..00000000000 --- a/data/Bravura/E5E7-brassMuteOpen.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E610-stringsDownBow.xml b/data/Bravura/E610-stringsDownBow.xml deleted file mode 100644 index 803365cda34..00000000000 --- a/data/Bravura/E610-stringsDownBow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E611-stringsDownBowTurned.xml b/data/Bravura/E611-stringsDownBowTurned.xml deleted file mode 100644 index e43bfb41f43..00000000000 --- a/data/Bravura/E611-stringsDownBowTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E612-stringsUpBow.xml b/data/Bravura/E612-stringsUpBow.xml deleted file mode 100644 index f7a6ba3e50a..00000000000 --- a/data/Bravura/E612-stringsUpBow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E613-stringsUpBowTurned.xml b/data/Bravura/E613-stringsUpBowTurned.xml deleted file mode 100644 index 53cdeff35e6..00000000000 --- a/data/Bravura/E613-stringsUpBowTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E614-stringsHarmonic.xml b/data/Bravura/E614-stringsHarmonic.xml deleted file mode 100644 index 94d81d52e2f..00000000000 --- a/data/Bravura/E614-stringsHarmonic.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E630-pluckedSnapPizzicatoBelow.xml b/data/Bravura/E630-pluckedSnapPizzicatoBelow.xml deleted file mode 100644 index 5f751f74b9d..00000000000 --- a/data/Bravura/E630-pluckedSnapPizzicatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E631-pluckedSnapPizzicatoAbove.xml b/data/Bravura/E631-pluckedSnapPizzicatoAbove.xml deleted file mode 100644 index a85ce874a1b..00000000000 --- a/data/Bravura/E631-pluckedSnapPizzicatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E632-pluckedBuzzPizzicato.xml b/data/Bravura/E632-pluckedBuzzPizzicato.xml deleted file mode 100644 index 964926aa03c..00000000000 --- a/data/Bravura/E632-pluckedBuzzPizzicato.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E633-pluckedLeftHandPizzicato.xml b/data/Bravura/E633-pluckedLeftHandPizzicato.xml deleted file mode 100644 index 69d2ea3a4bf..00000000000 --- a/data/Bravura/E633-pluckedLeftHandPizzicato.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E638-pluckedDamp.xml b/data/Bravura/E638-pluckedDamp.xml deleted file mode 100644 index b3cf4addec7..00000000000 --- a/data/Bravura/E638-pluckedDamp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E645-vocalSprechgesang.xml b/data/Bravura/E645-vocalSprechgesang.xml deleted file mode 100644 index 492da71e11c..00000000000 --- a/data/Bravura/E645-vocalSprechgesang.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E650-keyboardPedalPed.xml b/data/Bravura/E650-keyboardPedalPed.xml deleted file mode 100644 index e89cde722aa..00000000000 --- a/data/Bravura/E650-keyboardPedalPed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E651-keyboardPedalP.xml b/data/Bravura/E651-keyboardPedalP.xml deleted file mode 100644 index 56dd34a4fae..00000000000 --- a/data/Bravura/E651-keyboardPedalP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E655-keyboardPedalUp.xml b/data/Bravura/E655-keyboardPedalUp.xml deleted file mode 100644 index 8412ed96093..00000000000 --- a/data/Bravura/E655-keyboardPedalUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E659-keyboardPedalSost.xml b/data/Bravura/E659-keyboardPedalSost.xml deleted file mode 100644 index c076f4ba541..00000000000 --- a/data/Bravura/E659-keyboardPedalSost.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E65A-keyboardPedalS.xml b/data/Bravura/E65A-keyboardPedalS.xml deleted file mode 100644 index be3d70f7df1..00000000000 --- a/data/Bravura/E65A-keyboardPedalS.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E880-tuplet0.xml b/data/Bravura/E880-tuplet0.xml deleted file mode 100644 index 13c8364cb61..00000000000 --- a/data/Bravura/E880-tuplet0.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E881-tuplet1.xml b/data/Bravura/E881-tuplet1.xml deleted file mode 100644 index 36fca354a40..00000000000 --- a/data/Bravura/E881-tuplet1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E882-tuplet2.xml b/data/Bravura/E882-tuplet2.xml deleted file mode 100644 index b2625592bc6..00000000000 --- a/data/Bravura/E882-tuplet2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E883-tuplet3.xml b/data/Bravura/E883-tuplet3.xml deleted file mode 100644 index 0d44eb6d795..00000000000 --- a/data/Bravura/E883-tuplet3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E884-tuplet4.xml b/data/Bravura/E884-tuplet4.xml deleted file mode 100644 index 324f0476a2c..00000000000 --- a/data/Bravura/E884-tuplet4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E885-tuplet5.xml b/data/Bravura/E885-tuplet5.xml deleted file mode 100644 index 6aa33760273..00000000000 --- a/data/Bravura/E885-tuplet5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E886-tuplet6.xml b/data/Bravura/E886-tuplet6.xml deleted file mode 100644 index f9fa797ef1f..00000000000 --- a/data/Bravura/E886-tuplet6.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E887-tuplet7.xml b/data/Bravura/E887-tuplet7.xml deleted file mode 100644 index 55759e53033..00000000000 --- a/data/Bravura/E887-tuplet7.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E888-tuplet8.xml b/data/Bravura/E888-tuplet8.xml deleted file mode 100644 index 11385bab75f..00000000000 --- a/data/Bravura/E888-tuplet8.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E889-tuplet9.xml b/data/Bravura/E889-tuplet9.xml deleted file mode 100644 index 9ecd012c9c1..00000000000 --- a/data/Bravura/E889-tuplet9.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E88A-tupletColon.xml b/data/Bravura/E88A-tupletColon.xml deleted file mode 100644 index c9d4858f898..00000000000 --- a/data/Bravura/E88A-tupletColon.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E901-mensuralGclefPetrucci.xml b/data/Bravura/E901-mensuralGclefPetrucci.xml deleted file mode 100644 index 9c5c457d33c..00000000000 --- a/data/Bravura/E901-mensuralGclefPetrucci.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E902-chantFclef.xml b/data/Bravura/E902-chantFclef.xml deleted file mode 100644 index 42595ae579f..00000000000 --- a/data/Bravura/E902-chantFclef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E904-mensuralFclefPetrucci.xml b/data/Bravura/E904-mensuralFclefPetrucci.xml deleted file mode 100644 index 8f0118969c4..00000000000 --- a/data/Bravura/E904-mensuralFclefPetrucci.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E906-chantCclef.xml b/data/Bravura/E906-chantCclef.xml deleted file mode 100644 index 5803bba2324..00000000000 --- a/data/Bravura/E906-chantCclef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E907-mensuralCclefPetrucciPosLowest.xml b/data/Bravura/E907-mensuralCclefPetrucciPosLowest.xml deleted file mode 100644 index 35ba3368a75..00000000000 --- a/data/Bravura/E907-mensuralCclefPetrucciPosLowest.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E908-mensuralCclefPetrucciPosLow.xml b/data/Bravura/E908-mensuralCclefPetrucciPosLow.xml deleted file mode 100644 index 8cbc78dd7ed..00000000000 --- a/data/Bravura/E908-mensuralCclefPetrucciPosLow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E909-mensuralCclefPetrucciPosMiddle.xml b/data/Bravura/E909-mensuralCclefPetrucciPosMiddle.xml deleted file mode 100644 index 6cbb14b530c..00000000000 --- a/data/Bravura/E909-mensuralCclefPetrucciPosMiddle.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E90A-mensuralCclefPetrucciPosHigh.xml b/data/Bravura/E90A-mensuralCclefPetrucciPosHigh.xml deleted file mode 100644 index 863c0b64ecb..00000000000 --- a/data/Bravura/E90A-mensuralCclefPetrucciPosHigh.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E90B-mensuralCclefPetrucciPosHighest.xml b/data/Bravura/E90B-mensuralCclefPetrucciPosHighest.xml deleted file mode 100644 index 84bd301c826..00000000000 --- a/data/Bravura/E90B-mensuralCclefPetrucciPosHighest.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E910-mensuralProlation1.xml b/data/Bravura/E910-mensuralProlation1.xml deleted file mode 100644 index b70ea906c21..00000000000 --- a/data/Bravura/E910-mensuralProlation1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E911-mensuralProlation2.xml b/data/Bravura/E911-mensuralProlation2.xml deleted file mode 100644 index 64f8f93e448..00000000000 --- a/data/Bravura/E911-mensuralProlation2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E912-mensuralProlation3.xml b/data/Bravura/E912-mensuralProlation3.xml deleted file mode 100644 index 7bc67e8aea5..00000000000 --- a/data/Bravura/E912-mensuralProlation3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E913-mensuralProlation4.xml b/data/Bravura/E913-mensuralProlation4.xml deleted file mode 100644 index 3b1c3ebe663..00000000000 --- a/data/Bravura/E913-mensuralProlation4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E914-mensuralProlation5.xml b/data/Bravura/E914-mensuralProlation5.xml deleted file mode 100644 index c63f501bd54..00000000000 --- a/data/Bravura/E914-mensuralProlation5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E915-mensuralProlation6.xml b/data/Bravura/E915-mensuralProlation6.xml deleted file mode 100644 index 21495dc2e5e..00000000000 --- a/data/Bravura/E915-mensuralProlation6.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E916-mensuralProlation7.xml b/data/Bravura/E916-mensuralProlation7.xml deleted file mode 100644 index 39af68686ce..00000000000 --- a/data/Bravura/E916-mensuralProlation7.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E917-mensuralProlation8.xml b/data/Bravura/E917-mensuralProlation8.xml deleted file mode 100644 index fd81b4ea85b..00000000000 --- a/data/Bravura/E917-mensuralProlation8.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E918-mensuralProlation9.xml b/data/Bravura/E918-mensuralProlation9.xml deleted file mode 100644 index c8e3828b5a0..00000000000 --- a/data/Bravura/E918-mensuralProlation9.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E919-mensuralProlation10.xml b/data/Bravura/E919-mensuralProlation10.xml deleted file mode 100644 index 0f099556917..00000000000 --- a/data/Bravura/E919-mensuralProlation10.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E91A-mensuralProlation11.xml b/data/Bravura/E91A-mensuralProlation11.xml deleted file mode 100644 index ac3395d6220..00000000000 --- a/data/Bravura/E91A-mensuralProlation11.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E91B-mensuralProportionTempusPerfectum.xml b/data/Bravura/E91B-mensuralProportionTempusPerfectum.xml deleted file mode 100644 index 6bd4925a16d..00000000000 --- a/data/Bravura/E91B-mensuralProportionTempusPerfectum.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E91C-mensuralProportionProportioDupla1.xml b/data/Bravura/E91C-mensuralProportionProportioDupla1.xml deleted file mode 100644 index 31368c1098c..00000000000 --- a/data/Bravura/E91C-mensuralProportionProportioDupla1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E91D-mensuralProportionProportioDupla2.xml b/data/Bravura/E91D-mensuralProportionProportioDupla2.xml deleted file mode 100644 index 7ff93a1360a..00000000000 --- a/data/Bravura/E91D-mensuralProportionProportioDupla2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E91E-mensuralProportionProportioTripla.xml b/data/Bravura/E91E-mensuralProportionProportioTripla.xml deleted file mode 100644 index 90c3ad07e67..00000000000 --- a/data/Bravura/E91E-mensuralProportionProportioTripla.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E91F-mensuralProportionProportioQuadrupla.xml b/data/Bravura/E91F-mensuralProportionProportioQuadrupla.xml deleted file mode 100644 index a6cbeef07d2..00000000000 --- a/data/Bravura/E91F-mensuralProportionProportioQuadrupla.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E920-mensuralProlationCombiningDot.xml b/data/Bravura/E920-mensuralProlationCombiningDot.xml deleted file mode 100644 index b2b7f32cc97..00000000000 --- a/data/Bravura/E920-mensuralProlationCombiningDot.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E921-mensuralProlationCombiningTwoDots.xml b/data/Bravura/E921-mensuralProlationCombiningTwoDots.xml deleted file mode 100644 index 10daa97645c..00000000000 --- a/data/Bravura/E921-mensuralProlationCombiningTwoDots.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E922-mensuralProlationCombiningThreeDots.xml b/data/Bravura/E922-mensuralProlationCombiningThreeDots.xml deleted file mode 100644 index ddc1d48cf1f..00000000000 --- a/data/Bravura/E922-mensuralProlationCombiningThreeDots.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E923-mensuralProlationCombiningThreeDotsTri.xml b/data/Bravura/E923-mensuralProlationCombiningThreeDotsTri.xml deleted file mode 100644 index e20212bddaa..00000000000 --- a/data/Bravura/E923-mensuralProlationCombiningThreeDotsTri.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E924-mensuralProlationCombiningDotVoid.xml b/data/Bravura/E924-mensuralProlationCombiningDotVoid.xml deleted file mode 100644 index 4760f97b1cb..00000000000 --- a/data/Bravura/E924-mensuralProlationCombiningDotVoid.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E925-mensuralProlationCombiningStroke.xml b/data/Bravura/E925-mensuralProlationCombiningStroke.xml deleted file mode 100644 index 7c9e17a0a84..00000000000 --- a/data/Bravura/E925-mensuralProlationCombiningStroke.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E938-mensuralNoteheadSemibrevisBlack.xml b/data/Bravura/E938-mensuralNoteheadSemibrevisBlack.xml deleted file mode 100644 index 66b04fd719b..00000000000 --- a/data/Bravura/E938-mensuralNoteheadSemibrevisBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E939-mensuralNoteheadSemibrevisVoid.xml b/data/Bravura/E939-mensuralNoteheadSemibrevisVoid.xml deleted file mode 100644 index 4c484092074..00000000000 --- a/data/Bravura/E939-mensuralNoteheadSemibrevisVoid.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E93C-mensuralNoteheadMinimaWhite.xml b/data/Bravura/E93C-mensuralNoteheadMinimaWhite.xml deleted file mode 100644 index 165ff1341fc..00000000000 --- a/data/Bravura/E93C-mensuralNoteheadMinimaWhite.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E93D-mensuralNoteheadSemiminimaWhite.xml b/data/Bravura/E93D-mensuralNoteheadSemiminimaWhite.xml deleted file mode 100644 index 727718414bc..00000000000 --- a/data/Bravura/E93D-mensuralNoteheadSemiminimaWhite.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E93E-mensuralCombStemUp.xml b/data/Bravura/E93E-mensuralCombStemUp.xml deleted file mode 100644 index ad143028f30..00000000000 --- a/data/Bravura/E93E-mensuralCombStemUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E93F-mensuralCombStemDown.xml b/data/Bravura/E93F-mensuralCombStemDown.xml deleted file mode 100644 index 4d1353c1e53..00000000000 --- a/data/Bravura/E93F-mensuralCombStemDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E949-mensuralCombStemUpFlagSemiminima.xml b/data/Bravura/E949-mensuralCombStemUpFlagSemiminima.xml deleted file mode 100644 index f32c725ce98..00000000000 --- a/data/Bravura/E949-mensuralCombStemUpFlagSemiminima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E94A-mensuralCombStemDownFlagSemiminima.xml b/data/Bravura/E94A-mensuralCombStemDownFlagSemiminima.xml deleted file mode 100644 index 0b894fe377f..00000000000 --- a/data/Bravura/E94A-mensuralCombStemDownFlagSemiminima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E94B-mensuralCombStemUpFlagFusa.xml b/data/Bravura/E94B-mensuralCombStemUpFlagFusa.xml deleted file mode 100644 index 0cb11ed3331..00000000000 --- a/data/Bravura/E94B-mensuralCombStemUpFlagFusa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E94C-mensuralCombStemDownFlagFusa.xml b/data/Bravura/E94C-mensuralCombStemDownFlagFusa.xml deleted file mode 100644 index b222a91fe52..00000000000 --- a/data/Bravura/E94C-mensuralCombStemDownFlagFusa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E990-chantPunctum.xml b/data/Bravura/E990-chantPunctum.xml deleted file mode 100644 index bf7a2bae504..00000000000 --- a/data/Bravura/E990-chantPunctum.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E991-chantPunctumInclinatum.xml b/data/Bravura/E991-chantPunctumInclinatum.xml deleted file mode 100644 index 657043b5ff5..00000000000 --- a/data/Bravura/E991-chantPunctumInclinatum.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E996-chantPunctumVirga.xml b/data/Bravura/E996-chantPunctumVirga.xml deleted file mode 100644 index e486c8b45f8..00000000000 --- a/data/Bravura/E996-chantPunctumVirga.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E99B-chantQuilisma.xml b/data/Bravura/E99B-chantQuilisma.xml deleted file mode 100644 index d42efce7448..00000000000 --- a/data/Bravura/E99B-chantQuilisma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E99E-chantOriscusLiquescens.xml b/data/Bravura/E99E-chantOriscusLiquescens.xml deleted file mode 100644 index 5795c6c8908..00000000000 --- a/data/Bravura/E99E-chantOriscusLiquescens.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E99F-chantStrophicus.xml b/data/Bravura/E99F-chantStrophicus.xml deleted file mode 100644 index 1f3d0718c1b..00000000000 --- a/data/Bravura/E99F-chantStrophicus.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9B4-chantEntryLineAsc2nd.xml b/data/Bravura/E9B4-chantEntryLineAsc2nd.xml deleted file mode 100644 index dc5db66fd16..00000000000 --- a/data/Bravura/E9B4-chantEntryLineAsc2nd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9B5-chantEntryLineAsc3rd.xml b/data/Bravura/E9B5-chantEntryLineAsc3rd.xml deleted file mode 100644 index 7c7f78e6038..00000000000 --- a/data/Bravura/E9B5-chantEntryLineAsc3rd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9B6-chantEntryLineAsc4th.xml b/data/Bravura/E9B6-chantEntryLineAsc4th.xml deleted file mode 100644 index 9268b60f958..00000000000 --- a/data/Bravura/E9B6-chantEntryLineAsc4th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9B7-chantEntryLineAsc5th.xml b/data/Bravura/E9B7-chantEntryLineAsc5th.xml deleted file mode 100644 index 9ec5423ad2a..00000000000 --- a/data/Bravura/E9B7-chantEntryLineAsc5th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9B9-chantLigaturaDesc2nd.xml b/data/Bravura/E9B9-chantLigaturaDesc2nd.xml deleted file mode 100644 index 3fd9361cfd3..00000000000 --- a/data/Bravura/E9B9-chantLigaturaDesc2nd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9BA-chantLigaturaDesc3rd.xml b/data/Bravura/E9BA-chantLigaturaDesc3rd.xml deleted file mode 100644 index aee076b3fa1..00000000000 --- a/data/Bravura/E9BA-chantLigaturaDesc3rd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9BB-chantLigaturaDesc4th.xml b/data/Bravura/E9BB-chantLigaturaDesc4th.xml deleted file mode 100644 index 08278dd0b65..00000000000 --- a/data/Bravura/E9BB-chantLigaturaDesc4th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9BC-chantLigaturaDesc5th.xml b/data/Bravura/E9BC-chantLigaturaDesc5th.xml deleted file mode 100644 index e6d74cb8aed..00000000000 --- a/data/Bravura/E9BC-chantLigaturaDesc5th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9E0-medRenFlatSoftB.xml b/data/Bravura/E9E0-medRenFlatSoftB.xml deleted file mode 100644 index 5aad7787c6c..00000000000 --- a/data/Bravura/E9E0-medRenFlatSoftB.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9E1-medRenFlatHardB.xml b/data/Bravura/E9E1-medRenFlatHardB.xml deleted file mode 100644 index 2e083d40a04..00000000000 --- a/data/Bravura/E9E1-medRenFlatHardB.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9E2-medRenNatural.xml b/data/Bravura/E9E2-medRenNatural.xml deleted file mode 100644 index 3840c1153ed..00000000000 --- a/data/Bravura/E9E2-medRenNatural.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9E3-medRenSharpCroix.xml b/data/Bravura/E9E3-medRenSharpCroix.xml deleted file mode 100644 index b860f0b45ca..00000000000 --- a/data/Bravura/E9E3-medRenSharpCroix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9F0-mensuralRestMaxima.xml b/data/Bravura/E9F0-mensuralRestMaxima.xml deleted file mode 100644 index 4c20092e8a0..00000000000 --- a/data/Bravura/E9F0-mensuralRestMaxima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9F1-mensuralRestLongaPerfecta.xml b/data/Bravura/E9F1-mensuralRestLongaPerfecta.xml deleted file mode 100644 index 7838423de84..00000000000 --- a/data/Bravura/E9F1-mensuralRestLongaPerfecta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9F2-mensuralRestLongaImperfecta.xml b/data/Bravura/E9F2-mensuralRestLongaImperfecta.xml deleted file mode 100644 index 74ce1e94d89..00000000000 --- a/data/Bravura/E9F2-mensuralRestLongaImperfecta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9F3-mensuralRestBrevis.xml b/data/Bravura/E9F3-mensuralRestBrevis.xml deleted file mode 100644 index 7e26de29165..00000000000 --- a/data/Bravura/E9F3-mensuralRestBrevis.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9F4-mensuralRestSemibrevis.xml b/data/Bravura/E9F4-mensuralRestSemibrevis.xml deleted file mode 100644 index 8f8b8cf224d..00000000000 --- a/data/Bravura/E9F4-mensuralRestSemibrevis.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9F5-mensuralRestMinima.xml b/data/Bravura/E9F5-mensuralRestMinima.xml deleted file mode 100644 index 9e5d520607d..00000000000 --- a/data/Bravura/E9F5-mensuralRestMinima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9F6-mensuralRestSemiminima.xml b/data/Bravura/E9F6-mensuralRestSemiminima.xml deleted file mode 100644 index 7fe3c3e1677..00000000000 --- a/data/Bravura/E9F6-mensuralRestSemiminima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9F7-mensuralRestFusa.xml b/data/Bravura/E9F7-mensuralRestFusa.xml deleted file mode 100644 index 076913e2b61..00000000000 --- a/data/Bravura/E9F7-mensuralRestFusa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/E9F8-mensuralRestSemifusa.xml b/data/Bravura/E9F8-mensuralRestSemifusa.xml deleted file mode 100644 index aa4fb9522c8..00000000000 --- a/data/Bravura/E9F8-mensuralRestSemifusa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EA02-mensuralCustosUp.xml b/data/Bravura/EA02-mensuralCustosUp.xml deleted file mode 100644 index 7338e1a2743..00000000000 --- a/data/Bravura/EA02-mensuralCustosUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EA06-chantCustosStemUpPosMiddle.xml b/data/Bravura/EA06-chantCustosStemUpPosMiddle.xml deleted file mode 100644 index 1a5de6c4d7b..00000000000 --- a/data/Bravura/EA06-chantCustosStemUpPosMiddle.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EAA4-wiggleTrill.xml b/data/Bravura/EAA4-wiggleTrill.xml deleted file mode 100644 index 039200accf8..00000000000 --- a/data/Bravura/EAA4-wiggleTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EAA9-wiggleArpeggiatoUp.xml b/data/Bravura/EAA9-wiggleArpeggiatoUp.xml deleted file mode 100644 index 8e4808e96f8..00000000000 --- a/data/Bravura/EAA9-wiggleArpeggiatoUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EAAA-wiggleArpeggiatoDown.xml b/data/Bravura/EAAA-wiggleArpeggiatoDown.xml deleted file mode 100644 index 865fb398af6..00000000000 --- a/data/Bravura/EAAA-wiggleArpeggiatoDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EAAD-wiggleArpeggiatoUpArrow.xml b/data/Bravura/EAAD-wiggleArpeggiatoUpArrow.xml deleted file mode 100644 index 91f645779c2..00000000000 --- a/data/Bravura/EAAD-wiggleArpeggiatoUpArrow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EAAE-wiggleArpeggiatoDownArrow.xml b/data/Bravura/EAAE-wiggleArpeggiatoDownArrow.xml deleted file mode 100644 index 0115ceadd54..00000000000 --- a/data/Bravura/EAAE-wiggleArpeggiatoDownArrow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EAAF-wiggleGlissando.xml b/data/Bravura/EAAF-wiggleGlissando.xml deleted file mode 100644 index 520e0c96dd9..00000000000 --- a/data/Bravura/EAAF-wiggleGlissando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBA7-luteDurationWhole.xml b/data/Bravura/EBA7-luteDurationWhole.xml deleted file mode 100644 index c686cfb6ddb..00000000000 --- a/data/Bravura/EBA7-luteDurationWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBA8-luteDurationHalf.xml b/data/Bravura/EBA8-luteDurationHalf.xml deleted file mode 100644 index 073260463ce..00000000000 --- a/data/Bravura/EBA8-luteDurationHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBA9-luteDurationQuarter.xml b/data/Bravura/EBA9-luteDurationQuarter.xml deleted file mode 100644 index a4848a8ec5b..00000000000 --- a/data/Bravura/EBA9-luteDurationQuarter.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBAA-luteDuration8th.xml b/data/Bravura/EBAA-luteDuration8th.xml deleted file mode 100644 index f22cf9a7433..00000000000 --- a/data/Bravura/EBAA-luteDuration8th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBAB-luteDuration16th.xml b/data/Bravura/EBAB-luteDuration16th.xml deleted file mode 100644 index a80d9d55e46..00000000000 --- a/data/Bravura/EBAB-luteDuration16th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBAC-luteDuration32nd.xml b/data/Bravura/EBAC-luteDuration32nd.xml deleted file mode 100644 index 6b8f4ab23dc..00000000000 --- a/data/Bravura/EBAC-luteDuration32nd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBC0-luteFrenchFretA.xml b/data/Bravura/EBC0-luteFrenchFretA.xml deleted file mode 100644 index 1befe6ef5da..00000000000 --- a/data/Bravura/EBC0-luteFrenchFretA.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBC1-luteFrenchFretB.xml b/data/Bravura/EBC1-luteFrenchFretB.xml deleted file mode 100644 index ce47f07443a..00000000000 --- a/data/Bravura/EBC1-luteFrenchFretB.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBC2-luteFrenchFretC.xml b/data/Bravura/EBC2-luteFrenchFretC.xml deleted file mode 100644 index a41e93abe90..00000000000 --- a/data/Bravura/EBC2-luteFrenchFretC.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBC3-luteFrenchFretD.xml b/data/Bravura/EBC3-luteFrenchFretD.xml deleted file mode 100644 index 300f5b76c31..00000000000 --- a/data/Bravura/EBC3-luteFrenchFretD.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBC4-luteFrenchFretE.xml b/data/Bravura/EBC4-luteFrenchFretE.xml deleted file mode 100644 index 0f1fce7fe90..00000000000 --- a/data/Bravura/EBC4-luteFrenchFretE.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBC5-luteFrenchFretF.xml b/data/Bravura/EBC5-luteFrenchFretF.xml deleted file mode 100644 index 62d504fbeef..00000000000 --- a/data/Bravura/EBC5-luteFrenchFretF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBC6-luteFrenchFretG.xml b/data/Bravura/EBC6-luteFrenchFretG.xml deleted file mode 100644 index 9092db8dcb2..00000000000 --- a/data/Bravura/EBC6-luteFrenchFretG.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBC7-luteFrenchFretH.xml b/data/Bravura/EBC7-luteFrenchFretH.xml deleted file mode 100644 index 1ba8656085b..00000000000 --- a/data/Bravura/EBC7-luteFrenchFretH.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBC8-luteFrenchFretI.xml b/data/Bravura/EBC8-luteFrenchFretI.xml deleted file mode 100644 index 8e8854e8ccb..00000000000 --- a/data/Bravura/EBC8-luteFrenchFretI.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBC9-luteFrenchFretK.xml b/data/Bravura/EBC9-luteFrenchFretK.xml deleted file mode 100644 index 4fb9a7c7608..00000000000 --- a/data/Bravura/EBC9-luteFrenchFretK.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBCA-luteFrenchFretL.xml b/data/Bravura/EBCA-luteFrenchFretL.xml deleted file mode 100644 index 58c02fc570f..00000000000 --- a/data/Bravura/EBCA-luteFrenchFretL.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBCB-luteFrenchFretM.xml b/data/Bravura/EBCB-luteFrenchFretM.xml deleted file mode 100644 index e512c7dfbe5..00000000000 --- a/data/Bravura/EBCB-luteFrenchFretM.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBCC-luteFrenchFretN.xml b/data/Bravura/EBCC-luteFrenchFretN.xml deleted file mode 100644 index 5df80d67025..00000000000 --- a/data/Bravura/EBCC-luteFrenchFretN.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBE0-luteItalianFret0.xml b/data/Bravura/EBE0-luteItalianFret0.xml deleted file mode 100644 index fa16c10ca9b..00000000000 --- a/data/Bravura/EBE0-luteItalianFret0.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBE1-luteItalianFret1.xml b/data/Bravura/EBE1-luteItalianFret1.xml deleted file mode 100644 index c6c59044704..00000000000 --- a/data/Bravura/EBE1-luteItalianFret1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBE2-luteItalianFret2.xml b/data/Bravura/EBE2-luteItalianFret2.xml deleted file mode 100644 index 5146ef08065..00000000000 --- a/data/Bravura/EBE2-luteItalianFret2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBE3-luteItalianFret3.xml b/data/Bravura/EBE3-luteItalianFret3.xml deleted file mode 100644 index fa31144f075..00000000000 --- a/data/Bravura/EBE3-luteItalianFret3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBE4-luteItalianFret4.xml b/data/Bravura/EBE4-luteItalianFret4.xml deleted file mode 100644 index 9cf44d6d579..00000000000 --- a/data/Bravura/EBE4-luteItalianFret4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBE5-luteItalianFret5.xml b/data/Bravura/EBE5-luteItalianFret5.xml deleted file mode 100644 index 035ade18de6..00000000000 --- a/data/Bravura/EBE5-luteItalianFret5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBE6-luteItalianFret6.xml b/data/Bravura/EBE6-luteItalianFret6.xml deleted file mode 100644 index 13c75933cb5..00000000000 --- a/data/Bravura/EBE6-luteItalianFret6.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBE7-luteItalianFret7.xml b/data/Bravura/EBE7-luteItalianFret7.xml deleted file mode 100644 index fe4fa7224bc..00000000000 --- a/data/Bravura/EBE7-luteItalianFret7.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBE8-luteItalianFret8.xml b/data/Bravura/EBE8-luteItalianFret8.xml deleted file mode 100644 index 751aca77d40..00000000000 --- a/data/Bravura/EBE8-luteItalianFret8.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/EBE9-luteItalianFret9.xml b/data/Bravura/EBE9-luteItalianFret9.xml deleted file mode 100644 index f3b82cccb3b..00000000000 --- a/data/Bravura/EBE9-luteItalianFret9.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/ED40-articSoftAccentAbove.xml b/data/Bravura/ED40-articSoftAccentAbove.xml deleted file mode 100644 index 91ea60b6d8a..00000000000 --- a/data/Bravura/ED40-articSoftAccentAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Bravura/ED41-articSoftAccentBelow.xml b/data/Bravura/ED41-articSoftAccentBelow.xml deleted file mode 100644 index 2a2e778271c..00000000000 --- a/data/Bravura/ED41-articSoftAccentBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville.xml b/data/Gootville.xml deleted file mode 100644 index 32cddd400a6..00000000000 --- a/data/Gootville.xml +++ /dev/null @@ -1,416 +0,0 @@ - - - - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/Gootville/E003-bracketTop.xml b/data/Gootville/E003-bracketTop.xml deleted file mode 100644 index 172ed245dcb..00000000000 --- a/data/Gootville/E003-bracketTop.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E004-bracketBottom.xml b/data/Gootville/E004-bracketBottom.xml deleted file mode 100644 index 12b78940b95..00000000000 --- a/data/Gootville/E004-bracketBottom.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E043-repeatDots.xml b/data/Gootville/E043-repeatDots.xml deleted file mode 100644 index 924f2c869af..00000000000 --- a/data/Gootville/E043-repeatDots.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E044-repeatDot.xml b/data/Gootville/E044-repeatDot.xml deleted file mode 100644 index 8f01a774bb2..00000000000 --- a/data/Gootville/E044-repeatDot.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E047-segno.xml b/data/Gootville/E047-segno.xml deleted file mode 100644 index 5acd758ba4f..00000000000 --- a/data/Gootville/E047-segno.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E048-coda.xml b/data/Gootville/E048-coda.xml deleted file mode 100644 index 1d03b80bef3..00000000000 --- a/data/Gootville/E048-coda.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E049-codaSquare.xml b/data/Gootville/E049-codaSquare.xml deleted file mode 100644 index 33822621980..00000000000 --- a/data/Gootville/E049-codaSquare.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E050-gClef.xml b/data/Gootville/E050-gClef.xml deleted file mode 100644 index c3f5b9512cd..00000000000 --- a/data/Gootville/E050-gClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E051-gClef15mb.xml b/data/Gootville/E051-gClef15mb.xml deleted file mode 100644 index 24af8c55979..00000000000 --- a/data/Gootville/E051-gClef15mb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E052-gClef8vb.xml b/data/Gootville/E052-gClef8vb.xml deleted file mode 100644 index ef03e2dc34e..00000000000 --- a/data/Gootville/E052-gClef8vb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E053-gClef8va.xml b/data/Gootville/E053-gClef8va.xml deleted file mode 100644 index 34b8b99ceb9..00000000000 --- a/data/Gootville/E053-gClef8va.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E054-gClef15ma.xml b/data/Gootville/E054-gClef15ma.xml deleted file mode 100644 index cd9082e29c7..00000000000 --- a/data/Gootville/E054-gClef15ma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E05C-cClef.xml b/data/Gootville/E05C-cClef.xml deleted file mode 100644 index 572428e7c26..00000000000 --- a/data/Gootville/E05C-cClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E05D-cClef8vb.xml b/data/Gootville/E05D-cClef8vb.xml deleted file mode 100644 index 18b96c64f83..00000000000 --- a/data/Gootville/E05D-cClef8vb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E062-fClef.xml b/data/Gootville/E062-fClef.xml deleted file mode 100644 index 83104c2242f..00000000000 --- a/data/Gootville/E062-fClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E063-fClef15mb.xml b/data/Gootville/E063-fClef15mb.xml deleted file mode 100644 index 7e63888147d..00000000000 --- a/data/Gootville/E063-fClef15mb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E064-fClef8vb.xml b/data/Gootville/E064-fClef8vb.xml deleted file mode 100644 index 6de57c7469a..00000000000 --- a/data/Gootville/E064-fClef8vb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E065-fClef8va.xml b/data/Gootville/E065-fClef8va.xml deleted file mode 100644 index 7733db0fe45..00000000000 --- a/data/Gootville/E065-fClef8va.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E066-fClef15ma.xml b/data/Gootville/E066-fClef15ma.xml deleted file mode 100644 index 5f3d0701fca..00000000000 --- a/data/Gootville/E066-fClef15ma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E069-unpitchedPercussionClef1.xml b/data/Gootville/E069-unpitchedPercussionClef1.xml deleted file mode 100644 index 7555ffca9dc..00000000000 --- a/data/Gootville/E069-unpitchedPercussionClef1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E06A-unpitchedPercussionClef2.xml b/data/Gootville/E06A-unpitchedPercussionClef2.xml deleted file mode 100644 index d408b20318f..00000000000 --- a/data/Gootville/E06A-unpitchedPercussionClef2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E080-timeSig0.xml b/data/Gootville/E080-timeSig0.xml deleted file mode 100644 index 8c302f0f33e..00000000000 --- a/data/Gootville/E080-timeSig0.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E081-timeSig1.xml b/data/Gootville/E081-timeSig1.xml deleted file mode 100644 index 0c7dd2ffc8b..00000000000 --- a/data/Gootville/E081-timeSig1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E082-timeSig2.xml b/data/Gootville/E082-timeSig2.xml deleted file mode 100644 index 609e6f0368b..00000000000 --- a/data/Gootville/E082-timeSig2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E083-timeSig3.xml b/data/Gootville/E083-timeSig3.xml deleted file mode 100644 index 670a29e2c8c..00000000000 --- a/data/Gootville/E083-timeSig3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E084-timeSig4.xml b/data/Gootville/E084-timeSig4.xml deleted file mode 100644 index f50884bfc8a..00000000000 --- a/data/Gootville/E084-timeSig4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E085-timeSig5.xml b/data/Gootville/E085-timeSig5.xml deleted file mode 100644 index 8e4e434e8c7..00000000000 --- a/data/Gootville/E085-timeSig5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E086-timeSig6.xml b/data/Gootville/E086-timeSig6.xml deleted file mode 100644 index cdb50b3162c..00000000000 --- a/data/Gootville/E086-timeSig6.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E087-timeSig7.xml b/data/Gootville/E087-timeSig7.xml deleted file mode 100644 index 8b7ea7b1e60..00000000000 --- a/data/Gootville/E087-timeSig7.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E088-timeSig8.xml b/data/Gootville/E088-timeSig8.xml deleted file mode 100644 index 5bfa451cbee..00000000000 --- a/data/Gootville/E088-timeSig8.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E089-timeSig9.xml b/data/Gootville/E089-timeSig9.xml deleted file mode 100644 index bace0de1d4d..00000000000 --- a/data/Gootville/E089-timeSig9.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E08A-timeSigCommon.xml b/data/Gootville/E08A-timeSigCommon.xml deleted file mode 100644 index 8393e1c53d0..00000000000 --- a/data/Gootville/E08A-timeSigCommon.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E08B-timeSigCutCommon.xml b/data/Gootville/E08B-timeSigCutCommon.xml deleted file mode 100644 index 03d999a63c3..00000000000 --- a/data/Gootville/E08B-timeSigCutCommon.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E092-timeSigParensLeftSmall.xml b/data/Gootville/E092-timeSigParensLeftSmall.xml deleted file mode 100644 index a70bfad9455..00000000000 --- a/data/Gootville/E092-timeSigParensLeftSmall.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E093-timeSigParensRightSmall.xml b/data/Gootville/E093-timeSigParensRightSmall.xml deleted file mode 100644 index 198c428d3bd..00000000000 --- a/data/Gootville/E093-timeSigParensRightSmall.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E094-timeSigParensLeft.xml b/data/Gootville/E094-timeSigParensLeft.xml deleted file mode 100644 index 4616037fe5b..00000000000 --- a/data/Gootville/E094-timeSigParensLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E095-timeSigParensRight.xml b/data/Gootville/E095-timeSigParensRight.xml deleted file mode 100644 index 8b29dac8529..00000000000 --- a/data/Gootville/E095-timeSigParensRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E0A0-noteheadDoubleWhole.xml b/data/Gootville/E0A0-noteheadDoubleWhole.xml deleted file mode 100644 index b2f9ef82a88..00000000000 --- a/data/Gootville/E0A0-noteheadDoubleWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E0A1-noteheadDoubleWholeSquare.xml b/data/Gootville/E0A1-noteheadDoubleWholeSquare.xml deleted file mode 100644 index 9766e573ca8..00000000000 --- a/data/Gootville/E0A1-noteheadDoubleWholeSquare.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E0A2-noteheadWhole.xml b/data/Gootville/E0A2-noteheadWhole.xml deleted file mode 100644 index 7ace761da31..00000000000 --- a/data/Gootville/E0A2-noteheadWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E0A3-noteheadHalf.xml b/data/Gootville/E0A3-noteheadHalf.xml deleted file mode 100644 index 522159b9e16..00000000000 --- a/data/Gootville/E0A3-noteheadHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E0A4-noteheadBlack.xml b/data/Gootville/E0A4-noteheadBlack.xml deleted file mode 100644 index cc55ca5ad8b..00000000000 --- a/data/Gootville/E0A4-noteheadBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E0A9-noteheadXBlack.xml b/data/Gootville/E0A9-noteheadXBlack.xml deleted file mode 100644 index fc69f03b4f2..00000000000 --- a/data/Gootville/E0A9-noteheadXBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E0D9-noteheadDiamondHalf.xml b/data/Gootville/E0D9-noteheadDiamondHalf.xml deleted file mode 100644 index de4b2eabe44..00000000000 --- a/data/Gootville/E0D9-noteheadDiamondHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E0DA-noteheadDiamondHalfWide.xml b/data/Gootville/E0DA-noteheadDiamondHalfWide.xml deleted file mode 100644 index d014c05f839..00000000000 --- a/data/Gootville/E0DA-noteheadDiamondHalfWide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E0DB-noteheadDiamondBlack.xml b/data/Gootville/E0DB-noteheadDiamondBlack.xml deleted file mode 100644 index 64b5632bcdc..00000000000 --- a/data/Gootville/E0DB-noteheadDiamondBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E0DC-noteheadDiamondBlackWide.xml b/data/Gootville/E0DC-noteheadDiamondBlackWide.xml deleted file mode 100644 index 491cddc5f6e..00000000000 --- a/data/Gootville/E0DC-noteheadDiamondBlackWide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E0DD-noteheadDiamondWhite.xml b/data/Gootville/E0DD-noteheadDiamondWhite.xml deleted file mode 100644 index 5ee1714badb..00000000000 --- a/data/Gootville/E0DD-noteheadDiamondWhite.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E0DE-noteheadDiamondWhiteWide.xml b/data/Gootville/E0DE-noteheadDiamondWhiteWide.xml deleted file mode 100644 index 8936cac6828..00000000000 --- a/data/Gootville/E0DE-noteheadDiamondWhiteWide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E0F5-noteheadParenthesisLeft.xml b/data/Gootville/E0F5-noteheadParenthesisLeft.xml deleted file mode 100644 index d5f6beec4d6..00000000000 --- a/data/Gootville/E0F5-noteheadParenthesisLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E0F6-noteheadParenthesisRight.xml b/data/Gootville/E0F6-noteheadParenthesisRight.xml deleted file mode 100644 index 70ee196b732..00000000000 --- a/data/Gootville/E0F6-noteheadParenthesisRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E101-noteheadSlashHorizontalEnds.xml b/data/Gootville/E101-noteheadSlashHorizontalEnds.xml deleted file mode 100644 index 95fcd0be4f1..00000000000 --- a/data/Gootville/E101-noteheadSlashHorizontalEnds.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E102-noteheadSlashWhiteWhole.xml b/data/Gootville/E102-noteheadSlashWhiteWhole.xml deleted file mode 100644 index 682e8c0dba3..00000000000 --- a/data/Gootville/E102-noteheadSlashWhiteWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E103-noteheadSlashWhiteHalf.xml b/data/Gootville/E103-noteheadSlashWhiteHalf.xml deleted file mode 100644 index eb5d00e92b2..00000000000 --- a/data/Gootville/E103-noteheadSlashWhiteHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E240-flag8thUp.xml b/data/Gootville/E240-flag8thUp.xml deleted file mode 100644 index e4ba9fc2348..00000000000 --- a/data/Gootville/E240-flag8thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E241-flag8thDown.xml b/data/Gootville/E241-flag8thDown.xml deleted file mode 100644 index 48fb7a85db9..00000000000 --- a/data/Gootville/E241-flag8thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E242-flag16thUp.xml b/data/Gootville/E242-flag16thUp.xml deleted file mode 100644 index 18c197ae300..00000000000 --- a/data/Gootville/E242-flag16thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E243-flag16thDown.xml b/data/Gootville/E243-flag16thDown.xml deleted file mode 100644 index 44eb2b8c86e..00000000000 --- a/data/Gootville/E243-flag16thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E244-flag32ndUp.xml b/data/Gootville/E244-flag32ndUp.xml deleted file mode 100644 index 87c20821c3b..00000000000 --- a/data/Gootville/E244-flag32ndUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E245-flag32ndDown.xml b/data/Gootville/E245-flag32ndDown.xml deleted file mode 100644 index 3f073e0d965..00000000000 --- a/data/Gootville/E245-flag32ndDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E246-flag64thUp.xml b/data/Gootville/E246-flag64thUp.xml deleted file mode 100644 index 5caa85bff72..00000000000 --- a/data/Gootville/E246-flag64thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E247-flag64thDown.xml b/data/Gootville/E247-flag64thDown.xml deleted file mode 100644 index 71e7994f3be..00000000000 --- a/data/Gootville/E247-flag64thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E248-flag128thUp.xml b/data/Gootville/E248-flag128thUp.xml deleted file mode 100644 index ab5844916e7..00000000000 --- a/data/Gootville/E248-flag128thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E249-flag128thDown.xml b/data/Gootville/E249-flag128thDown.xml deleted file mode 100644 index 83865377573..00000000000 --- a/data/Gootville/E249-flag128thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E260-accidentalFlat.xml b/data/Gootville/E260-accidentalFlat.xml deleted file mode 100644 index 68f4eb10093..00000000000 --- a/data/Gootville/E260-accidentalFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E261-accidentalNatural.xml b/data/Gootville/E261-accidentalNatural.xml deleted file mode 100644 index 9d813821f22..00000000000 --- a/data/Gootville/E261-accidentalNatural.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E262-accidentalSharp.xml b/data/Gootville/E262-accidentalSharp.xml deleted file mode 100644 index 699ccb6ffc5..00000000000 --- a/data/Gootville/E262-accidentalSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E263-accidentalDoubleSharp.xml b/data/Gootville/E263-accidentalDoubleSharp.xml deleted file mode 100644 index 5aa1fa35e44..00000000000 --- a/data/Gootville/E263-accidentalDoubleSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E264-accidentalDoubleFlat.xml b/data/Gootville/E264-accidentalDoubleFlat.xml deleted file mode 100644 index dd9dfea1957..00000000000 --- a/data/Gootville/E264-accidentalDoubleFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E26A-accidentalParensLeft.xml b/data/Gootville/E26A-accidentalParensLeft.xml deleted file mode 100644 index e4080e976e5..00000000000 --- a/data/Gootville/E26A-accidentalParensLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E26B-accidentalParensRight.xml b/data/Gootville/E26B-accidentalParensRight.xml deleted file mode 100644 index 13254143173..00000000000 --- a/data/Gootville/E26B-accidentalParensRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E270-accidentalQuarterToneFlatArrowUp.xml b/data/Gootville/E270-accidentalQuarterToneFlatArrowUp.xml deleted file mode 100644 index d0a1de762fe..00000000000 --- a/data/Gootville/E270-accidentalQuarterToneFlatArrowUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E271-accidentalThreeQuarterTonesFlatArrowDown.xml b/data/Gootville/E271-accidentalThreeQuarterTonesFlatArrowDown.xml deleted file mode 100644 index 5f55aa86418..00000000000 --- a/data/Gootville/E271-accidentalThreeQuarterTonesFlatArrowDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E272-accidentalQuarterToneSharpNaturalArrowUp.xml b/data/Gootville/E272-accidentalQuarterToneSharpNaturalArrowUp.xml deleted file mode 100644 index f29ae12db4b..00000000000 --- a/data/Gootville/E272-accidentalQuarterToneSharpNaturalArrowUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E273-accidentalQuarterToneFlatNaturalArrowDown.xml b/data/Gootville/E273-accidentalQuarterToneFlatNaturalArrowDown.xml deleted file mode 100644 index 06c9c9efba9..00000000000 --- a/data/Gootville/E273-accidentalQuarterToneFlatNaturalArrowDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E274-accidentalThreeQuarterTonesSharpArrowUp.xml b/data/Gootville/E274-accidentalThreeQuarterTonesSharpArrowUp.xml deleted file mode 100644 index 33c0c544b1b..00000000000 --- a/data/Gootville/E274-accidentalThreeQuarterTonesSharpArrowUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E275-accidentalQuarterToneSharpArrowDown.xml b/data/Gootville/E275-accidentalQuarterToneSharpArrowDown.xml deleted file mode 100644 index c5a526f5f4a..00000000000 --- a/data/Gootville/E275-accidentalQuarterToneSharpArrowDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E280-accidentalQuarterToneFlatStein.xml b/data/Gootville/E280-accidentalQuarterToneFlatStein.xml deleted file mode 100644 index dfa28971928..00000000000 --- a/data/Gootville/E280-accidentalQuarterToneFlatStein.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E281-accidentalThreeQuarterTonesFlatZimmermann.xml b/data/Gootville/E281-accidentalThreeQuarterTonesFlatZimmermann.xml deleted file mode 100644 index 9e8a50d7fd4..00000000000 --- a/data/Gootville/E281-accidentalThreeQuarterTonesFlatZimmermann.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E282-accidentalQuarterToneSharpStein.xml b/data/Gootville/E282-accidentalQuarterToneSharpStein.xml deleted file mode 100644 index 2d03dc8f0fd..00000000000 --- a/data/Gootville/E282-accidentalQuarterToneSharpStein.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E283-accidentalThreeQuarterTonesSharpStein.xml b/data/Gootville/E283-accidentalThreeQuarterTonesSharpStein.xml deleted file mode 100644 index 2817f6302c0..00000000000 --- a/data/Gootville/E283-accidentalThreeQuarterTonesSharpStein.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E440-accidentalBuyukMucennebFlat.xml b/data/Gootville/E440-accidentalBuyukMucennebFlat.xml deleted file mode 100644 index a23ac0f6b52..00000000000 --- a/data/Gootville/E440-accidentalBuyukMucennebFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E441-accidentalKucukMucennebFlat.xml b/data/Gootville/E441-accidentalKucukMucennebFlat.xml deleted file mode 100644 index a3cd5ba934e..00000000000 --- a/data/Gootville/E441-accidentalKucukMucennebFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E442-accidentalBakiyeFlat.xml b/data/Gootville/E442-accidentalBakiyeFlat.xml deleted file mode 100644 index b8c9c4261f4..00000000000 --- a/data/Gootville/E442-accidentalBakiyeFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E443-accidentalKomaFlat.xml b/data/Gootville/E443-accidentalKomaFlat.xml deleted file mode 100644 index bdd7c6e462d..00000000000 --- a/data/Gootville/E443-accidentalKomaFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E444-accidentalKomaSharp.xml b/data/Gootville/E444-accidentalKomaSharp.xml deleted file mode 100644 index 04240b8d4c6..00000000000 --- a/data/Gootville/E444-accidentalKomaSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E445-accidentalBakiyeSharp.xml b/data/Gootville/E445-accidentalBakiyeSharp.xml deleted file mode 100644 index 7309eec8c2e..00000000000 --- a/data/Gootville/E445-accidentalBakiyeSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E446-accidentalKucukMucennebSharp.xml b/data/Gootville/E446-accidentalKucukMucennebSharp.xml deleted file mode 100644 index 955d07fd7c8..00000000000 --- a/data/Gootville/E446-accidentalKucukMucennebSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E447-accidentalBuyukMucennebSharp.xml b/data/Gootville/E447-accidentalBuyukMucennebSharp.xml deleted file mode 100644 index 5b6c437d7b1..00000000000 --- a/data/Gootville/E447-accidentalBuyukMucennebSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4A0-articAccentAbove.xml b/data/Gootville/E4A0-articAccentAbove.xml deleted file mode 100644 index 59a79c428ca..00000000000 --- a/data/Gootville/E4A0-articAccentAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4A1-articAccentBelow.xml b/data/Gootville/E4A1-articAccentBelow.xml deleted file mode 100644 index 1fcc16e6274..00000000000 --- a/data/Gootville/E4A1-articAccentBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4A2-articStaccatoAbove.xml b/data/Gootville/E4A2-articStaccatoAbove.xml deleted file mode 100644 index e0fd016b270..00000000000 --- a/data/Gootville/E4A2-articStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4A3-articStaccatoBelow.xml b/data/Gootville/E4A3-articStaccatoBelow.xml deleted file mode 100644 index 76225326a2c..00000000000 --- a/data/Gootville/E4A3-articStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4A4-articTenutoAbove.xml b/data/Gootville/E4A4-articTenutoAbove.xml deleted file mode 100644 index 266d27975c6..00000000000 --- a/data/Gootville/E4A4-articTenutoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4A5-articTenutoBelow.xml b/data/Gootville/E4A5-articTenutoBelow.xml deleted file mode 100644 index 898c5dcf753..00000000000 --- a/data/Gootville/E4A5-articTenutoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4A6-articStaccatissimoAbove.xml b/data/Gootville/E4A6-articStaccatissimoAbove.xml deleted file mode 100644 index 24a5db0ba6f..00000000000 --- a/data/Gootville/E4A6-articStaccatissimoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4A7-articStaccatissimoBelow.xml b/data/Gootville/E4A7-articStaccatissimoBelow.xml deleted file mode 100644 index dc7efb2fc52..00000000000 --- a/data/Gootville/E4A7-articStaccatissimoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4A8-articStaccatissimoWedgeAbove.xml b/data/Gootville/E4A8-articStaccatissimoWedgeAbove.xml deleted file mode 100644 index 3b01b1281dc..00000000000 --- a/data/Gootville/E4A8-articStaccatissimoWedgeAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4A9-articStaccatissimoWedgeBelow.xml b/data/Gootville/E4A9-articStaccatissimoWedgeBelow.xml deleted file mode 100644 index fc4fbdbdcfb..00000000000 --- a/data/Gootville/E4A9-articStaccatissimoWedgeBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4AC-articMarcatoAbove.xml b/data/Gootville/E4AC-articMarcatoAbove.xml deleted file mode 100644 index e38120321a2..00000000000 --- a/data/Gootville/E4AC-articMarcatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4AD-articMarcatoBelow.xml b/data/Gootville/E4AD-articMarcatoBelow.xml deleted file mode 100644 index b422ff09459..00000000000 --- a/data/Gootville/E4AD-articMarcatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4B2-articTenutoStaccatoAbove.xml b/data/Gootville/E4B2-articTenutoStaccatoAbove.xml deleted file mode 100644 index b976cd35c39..00000000000 --- a/data/Gootville/E4B2-articTenutoStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4B3-articTenutoStaccatoBelow.xml b/data/Gootville/E4B3-articTenutoStaccatoBelow.xml deleted file mode 100644 index bd2c7d2bc61..00000000000 --- a/data/Gootville/E4B3-articTenutoStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4B6-articStressAbove.xml b/data/Gootville/E4B6-articStressAbove.xml deleted file mode 100644 index 1fe4d43db98..00000000000 --- a/data/Gootville/E4B6-articStressAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4B7-articStressBelow.xml b/data/Gootville/E4B7-articStressBelow.xml deleted file mode 100644 index 99ebf5be730..00000000000 --- a/data/Gootville/E4B7-articStressBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4C0-fermataAbove.xml b/data/Gootville/E4C0-fermataAbove.xml deleted file mode 100644 index cdcbc93a0ab..00000000000 --- a/data/Gootville/E4C0-fermataAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4C1-fermataBelow.xml b/data/Gootville/E4C1-fermataBelow.xml deleted file mode 100644 index e9b281365a5..00000000000 --- a/data/Gootville/E4C1-fermataBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4C4-fermataShortAbove.xml b/data/Gootville/E4C4-fermataShortAbove.xml deleted file mode 100644 index 99800d136bb..00000000000 --- a/data/Gootville/E4C4-fermataShortAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4C5-fermataShortBelow.xml b/data/Gootville/E4C5-fermataShortBelow.xml deleted file mode 100644 index e8341eaa494..00000000000 --- a/data/Gootville/E4C5-fermataShortBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4C6-fermataLongAbove.xml b/data/Gootville/E4C6-fermataLongAbove.xml deleted file mode 100644 index beaea6ca569..00000000000 --- a/data/Gootville/E4C6-fermataLongAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4C7-fermataLongBelow.xml b/data/Gootville/E4C7-fermataLongBelow.xml deleted file mode 100644 index 5728013d236..00000000000 --- a/data/Gootville/E4C7-fermataLongBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4C8-fermataVeryLongAbove.xml b/data/Gootville/E4C8-fermataVeryLongAbove.xml deleted file mode 100644 index 57ecedf7f38..00000000000 --- a/data/Gootville/E4C8-fermataVeryLongAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4C9-fermataVeryLongBelow.xml b/data/Gootville/E4C9-fermataVeryLongBelow.xml deleted file mode 100644 index 77d5d755036..00000000000 --- a/data/Gootville/E4C9-fermataVeryLongBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4CE-breathMarkComma.xml b/data/Gootville/E4CE-breathMarkComma.xml deleted file mode 100644 index 95a8b42a9f4..00000000000 --- a/data/Gootville/E4CE-breathMarkComma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4E1-restLonga.xml b/data/Gootville/E4E1-restLonga.xml deleted file mode 100644 index 9069c3e0874..00000000000 --- a/data/Gootville/E4E1-restLonga.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4E2-restDoubleWhole.xml b/data/Gootville/E4E2-restDoubleWhole.xml deleted file mode 100644 index deb9a04a4cd..00000000000 --- a/data/Gootville/E4E2-restDoubleWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4E3-restWhole.xml b/data/Gootville/E4E3-restWhole.xml deleted file mode 100644 index a60360819af..00000000000 --- a/data/Gootville/E4E3-restWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4E4-restHalf.xml b/data/Gootville/E4E4-restHalf.xml deleted file mode 100644 index d6b53001b15..00000000000 --- a/data/Gootville/E4E4-restHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4E5-restQuarter.xml b/data/Gootville/E4E5-restQuarter.xml deleted file mode 100644 index 358fb0d4d09..00000000000 --- a/data/Gootville/E4E5-restQuarter.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4E6-rest8th.xml b/data/Gootville/E4E6-rest8th.xml deleted file mode 100644 index 7a56cd3ac63..00000000000 --- a/data/Gootville/E4E6-rest8th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4E7-rest16th.xml b/data/Gootville/E4E7-rest16th.xml deleted file mode 100644 index 6b017f7359d..00000000000 --- a/data/Gootville/E4E7-rest16th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4E8-rest32nd.xml b/data/Gootville/E4E8-rest32nd.xml deleted file mode 100644 index 5e827146645..00000000000 --- a/data/Gootville/E4E8-rest32nd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4E9-rest64th.xml b/data/Gootville/E4E9-rest64th.xml deleted file mode 100644 index db163eae0e1..00000000000 --- a/data/Gootville/E4E9-rest64th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4EA-rest128th.xml b/data/Gootville/E4EA-rest128th.xml deleted file mode 100644 index 129480e4f79..00000000000 --- a/data/Gootville/E4EA-rest128th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E4F2-restQuarterOld.xml b/data/Gootville/E4F2-restQuarterOld.xml deleted file mode 100644 index 146cf831697..00000000000 --- a/data/Gootville/E4F2-restQuarterOld.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E510-ottava.xml b/data/Gootville/E510-ottava.xml deleted file mode 100644 index c08cb606717..00000000000 --- a/data/Gootville/E510-ottava.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E514-quindicesima.xml b/data/Gootville/E514-quindicesima.xml deleted file mode 100644 index 21efde12b5c..00000000000 --- a/data/Gootville/E514-quindicesima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E517-ventiduesima.xml b/data/Gootville/E517-ventiduesima.xml deleted file mode 100644 index 5f6f31fdb74..00000000000 --- a/data/Gootville/E517-ventiduesima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E51A-octaveParensLeft.xml b/data/Gootville/E51A-octaveParensLeft.xml deleted file mode 100644 index 897e90f1ced..00000000000 --- a/data/Gootville/E51A-octaveParensLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E51B-octaveParensRight.xml b/data/Gootville/E51B-octaveParensRight.xml deleted file mode 100644 index bbff1d5ecf7..00000000000 --- a/data/Gootville/E51B-octaveParensRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E520-dynamicPiano.xml b/data/Gootville/E520-dynamicPiano.xml deleted file mode 100644 index f976674cdef..00000000000 --- a/data/Gootville/E520-dynamicPiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E521-dynamicMezzo.xml b/data/Gootville/E521-dynamicMezzo.xml deleted file mode 100644 index d7152d29e2b..00000000000 --- a/data/Gootville/E521-dynamicMezzo.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E522-dynamicForte.xml b/data/Gootville/E522-dynamicForte.xml deleted file mode 100644 index 6e529d21c9d..00000000000 --- a/data/Gootville/E522-dynamicForte.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E523-dynamicRinforzando.xml b/data/Gootville/E523-dynamicRinforzando.xml deleted file mode 100644 index e136304ac4f..00000000000 --- a/data/Gootville/E523-dynamicRinforzando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E524-dynamicSforzando.xml b/data/Gootville/E524-dynamicSforzando.xml deleted file mode 100644 index b29ab4625c5..00000000000 --- a/data/Gootville/E524-dynamicSforzando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E525-dynamicZ.xml b/data/Gootville/E525-dynamicZ.xml deleted file mode 100644 index faf27040b6d..00000000000 --- a/data/Gootville/E525-dynamicZ.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E526-dynamicNiente.xml b/data/Gootville/E526-dynamicNiente.xml deleted file mode 100644 index 28aaaf6c598..00000000000 --- a/data/Gootville/E526-dynamicNiente.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E527-dynamicPPPPPP.xml b/data/Gootville/E527-dynamicPPPPPP.xml deleted file mode 100644 index 99288d85380..00000000000 --- a/data/Gootville/E527-dynamicPPPPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E528-dynamicPPPPP.xml b/data/Gootville/E528-dynamicPPPPP.xml deleted file mode 100644 index 3ea48f9175a..00000000000 --- a/data/Gootville/E528-dynamicPPPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E529-dynamicPPPP.xml b/data/Gootville/E529-dynamicPPPP.xml deleted file mode 100644 index a5a9172eacd..00000000000 --- a/data/Gootville/E529-dynamicPPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E52A-dynamicPPP.xml b/data/Gootville/E52A-dynamicPPP.xml deleted file mode 100644 index d12e41df2ac..00000000000 --- a/data/Gootville/E52A-dynamicPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E52B-dynamicPP.xml b/data/Gootville/E52B-dynamicPP.xml deleted file mode 100644 index 4695ce0742b..00000000000 --- a/data/Gootville/E52B-dynamicPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E52C-dynamicMP.xml b/data/Gootville/E52C-dynamicMP.xml deleted file mode 100644 index d62423a7399..00000000000 --- a/data/Gootville/E52C-dynamicMP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E52D-dynamicMF.xml b/data/Gootville/E52D-dynamicMF.xml deleted file mode 100644 index 5219aa2982a..00000000000 --- a/data/Gootville/E52D-dynamicMF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E52E-dynamicPF.xml b/data/Gootville/E52E-dynamicPF.xml deleted file mode 100644 index 66e4c103cda..00000000000 --- a/data/Gootville/E52E-dynamicPF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E52F-dynamicFF.xml b/data/Gootville/E52F-dynamicFF.xml deleted file mode 100644 index 9632008cb34..00000000000 --- a/data/Gootville/E52F-dynamicFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E530-dynamicFFF.xml b/data/Gootville/E530-dynamicFFF.xml deleted file mode 100644 index dd3c702a6e4..00000000000 --- a/data/Gootville/E530-dynamicFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E531-dynamicFFFF.xml b/data/Gootville/E531-dynamicFFFF.xml deleted file mode 100644 index 0de0e5a1ae3..00000000000 --- a/data/Gootville/E531-dynamicFFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E532-dynamicFFFFF.xml b/data/Gootville/E532-dynamicFFFFF.xml deleted file mode 100644 index 3fbd977bc26..00000000000 --- a/data/Gootville/E532-dynamicFFFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E533-dynamicFFFFFF.xml b/data/Gootville/E533-dynamicFFFFFF.xml deleted file mode 100644 index a26e583740e..00000000000 --- a/data/Gootville/E533-dynamicFFFFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E534-dynamicFortePiano.xml b/data/Gootville/E534-dynamicFortePiano.xml deleted file mode 100644 index 892ee6449ec..00000000000 --- a/data/Gootville/E534-dynamicFortePiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E535-dynamicForzando.xml b/data/Gootville/E535-dynamicForzando.xml deleted file mode 100644 index a55d82d2bf8..00000000000 --- a/data/Gootville/E535-dynamicForzando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E536-dynamicSforzando1.xml b/data/Gootville/E536-dynamicSforzando1.xml deleted file mode 100644 index 9234b708d29..00000000000 --- a/data/Gootville/E536-dynamicSforzando1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E537-dynamicSforzandoPiano.xml b/data/Gootville/E537-dynamicSforzandoPiano.xml deleted file mode 100644 index 4aee5df5dab..00000000000 --- a/data/Gootville/E537-dynamicSforzandoPiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E538-dynamicSforzandoPianissimo.xml b/data/Gootville/E538-dynamicSforzandoPianissimo.xml deleted file mode 100644 index d199968bd91..00000000000 --- a/data/Gootville/E538-dynamicSforzandoPianissimo.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E539-dynamicSforzato.xml b/data/Gootville/E539-dynamicSforzato.xml deleted file mode 100644 index 25d660ef262..00000000000 --- a/data/Gootville/E539-dynamicSforzato.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E53A-dynamicSforzatoPiano.xml b/data/Gootville/E53A-dynamicSforzatoPiano.xml deleted file mode 100644 index 0d7dfaadeb0..00000000000 --- a/data/Gootville/E53A-dynamicSforzatoPiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E53B-dynamicSforzatoFF.xml b/data/Gootville/E53B-dynamicSforzatoFF.xml deleted file mode 100644 index cf2ac0ea483..00000000000 --- a/data/Gootville/E53B-dynamicSforzatoFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E53C-dynamicRinforzando1.xml b/data/Gootville/E53C-dynamicRinforzando1.xml deleted file mode 100644 index 9c5c8d24edb..00000000000 --- a/data/Gootville/E53C-dynamicRinforzando1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E53D-dynamicRinforzando2.xml b/data/Gootville/E53D-dynamicRinforzando2.xml deleted file mode 100644 index db288f60490..00000000000 --- a/data/Gootville/E53D-dynamicRinforzando2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E566-ornamentTrill.xml b/data/Gootville/E566-ornamentTrill.xml deleted file mode 100644 index 4156fe5c0d9..00000000000 --- a/data/Gootville/E566-ornamentTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E567-ornamentTurn.xml b/data/Gootville/E567-ornamentTurn.xml deleted file mode 100644 index eb7ba7652dd..00000000000 --- a/data/Gootville/E567-ornamentTurn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E568-ornamentTurnInverted.xml b/data/Gootville/E568-ornamentTurnInverted.xml deleted file mode 100644 index 8cdebf2b170..00000000000 --- a/data/Gootville/E568-ornamentTurnInverted.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E569-ornamentTurnSlash.xml b/data/Gootville/E569-ornamentTurnSlash.xml deleted file mode 100644 index f52c781c901..00000000000 --- a/data/Gootville/E569-ornamentTurnSlash.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E56C-ornamentShortTrill.xml b/data/Gootville/E56C-ornamentShortTrill.xml deleted file mode 100644 index f36d40b5303..00000000000 --- a/data/Gootville/E56C-ornamentShortTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E56D-ornamentMordent.xml b/data/Gootville/E56D-ornamentMordent.xml deleted file mode 100644 index 18c937e2bd1..00000000000 --- a/data/Gootville/E56D-ornamentMordent.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E56E-ornamentTremblement.xml b/data/Gootville/E56E-ornamentTremblement.xml deleted file mode 100644 index bb1684c3329..00000000000 --- a/data/Gootville/E56E-ornamentTremblement.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E59D-ornamentZigZagLineNoRightEnd.xml b/data/Gootville/E59D-ornamentZigZagLineNoRightEnd.xml deleted file mode 100644 index 83e954676ea..00000000000 --- a/data/Gootville/E59D-ornamentZigZagLineNoRightEnd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E59E-ornamentZigZagLineWithRightEnd.xml b/data/Gootville/E59E-ornamentZigZagLineWithRightEnd.xml deleted file mode 100644 index 20ee5452c39..00000000000 --- a/data/Gootville/E59E-ornamentZigZagLineWithRightEnd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E5B0-ornamentPrecompSlide.xml b/data/Gootville/E5B0-ornamentPrecompSlide.xml deleted file mode 100644 index a2e149fdbe7..00000000000 --- a/data/Gootville/E5B0-ornamentPrecompSlide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E5E5-brassMuteClosed.xml b/data/Gootville/E5E5-brassMuteClosed.xml deleted file mode 100644 index 110985795ec..00000000000 --- a/data/Gootville/E5E5-brassMuteClosed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E5E7-brassMuteOpen.xml b/data/Gootville/E5E7-brassMuteOpen.xml deleted file mode 100644 index 06a40662978..00000000000 --- a/data/Gootville/E5E7-brassMuteOpen.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E610-stringsDownBow.xml b/data/Gootville/E610-stringsDownBow.xml deleted file mode 100644 index 5a2b6e23ddb..00000000000 --- a/data/Gootville/E610-stringsDownBow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E611-stringsDownBowTurned.xml b/data/Gootville/E611-stringsDownBowTurned.xml deleted file mode 100644 index b447a88bf6a..00000000000 --- a/data/Gootville/E611-stringsDownBowTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E612-stringsUpBow.xml b/data/Gootville/E612-stringsUpBow.xml deleted file mode 100644 index fcec6a4291d..00000000000 --- a/data/Gootville/E612-stringsUpBow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E613-stringsUpBowTurned.xml b/data/Gootville/E613-stringsUpBowTurned.xml deleted file mode 100644 index f392140254e..00000000000 --- a/data/Gootville/E613-stringsUpBowTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E630-pluckedSnapPizzicatoBelow.xml b/data/Gootville/E630-pluckedSnapPizzicatoBelow.xml deleted file mode 100644 index b8b44df73b1..00000000000 --- a/data/Gootville/E630-pluckedSnapPizzicatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E631-pluckedSnapPizzicatoAbove.xml b/data/Gootville/E631-pluckedSnapPizzicatoAbove.xml deleted file mode 100644 index 6ab618bf70e..00000000000 --- a/data/Gootville/E631-pluckedSnapPizzicatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E650-keyboardPedalPed.xml b/data/Gootville/E650-keyboardPedalPed.xml deleted file mode 100644 index 95c9e92ae2c..00000000000 --- a/data/Gootville/E650-keyboardPedalPed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E651-keyboardPedalP.xml b/data/Gootville/E651-keyboardPedalP.xml deleted file mode 100644 index 8b0e79d3d6f..00000000000 --- a/data/Gootville/E651-keyboardPedalP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/E655-keyboardPedalUp.xml b/data/Gootville/E655-keyboardPedalUp.xml deleted file mode 100644 index bec9b49e739..00000000000 --- a/data/Gootville/E655-keyboardPedalUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/EAA4-wiggleTrill.xml b/data/Gootville/EAA4-wiggleTrill.xml deleted file mode 100644 index ca23b18113f..00000000000 --- a/data/Gootville/EAA4-wiggleTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/EAA9-wiggleArpeggiatoUp.xml b/data/Gootville/EAA9-wiggleArpeggiatoUp.xml deleted file mode 100644 index 4b9fca28bf2..00000000000 --- a/data/Gootville/EAA9-wiggleArpeggiatoUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/EAAA-wiggleArpeggiatoDown.xml b/data/Gootville/EAAA-wiggleArpeggiatoDown.xml deleted file mode 100644 index 65dadda1d3f..00000000000 --- a/data/Gootville/EAAA-wiggleArpeggiatoDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/EAAD-wiggleArpeggiatoUpArrow.xml b/data/Gootville/EAAD-wiggleArpeggiatoUpArrow.xml deleted file mode 100644 index 3d5469db3d9..00000000000 --- a/data/Gootville/EAAD-wiggleArpeggiatoUpArrow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/EAAE-wiggleArpeggiatoDownArrow.xml b/data/Gootville/EAAE-wiggleArpeggiatoDownArrow.xml deleted file mode 100644 index 9c3b4238cdf..00000000000 --- a/data/Gootville/EAAE-wiggleArpeggiatoDownArrow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Gootville/EAAF-wiggleGlissando.xml b/data/Gootville/EAAF-wiggleGlissando.xml deleted file mode 100644 index 482f9a26ac4..00000000000 --- a/data/Gootville/EAAF-wiggleGlissando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig.xml b/data/Leipzig.xml deleted file mode 100644 index a5bdc56d21e..00000000000 --- a/data/Leipzig.xml +++ /dev/null @@ -1,573 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/Leipzig/E000-brace.xml b/data/Leipzig/E000-brace.xml deleted file mode 100644 index d561b41803c..00000000000 --- a/data/Leipzig/E000-brace.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E003-bracketTop.xml b/data/Leipzig/E003-bracketTop.xml deleted file mode 100644 index d82c1d1c3b7..00000000000 --- a/data/Leipzig/E003-bracketTop.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E004-bracketBottom.xml b/data/Leipzig/E004-bracketBottom.xml deleted file mode 100644 index d1e019016af..00000000000 --- a/data/Leipzig/E004-bracketBottom.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E043-repeatDots.xml b/data/Leipzig/E043-repeatDots.xml deleted file mode 100644 index 02d0492fbef..00000000000 --- a/data/Leipzig/E043-repeatDots.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E044-repeatDot.xml b/data/Leipzig/E044-repeatDot.xml deleted file mode 100644 index 0c439154146..00000000000 --- a/data/Leipzig/E044-repeatDot.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E045-dalSegno.xml b/data/Leipzig/E045-dalSegno.xml deleted file mode 100644 index 3072c82ef04..00000000000 --- a/data/Leipzig/E045-dalSegno.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E046-daCapo.xml b/data/Leipzig/E046-daCapo.xml deleted file mode 100644 index 04fb76adc5b..00000000000 --- a/data/Leipzig/E046-daCapo.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E047-segno.xml b/data/Leipzig/E047-segno.xml deleted file mode 100644 index d0570b4e705..00000000000 --- a/data/Leipzig/E047-segno.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E048-coda.xml b/data/Leipzig/E048-coda.xml deleted file mode 100644 index 556b420171f..00000000000 --- a/data/Leipzig/E048-coda.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E049-codaSquare.xml b/data/Leipzig/E049-codaSquare.xml deleted file mode 100644 index 943738ef7e2..00000000000 --- a/data/Leipzig/E049-codaSquare.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E04B-segnoSerpent2.xml b/data/Leipzig/E04B-segnoSerpent2.xml deleted file mode 100644 index e9327f22306..00000000000 --- a/data/Leipzig/E04B-segnoSerpent2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E050-gClef.xml b/data/Leipzig/E050-gClef.xml deleted file mode 100644 index 10d5248a61c..00000000000 --- a/data/Leipzig/E050-gClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E051-gClef15mb.xml b/data/Leipzig/E051-gClef15mb.xml deleted file mode 100644 index bc706ee17b9..00000000000 --- a/data/Leipzig/E051-gClef15mb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E052-gClef8vb.xml b/data/Leipzig/E052-gClef8vb.xml deleted file mode 100644 index d1f2a9bcd9b..00000000000 --- a/data/Leipzig/E052-gClef8vb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E053-gClef8va.xml b/data/Leipzig/E053-gClef8va.xml deleted file mode 100644 index 89397ec048b..00000000000 --- a/data/Leipzig/E053-gClef8va.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E054-gClef15ma.xml b/data/Leipzig/E054-gClef15ma.xml deleted file mode 100644 index 1774e8192d2..00000000000 --- a/data/Leipzig/E054-gClef15ma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E055-gClef8vbOld.xml b/data/Leipzig/E055-gClef8vbOld.xml deleted file mode 100644 index 36acad0a37b..00000000000 --- a/data/Leipzig/E055-gClef8vbOld.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E056-gClef8vbCClef.xml b/data/Leipzig/E056-gClef8vbCClef.xml deleted file mode 100644 index 58a9eefe075..00000000000 --- a/data/Leipzig/E056-gClef8vbCClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E05C-cClef.xml b/data/Leipzig/E05C-cClef.xml deleted file mode 100644 index 908bc1c6e44..00000000000 --- a/data/Leipzig/E05C-cClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E05D-cClef8vb.xml b/data/Leipzig/E05D-cClef8vb.xml deleted file mode 100644 index 1ee4dc8b946..00000000000 --- a/data/Leipzig/E05D-cClef8vb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E062-fClef.xml b/data/Leipzig/E062-fClef.xml deleted file mode 100644 index 9ccc956cb30..00000000000 --- a/data/Leipzig/E062-fClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E063-fClef15mb.xml b/data/Leipzig/E063-fClef15mb.xml deleted file mode 100644 index 6b17453a41c..00000000000 --- a/data/Leipzig/E063-fClef15mb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E064-fClef8vb.xml b/data/Leipzig/E064-fClef8vb.xml deleted file mode 100644 index fd12e856955..00000000000 --- a/data/Leipzig/E064-fClef8vb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E065-fClef8va.xml b/data/Leipzig/E065-fClef8va.xml deleted file mode 100644 index e36533a3555..00000000000 --- a/data/Leipzig/E065-fClef8va.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E066-fClef15ma.xml b/data/Leipzig/E066-fClef15ma.xml deleted file mode 100644 index 606970a24d6..00000000000 --- a/data/Leipzig/E066-fClef15ma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E069-unpitchedPercussionClef1.xml b/data/Leipzig/E069-unpitchedPercussionClef1.xml deleted file mode 100644 index b391060e5eb..00000000000 --- a/data/Leipzig/E069-unpitchedPercussionClef1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E06A-unpitchedPercussionClef2.xml b/data/Leipzig/E06A-unpitchedPercussionClef2.xml deleted file mode 100644 index 9d373fbb1a0..00000000000 --- a/data/Leipzig/E06A-unpitchedPercussionClef2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E073-gClefReversed.xml b/data/Leipzig/E073-gClefReversed.xml deleted file mode 100644 index 92790ce14f3..00000000000 --- a/data/Leipzig/E073-gClefReversed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E074-gClefTurned.xml b/data/Leipzig/E074-gClefTurned.xml deleted file mode 100644 index 47fa348c661..00000000000 --- a/data/Leipzig/E074-gClefTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E075-cClefReversed.xml b/data/Leipzig/E075-cClefReversed.xml deleted file mode 100644 index 619b3a6a151..00000000000 --- a/data/Leipzig/E075-cClefReversed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E076-fClefReversed.xml b/data/Leipzig/E076-fClefReversed.xml deleted file mode 100644 index dd735e8cc9a..00000000000 --- a/data/Leipzig/E076-fClefReversed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E077-fClefTurned.xml b/data/Leipzig/E077-fClefTurned.xml deleted file mode 100644 index 15b04ea14a9..00000000000 --- a/data/Leipzig/E077-fClefTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E080-timeSig0.xml b/data/Leipzig/E080-timeSig0.xml deleted file mode 100644 index df277e4fee9..00000000000 --- a/data/Leipzig/E080-timeSig0.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E081-timeSig1.xml b/data/Leipzig/E081-timeSig1.xml deleted file mode 100644 index c3a29ecfaea..00000000000 --- a/data/Leipzig/E081-timeSig1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E082-timeSig2.xml b/data/Leipzig/E082-timeSig2.xml deleted file mode 100644 index eb2c911a00e..00000000000 --- a/data/Leipzig/E082-timeSig2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E083-timeSig3.xml b/data/Leipzig/E083-timeSig3.xml deleted file mode 100644 index b882754c809..00000000000 --- a/data/Leipzig/E083-timeSig3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E084-timeSig4.xml b/data/Leipzig/E084-timeSig4.xml deleted file mode 100644 index 11b63c182a8..00000000000 --- a/data/Leipzig/E084-timeSig4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E085-timeSig5.xml b/data/Leipzig/E085-timeSig5.xml deleted file mode 100644 index 70182d50740..00000000000 --- a/data/Leipzig/E085-timeSig5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E086-timeSig6.xml b/data/Leipzig/E086-timeSig6.xml deleted file mode 100644 index e5c77c5c360..00000000000 --- a/data/Leipzig/E086-timeSig6.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E087-timeSig7.xml b/data/Leipzig/E087-timeSig7.xml deleted file mode 100644 index 182a2898b7f..00000000000 --- a/data/Leipzig/E087-timeSig7.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E088-timeSig8.xml b/data/Leipzig/E088-timeSig8.xml deleted file mode 100644 index 1a0cf0e343e..00000000000 --- a/data/Leipzig/E088-timeSig8.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E089-timeSig9.xml b/data/Leipzig/E089-timeSig9.xml deleted file mode 100644 index daccf9ff50f..00000000000 --- a/data/Leipzig/E089-timeSig9.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E08A-timeSigCommon.xml b/data/Leipzig/E08A-timeSigCommon.xml deleted file mode 100644 index 341d84baa73..00000000000 --- a/data/Leipzig/E08A-timeSigCommon.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E08B-timeSigCutCommon.xml b/data/Leipzig/E08B-timeSigCutCommon.xml deleted file mode 100644 index c542cf8903d..00000000000 --- a/data/Leipzig/E08B-timeSigCutCommon.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E08C-timeSigPlus.xml b/data/Leipzig/E08C-timeSigPlus.xml deleted file mode 100644 index fc5ee4e7bf7..00000000000 --- a/data/Leipzig/E08C-timeSigPlus.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E08D-timeSigPlusSmall.xml b/data/Leipzig/E08D-timeSigPlusSmall.xml deleted file mode 100644 index bdc63925d15..00000000000 --- a/data/Leipzig/E08D-timeSigPlusSmall.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E08E-timeSigFractionalSlash.xml b/data/Leipzig/E08E-timeSigFractionalSlash.xml deleted file mode 100644 index cf4e5c2447d..00000000000 --- a/data/Leipzig/E08E-timeSigFractionalSlash.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E08F-timeSigEquals.xml b/data/Leipzig/E08F-timeSigEquals.xml deleted file mode 100644 index ced9691dd9b..00000000000 --- a/data/Leipzig/E08F-timeSigEquals.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E090-timeSigMinus.xml b/data/Leipzig/E090-timeSigMinus.xml deleted file mode 100644 index d0efad75833..00000000000 --- a/data/Leipzig/E090-timeSigMinus.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E091-timeSigMultiply.xml b/data/Leipzig/E091-timeSigMultiply.xml deleted file mode 100644 index 4d1067e75b5..00000000000 --- a/data/Leipzig/E091-timeSigMultiply.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E092-timeSigParensLeftSmall.xml b/data/Leipzig/E092-timeSigParensLeftSmall.xml deleted file mode 100644 index 916cde11d42..00000000000 --- a/data/Leipzig/E092-timeSigParensLeftSmall.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E093-timeSigParensRightSmall.xml b/data/Leipzig/E093-timeSigParensRightSmall.xml deleted file mode 100644 index 1635c8efd12..00000000000 --- a/data/Leipzig/E093-timeSigParensRightSmall.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E094-timeSigParensLeft.xml b/data/Leipzig/E094-timeSigParensLeft.xml deleted file mode 100644 index 7d33b31e2ae..00000000000 --- a/data/Leipzig/E094-timeSigParensLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E095-timeSigParensRight.xml b/data/Leipzig/E095-timeSigParensRight.xml deleted file mode 100644 index 77062ef6137..00000000000 --- a/data/Leipzig/E095-timeSigParensRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0A0-noteheadDoubleWhole.xml b/data/Leipzig/E0A0-noteheadDoubleWhole.xml deleted file mode 100644 index 4bbba567745..00000000000 --- a/data/Leipzig/E0A0-noteheadDoubleWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0A1-noteheadDoubleWholeSquare.xml b/data/Leipzig/E0A1-noteheadDoubleWholeSquare.xml deleted file mode 100644 index 598c3329296..00000000000 --- a/data/Leipzig/E0A1-noteheadDoubleWholeSquare.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0A2-noteheadWhole.xml b/data/Leipzig/E0A2-noteheadWhole.xml deleted file mode 100644 index 67327161079..00000000000 --- a/data/Leipzig/E0A2-noteheadWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0A3-noteheadHalf.xml b/data/Leipzig/E0A3-noteheadHalf.xml deleted file mode 100644 index 1ae9fd4f5ca..00000000000 --- a/data/Leipzig/E0A3-noteheadHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0A4-noteheadBlack.xml b/data/Leipzig/E0A4-noteheadBlack.xml deleted file mode 100644 index e0640dff15e..00000000000 --- a/data/Leipzig/E0A4-noteheadBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0A5-noteheadNull.xml b/data/Leipzig/E0A5-noteheadNull.xml deleted file mode 100644 index 1445fb5f59a..00000000000 --- a/data/Leipzig/E0A5-noteheadNull.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0A9-noteheadXBlack.xml b/data/Leipzig/E0A9-noteheadXBlack.xml deleted file mode 100644 index 552d775249b..00000000000 --- a/data/Leipzig/E0A9-noteheadXBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0AF-noteheadPlusBlack.xml b/data/Leipzig/E0AF-noteheadPlusBlack.xml deleted file mode 100644 index 87eb34f9606..00000000000 --- a/data/Leipzig/E0AF-noteheadPlusBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0B5-noteheadWholeWithX.xml b/data/Leipzig/E0B5-noteheadWholeWithX.xml deleted file mode 100644 index c0b12a05ece..00000000000 --- a/data/Leipzig/E0B5-noteheadWholeWithX.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0B6-noteheadHalfWithX.xml b/data/Leipzig/E0B6-noteheadHalfWithX.xml deleted file mode 100644 index 8554af1a77b..00000000000 --- a/data/Leipzig/E0B6-noteheadHalfWithX.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0B7-noteheadVoidWithX.xml b/data/Leipzig/E0B7-noteheadVoidWithX.xml deleted file mode 100644 index c9df6ecb264..00000000000 --- a/data/Leipzig/E0B7-noteheadVoidWithX.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0D9-noteheadDiamondHalf.xml b/data/Leipzig/E0D9-noteheadDiamondHalf.xml deleted file mode 100644 index f82d553032d..00000000000 --- a/data/Leipzig/E0D9-noteheadDiamondHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0DA-noteheadDiamondHalfWide.xml b/data/Leipzig/E0DA-noteheadDiamondHalfWide.xml deleted file mode 100644 index 49648bb8f98..00000000000 --- a/data/Leipzig/E0DA-noteheadDiamondHalfWide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0DB-noteheadDiamondBlack.xml b/data/Leipzig/E0DB-noteheadDiamondBlack.xml deleted file mode 100644 index ab38acb56bf..00000000000 --- a/data/Leipzig/E0DB-noteheadDiamondBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0DC-noteheadDiamondBlackWide.xml b/data/Leipzig/E0DC-noteheadDiamondBlackWide.xml deleted file mode 100644 index e4edc29556f..00000000000 --- a/data/Leipzig/E0DC-noteheadDiamondBlackWide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0DD-noteheadDiamondWhite.xml b/data/Leipzig/E0DD-noteheadDiamondWhite.xml deleted file mode 100644 index 05bd41d8656..00000000000 --- a/data/Leipzig/E0DD-noteheadDiamondWhite.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0DE-noteheadDiamondWhiteWide.xml b/data/Leipzig/E0DE-noteheadDiamondWhiteWide.xml deleted file mode 100644 index a95113ba128..00000000000 --- a/data/Leipzig/E0DE-noteheadDiamondWhiteWide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0F5-noteheadParenthesisLeft.xml b/data/Leipzig/E0F5-noteheadParenthesisLeft.xml deleted file mode 100644 index 21aaba48ec8..00000000000 --- a/data/Leipzig/E0F5-noteheadParenthesisLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0F6-noteheadParenthesisRight.xml b/data/Leipzig/E0F6-noteheadParenthesisRight.xml deleted file mode 100644 index 9ef0a95e91b..00000000000 --- a/data/Leipzig/E0F6-noteheadParenthesisRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E0FA-noteheadWholeFilled.xml b/data/Leipzig/E0FA-noteheadWholeFilled.xml deleted file mode 100644 index abace349678..00000000000 --- a/data/Leipzig/E0FA-noteheadWholeFilled.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E101-noteheadSlashHorizontalEnds.xml b/data/Leipzig/E101-noteheadSlashHorizontalEnds.xml deleted file mode 100644 index 416bebac135..00000000000 --- a/data/Leipzig/E101-noteheadSlashHorizontalEnds.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E102-noteheadSlashWhiteWhole.xml b/data/Leipzig/E102-noteheadSlashWhiteWhole.xml deleted file mode 100644 index afd1468a820..00000000000 --- a/data/Leipzig/E102-noteheadSlashWhiteWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E103-noteheadSlashWhiteHalf.xml b/data/Leipzig/E103-noteheadSlashWhiteHalf.xml deleted file mode 100644 index 15952659f2d..00000000000 --- a/data/Leipzig/E103-noteheadSlashWhiteHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E220-tremolo1.xml b/data/Leipzig/E220-tremolo1.xml deleted file mode 100644 index 7c32632a4ab..00000000000 --- a/data/Leipzig/E220-tremolo1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E221-tremolo2.xml b/data/Leipzig/E221-tremolo2.xml deleted file mode 100644 index 96f48297e85..00000000000 --- a/data/Leipzig/E221-tremolo2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E222-tremolo3.xml b/data/Leipzig/E222-tremolo3.xml deleted file mode 100644 index 2f510609ae1..00000000000 --- a/data/Leipzig/E222-tremolo3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E223-tremolo4.xml b/data/Leipzig/E223-tremolo4.xml deleted file mode 100644 index fb97ddfcdc2..00000000000 --- a/data/Leipzig/E223-tremolo4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E224-tremolo5.xml b/data/Leipzig/E224-tremolo5.xml deleted file mode 100644 index 2b1e17307c5..00000000000 --- a/data/Leipzig/E224-tremolo5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E22A-buzzRoll.xml b/data/Leipzig/E22A-buzzRoll.xml deleted file mode 100644 index 6694908410e..00000000000 --- a/data/Leipzig/E22A-buzzRoll.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E240-flag8thUp.xml b/data/Leipzig/E240-flag8thUp.xml deleted file mode 100644 index 62a189d8a41..00000000000 --- a/data/Leipzig/E240-flag8thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E241-flag8thDown.xml b/data/Leipzig/E241-flag8thDown.xml deleted file mode 100644 index 7c321810462..00000000000 --- a/data/Leipzig/E241-flag8thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E242-flag16thUp.xml b/data/Leipzig/E242-flag16thUp.xml deleted file mode 100644 index 784a6e8242c..00000000000 --- a/data/Leipzig/E242-flag16thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E243-flag16thDown.xml b/data/Leipzig/E243-flag16thDown.xml deleted file mode 100644 index 1d89e4476af..00000000000 --- a/data/Leipzig/E243-flag16thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E244-flag32ndUp.xml b/data/Leipzig/E244-flag32ndUp.xml deleted file mode 100644 index baa459327ca..00000000000 --- a/data/Leipzig/E244-flag32ndUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E245-flag32ndDown.xml b/data/Leipzig/E245-flag32ndDown.xml deleted file mode 100644 index b6148da8869..00000000000 --- a/data/Leipzig/E245-flag32ndDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E246-flag64thUp.xml b/data/Leipzig/E246-flag64thUp.xml deleted file mode 100644 index 4ca2862dd80..00000000000 --- a/data/Leipzig/E246-flag64thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E247-flag64thDown.xml b/data/Leipzig/E247-flag64thDown.xml deleted file mode 100644 index a51e297f7a3..00000000000 --- a/data/Leipzig/E247-flag64thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E248-flag128thUp.xml b/data/Leipzig/E248-flag128thUp.xml deleted file mode 100644 index 82429c855d9..00000000000 --- a/data/Leipzig/E248-flag128thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E249-flag128thDown.xml b/data/Leipzig/E249-flag128thDown.xml deleted file mode 100644 index 5e24e108c8d..00000000000 --- a/data/Leipzig/E249-flag128thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E24A-flag256thUp.xml b/data/Leipzig/E24A-flag256thUp.xml deleted file mode 100644 index 2c38724fd27..00000000000 --- a/data/Leipzig/E24A-flag256thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E24B-flag256thDown.xml b/data/Leipzig/E24B-flag256thDown.xml deleted file mode 100644 index 333314435cd..00000000000 --- a/data/Leipzig/E24B-flag256thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E24C-flag512thUp.xml b/data/Leipzig/E24C-flag512thUp.xml deleted file mode 100644 index 60e9c6d3cac..00000000000 --- a/data/Leipzig/E24C-flag512thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E24D-flag512thDown.xml b/data/Leipzig/E24D-flag512thDown.xml deleted file mode 100644 index 724eec4be58..00000000000 --- a/data/Leipzig/E24D-flag512thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E24E-flag1024thUp.xml b/data/Leipzig/E24E-flag1024thUp.xml deleted file mode 100644 index def923330e2..00000000000 --- a/data/Leipzig/E24E-flag1024thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E24F-flag1024thDown.xml b/data/Leipzig/E24F-flag1024thDown.xml deleted file mode 100644 index 0e32ee81ced..00000000000 --- a/data/Leipzig/E24F-flag1024thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E260-accidentalFlat.xml b/data/Leipzig/E260-accidentalFlat.xml deleted file mode 100644 index 06e57abe91e..00000000000 --- a/data/Leipzig/E260-accidentalFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E261-accidentalNatural.xml b/data/Leipzig/E261-accidentalNatural.xml deleted file mode 100644 index af41f558fe2..00000000000 --- a/data/Leipzig/E261-accidentalNatural.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E262-accidentalSharp.xml b/data/Leipzig/E262-accidentalSharp.xml deleted file mode 100644 index 728cc2c2d86..00000000000 --- a/data/Leipzig/E262-accidentalSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E263-accidentalDoubleSharp.xml b/data/Leipzig/E263-accidentalDoubleSharp.xml deleted file mode 100644 index 72a661cf645..00000000000 --- a/data/Leipzig/E263-accidentalDoubleSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E264-accidentalDoubleFlat.xml b/data/Leipzig/E264-accidentalDoubleFlat.xml deleted file mode 100644 index 9c370820ae4..00000000000 --- a/data/Leipzig/E264-accidentalDoubleFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E265-accidentalTripleSharp.xml b/data/Leipzig/E265-accidentalTripleSharp.xml deleted file mode 100644 index 8d58c86843e..00000000000 --- a/data/Leipzig/E265-accidentalTripleSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E266-accidentalTripleFlat.xml b/data/Leipzig/E266-accidentalTripleFlat.xml deleted file mode 100644 index e02597d70a5..00000000000 --- a/data/Leipzig/E266-accidentalTripleFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E267-accidentalNaturalFlat.xml b/data/Leipzig/E267-accidentalNaturalFlat.xml deleted file mode 100644 index f0d6ac46539..00000000000 --- a/data/Leipzig/E267-accidentalNaturalFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E268-accidentalNaturalSharp.xml b/data/Leipzig/E268-accidentalNaturalSharp.xml deleted file mode 100644 index 4496a2de357..00000000000 --- a/data/Leipzig/E268-accidentalNaturalSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E269-accidentalSharpSharp.xml b/data/Leipzig/E269-accidentalSharpSharp.xml deleted file mode 100644 index 76b899b5604..00000000000 --- a/data/Leipzig/E269-accidentalSharpSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E26A-accidentalParensLeft.xml b/data/Leipzig/E26A-accidentalParensLeft.xml deleted file mode 100644 index 55cbfd1fa21..00000000000 --- a/data/Leipzig/E26A-accidentalParensLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E26B-accidentalParensRight.xml b/data/Leipzig/E26B-accidentalParensRight.xml deleted file mode 100644 index 87857f71071..00000000000 --- a/data/Leipzig/E26B-accidentalParensRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E26C-accidentalBracketLeft.xml b/data/Leipzig/E26C-accidentalBracketLeft.xml deleted file mode 100644 index 7eafefccbe4..00000000000 --- a/data/Leipzig/E26C-accidentalBracketLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E26D-accidentalBracketRight.xml b/data/Leipzig/E26D-accidentalBracketRight.xml deleted file mode 100644 index 515c7ea63f0..00000000000 --- a/data/Leipzig/E26D-accidentalBracketRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E270-accidentalQuarterToneFlatArrowUp.xml b/data/Leipzig/E270-accidentalQuarterToneFlatArrowUp.xml deleted file mode 100644 index 0721998dcd6..00000000000 --- a/data/Leipzig/E270-accidentalQuarterToneFlatArrowUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E271-accidentalThreeQuarterTonesFlatArrowDown.xml b/data/Leipzig/E271-accidentalThreeQuarterTonesFlatArrowDown.xml deleted file mode 100644 index 82b9b845d3c..00000000000 --- a/data/Leipzig/E271-accidentalThreeQuarterTonesFlatArrowDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E272-accidentalQuarterToneSharpNaturalArrowUp.xml b/data/Leipzig/E272-accidentalQuarterToneSharpNaturalArrowUp.xml deleted file mode 100644 index e38c368daa2..00000000000 --- a/data/Leipzig/E272-accidentalQuarterToneSharpNaturalArrowUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E273-accidentalQuarterToneFlatNaturalArrowDown.xml b/data/Leipzig/E273-accidentalQuarterToneFlatNaturalArrowDown.xml deleted file mode 100644 index b121182e803..00000000000 --- a/data/Leipzig/E273-accidentalQuarterToneFlatNaturalArrowDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E274-accidentalThreeQuarterTonesSharpArrowUp.xml b/data/Leipzig/E274-accidentalThreeQuarterTonesSharpArrowUp.xml deleted file mode 100644 index daa6728bb1b..00000000000 --- a/data/Leipzig/E274-accidentalThreeQuarterTonesSharpArrowUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E275-accidentalQuarterToneSharpArrowDown.xml b/data/Leipzig/E275-accidentalQuarterToneSharpArrowDown.xml deleted file mode 100644 index 9dee676ec24..00000000000 --- a/data/Leipzig/E275-accidentalQuarterToneSharpArrowDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E280-accidentalQuarterToneFlatStein.xml b/data/Leipzig/E280-accidentalQuarterToneFlatStein.xml deleted file mode 100644 index 72ff658da2c..00000000000 --- a/data/Leipzig/E280-accidentalQuarterToneFlatStein.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E281-accidentalThreeQuarterTonesFlatZimmermann.xml b/data/Leipzig/E281-accidentalThreeQuarterTonesFlatZimmermann.xml deleted file mode 100644 index b5cff7e8acf..00000000000 --- a/data/Leipzig/E281-accidentalThreeQuarterTonesFlatZimmermann.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E282-accidentalQuarterToneSharpStein.xml b/data/Leipzig/E282-accidentalQuarterToneSharpStein.xml deleted file mode 100644 index 490b356faa7..00000000000 --- a/data/Leipzig/E282-accidentalQuarterToneSharpStein.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E283-accidentalThreeQuarterTonesSharpStein.xml b/data/Leipzig/E283-accidentalThreeQuarterTonesSharpStein.xml deleted file mode 100644 index faf03525e7f..00000000000 --- a/data/Leipzig/E283-accidentalThreeQuarterTonesSharpStein.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E440-accidentalBuyukMucennebFlat.xml b/data/Leipzig/E440-accidentalBuyukMucennebFlat.xml deleted file mode 100644 index ae7e6b4ef10..00000000000 --- a/data/Leipzig/E440-accidentalBuyukMucennebFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E441-accidentalKucukMucennebFlat.xml b/data/Leipzig/E441-accidentalKucukMucennebFlat.xml deleted file mode 100644 index 0cbd046cccf..00000000000 --- a/data/Leipzig/E441-accidentalKucukMucennebFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E442-accidentalBakiyeFlat.xml b/data/Leipzig/E442-accidentalBakiyeFlat.xml deleted file mode 100644 index ee44327f682..00000000000 --- a/data/Leipzig/E442-accidentalBakiyeFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E443-accidentalKomaFlat.xml b/data/Leipzig/E443-accidentalKomaFlat.xml deleted file mode 100644 index 69c745a95ae..00000000000 --- a/data/Leipzig/E443-accidentalKomaFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E444-accidentalKomaSharp.xml b/data/Leipzig/E444-accidentalKomaSharp.xml deleted file mode 100644 index a5e54bbcd34..00000000000 --- a/data/Leipzig/E444-accidentalKomaSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E445-accidentalBakiyeSharp.xml b/data/Leipzig/E445-accidentalBakiyeSharp.xml deleted file mode 100644 index 89a0a3f5f79..00000000000 --- a/data/Leipzig/E445-accidentalBakiyeSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E446-accidentalKucukMucennebSharp.xml b/data/Leipzig/E446-accidentalKucukMucennebSharp.xml deleted file mode 100644 index a5287d38d16..00000000000 --- a/data/Leipzig/E446-accidentalKucukMucennebSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E447-accidentalBuyukMucennebSharp.xml b/data/Leipzig/E447-accidentalBuyukMucennebSharp.xml deleted file mode 100644 index db210d74847..00000000000 --- a/data/Leipzig/E447-accidentalBuyukMucennebSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4A0-articAccentAbove.xml b/data/Leipzig/E4A0-articAccentAbove.xml deleted file mode 100644 index afcdba6200b..00000000000 --- a/data/Leipzig/E4A0-articAccentAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4A1-articAccentBelow.xml b/data/Leipzig/E4A1-articAccentBelow.xml deleted file mode 100644 index 5425d8a5ff7..00000000000 --- a/data/Leipzig/E4A1-articAccentBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4A2-articStaccatoAbove.xml b/data/Leipzig/E4A2-articStaccatoAbove.xml deleted file mode 100644 index 8b92c76c55d..00000000000 --- a/data/Leipzig/E4A2-articStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4A3-articStaccatoBelow.xml b/data/Leipzig/E4A3-articStaccatoBelow.xml deleted file mode 100644 index 88d61533a3d..00000000000 --- a/data/Leipzig/E4A3-articStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4A4-articTenutoAbove.xml b/data/Leipzig/E4A4-articTenutoAbove.xml deleted file mode 100644 index e070604ee5b..00000000000 --- a/data/Leipzig/E4A4-articTenutoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4A5-articTenutoBelow.xml b/data/Leipzig/E4A5-articTenutoBelow.xml deleted file mode 100644 index edbf982d1a4..00000000000 --- a/data/Leipzig/E4A5-articTenutoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4A6-articStaccatissimoAbove.xml b/data/Leipzig/E4A6-articStaccatissimoAbove.xml deleted file mode 100644 index f710bfde479..00000000000 --- a/data/Leipzig/E4A6-articStaccatissimoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4A7-articStaccatissimoBelow.xml b/data/Leipzig/E4A7-articStaccatissimoBelow.xml deleted file mode 100644 index fe80a62cf48..00000000000 --- a/data/Leipzig/E4A7-articStaccatissimoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4A8-articStaccatissimoWedgeAbove.xml b/data/Leipzig/E4A8-articStaccatissimoWedgeAbove.xml deleted file mode 100644 index b5db6aa2696..00000000000 --- a/data/Leipzig/E4A8-articStaccatissimoWedgeAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4A9-articStaccatissimoWedgeBelow.xml b/data/Leipzig/E4A9-articStaccatissimoWedgeBelow.xml deleted file mode 100644 index 5c22cd11ac5..00000000000 --- a/data/Leipzig/E4A9-articStaccatissimoWedgeBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4AA-articStaccatissimoStrokeAbove.xml b/data/Leipzig/E4AA-articStaccatissimoStrokeAbove.xml deleted file mode 100644 index ecc36b670cd..00000000000 --- a/data/Leipzig/E4AA-articStaccatissimoStrokeAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4AB-articStaccatissimoStrokeBelow.xml b/data/Leipzig/E4AB-articStaccatissimoStrokeBelow.xml deleted file mode 100644 index bf320c1ed4c..00000000000 --- a/data/Leipzig/E4AB-articStaccatissimoStrokeBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4AC-articMarcatoAbove.xml b/data/Leipzig/E4AC-articMarcatoAbove.xml deleted file mode 100644 index 5ac0a419f8c..00000000000 --- a/data/Leipzig/E4AC-articMarcatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4AD-articMarcatoBelow.xml b/data/Leipzig/E4AD-articMarcatoBelow.xml deleted file mode 100644 index 316c8423d1c..00000000000 --- a/data/Leipzig/E4AD-articMarcatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4AE-articMarcatoStaccatoAbove.xml b/data/Leipzig/E4AE-articMarcatoStaccatoAbove.xml deleted file mode 100644 index f692e0697f8..00000000000 --- a/data/Leipzig/E4AE-articMarcatoStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4AF-articMarcatoStaccatoBelow.xml b/data/Leipzig/E4AF-articMarcatoStaccatoBelow.xml deleted file mode 100644 index 6d18b91ff05..00000000000 --- a/data/Leipzig/E4AF-articMarcatoStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4B0-articAccentStaccatoAbove.xml b/data/Leipzig/E4B0-articAccentStaccatoAbove.xml deleted file mode 100644 index c95361530e3..00000000000 --- a/data/Leipzig/E4B0-articAccentStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4B1-articAccentStaccatoBelow.xml b/data/Leipzig/E4B1-articAccentStaccatoBelow.xml deleted file mode 100644 index 5f4a3e5ed57..00000000000 --- a/data/Leipzig/E4B1-articAccentStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4B2-articTenutoStaccatoAbove.xml b/data/Leipzig/E4B2-articTenutoStaccatoAbove.xml deleted file mode 100644 index 8a8a2e8906c..00000000000 --- a/data/Leipzig/E4B2-articTenutoStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4B3-articTenutoStaccatoBelow.xml b/data/Leipzig/E4B3-articTenutoStaccatoBelow.xml deleted file mode 100644 index a0cf617363f..00000000000 --- a/data/Leipzig/E4B3-articTenutoStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4B4-articTenutoAccentAbove.xml b/data/Leipzig/E4B4-articTenutoAccentAbove.xml deleted file mode 100644 index 10fed7b8ffd..00000000000 --- a/data/Leipzig/E4B4-articTenutoAccentAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4B5-articTenutoAccentBelow.xml b/data/Leipzig/E4B5-articTenutoAccentBelow.xml deleted file mode 100644 index 63a6371fd51..00000000000 --- a/data/Leipzig/E4B5-articTenutoAccentBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4B6-articStressAbove.xml b/data/Leipzig/E4B6-articStressAbove.xml deleted file mode 100644 index 2225583a232..00000000000 --- a/data/Leipzig/E4B6-articStressAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4B7-articStressBelow.xml b/data/Leipzig/E4B7-articStressBelow.xml deleted file mode 100644 index 01354c10935..00000000000 --- a/data/Leipzig/E4B7-articStressBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4B8-articUnstressAbove.xml b/data/Leipzig/E4B8-articUnstressAbove.xml deleted file mode 100644 index 1fda7702a64..00000000000 --- a/data/Leipzig/E4B8-articUnstressAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4B9-articUnstressBelow.xml b/data/Leipzig/E4B9-articUnstressBelow.xml deleted file mode 100644 index a946ce2d603..00000000000 --- a/data/Leipzig/E4B9-articUnstressBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4BA-articLaissezVibrerAbove.xml b/data/Leipzig/E4BA-articLaissezVibrerAbove.xml deleted file mode 100644 index b522089a123..00000000000 --- a/data/Leipzig/E4BA-articLaissezVibrerAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4BB-articLaissezVibrerBelow.xml b/data/Leipzig/E4BB-articLaissezVibrerBelow.xml deleted file mode 100644 index 8c1de3cfe79..00000000000 --- a/data/Leipzig/E4BB-articLaissezVibrerBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4BC-articMarcatoTenutoAbove.xml b/data/Leipzig/E4BC-articMarcatoTenutoAbove.xml deleted file mode 100644 index 5086fcb8c97..00000000000 --- a/data/Leipzig/E4BC-articMarcatoTenutoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4BD-articMarcatoTenutoBelow.xml b/data/Leipzig/E4BD-articMarcatoTenutoBelow.xml deleted file mode 100644 index 365c9f53f08..00000000000 --- a/data/Leipzig/E4BD-articMarcatoTenutoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4C0-fermataAbove.xml b/data/Leipzig/E4C0-fermataAbove.xml deleted file mode 100644 index 720b8e210aa..00000000000 --- a/data/Leipzig/E4C0-fermataAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4C1-fermataBelow.xml b/data/Leipzig/E4C1-fermataBelow.xml deleted file mode 100644 index 93f793975ba..00000000000 --- a/data/Leipzig/E4C1-fermataBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4C2-fermataVeryShortAbove.xml b/data/Leipzig/E4C2-fermataVeryShortAbove.xml deleted file mode 100644 index 410b5e02518..00000000000 --- a/data/Leipzig/E4C2-fermataVeryShortAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4C3-fermataVeryShortBelow.xml b/data/Leipzig/E4C3-fermataVeryShortBelow.xml deleted file mode 100644 index 4f2b00db8bc..00000000000 --- a/data/Leipzig/E4C3-fermataVeryShortBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4C4-fermataShortAbove.xml b/data/Leipzig/E4C4-fermataShortAbove.xml deleted file mode 100644 index 8dc9e1ce58e..00000000000 --- a/data/Leipzig/E4C4-fermataShortAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4C5-fermataShortBelow.xml b/data/Leipzig/E4C5-fermataShortBelow.xml deleted file mode 100644 index f86ae7774dc..00000000000 --- a/data/Leipzig/E4C5-fermataShortBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4C6-fermataLongAbove.xml b/data/Leipzig/E4C6-fermataLongAbove.xml deleted file mode 100644 index b4f45320d5b..00000000000 --- a/data/Leipzig/E4C6-fermataLongAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4C7-fermataLongBelow.xml b/data/Leipzig/E4C7-fermataLongBelow.xml deleted file mode 100644 index f8fea2c160b..00000000000 --- a/data/Leipzig/E4C7-fermataLongBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4C8-fermataVeryLongAbove.xml b/data/Leipzig/E4C8-fermataVeryLongAbove.xml deleted file mode 100644 index 4b782485132..00000000000 --- a/data/Leipzig/E4C8-fermataVeryLongAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4C9-fermataVeryLongBelow.xml b/data/Leipzig/E4C9-fermataVeryLongBelow.xml deleted file mode 100644 index ef2fd6ff5da..00000000000 --- a/data/Leipzig/E4C9-fermataVeryLongBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4CE-breathMarkComma.xml b/data/Leipzig/E4CE-breathMarkComma.xml deleted file mode 100644 index d9884a7e448..00000000000 --- a/data/Leipzig/E4CE-breathMarkComma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4E0-restMaxima.xml b/data/Leipzig/E4E0-restMaxima.xml deleted file mode 100644 index 98b70b125fe..00000000000 --- a/data/Leipzig/E4E0-restMaxima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4E1-restLonga.xml b/data/Leipzig/E4E1-restLonga.xml deleted file mode 100644 index fd440f3b392..00000000000 --- a/data/Leipzig/E4E1-restLonga.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4E2-restDoubleWhole.xml b/data/Leipzig/E4E2-restDoubleWhole.xml deleted file mode 100644 index 676c0e526ef..00000000000 --- a/data/Leipzig/E4E2-restDoubleWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4E3-restWhole.xml b/data/Leipzig/E4E3-restWhole.xml deleted file mode 100644 index d9749825ed1..00000000000 --- a/data/Leipzig/E4E3-restWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4E4-restHalf.xml b/data/Leipzig/E4E4-restHalf.xml deleted file mode 100644 index 3968014d39e..00000000000 --- a/data/Leipzig/E4E4-restHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4E5-restQuarter.xml b/data/Leipzig/E4E5-restQuarter.xml deleted file mode 100644 index de94cab870f..00000000000 --- a/data/Leipzig/E4E5-restQuarter.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4E6-rest8th.xml b/data/Leipzig/E4E6-rest8th.xml deleted file mode 100644 index 83cc1834cb5..00000000000 --- a/data/Leipzig/E4E6-rest8th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4E7-rest16th.xml b/data/Leipzig/E4E7-rest16th.xml deleted file mode 100644 index bee33381be1..00000000000 --- a/data/Leipzig/E4E7-rest16th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4E8-rest32nd.xml b/data/Leipzig/E4E8-rest32nd.xml deleted file mode 100644 index 2ef3182f0a6..00000000000 --- a/data/Leipzig/E4E8-rest32nd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4E9-rest64th.xml b/data/Leipzig/E4E9-rest64th.xml deleted file mode 100644 index 1e0d45115f9..00000000000 --- a/data/Leipzig/E4E9-rest64th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4EA-rest128th.xml b/data/Leipzig/E4EA-rest128th.xml deleted file mode 100644 index 71ff81619f9..00000000000 --- a/data/Leipzig/E4EA-rest128th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4EB-rest256th.xml b/data/Leipzig/E4EB-rest256th.xml deleted file mode 100644 index a3cdce24cad..00000000000 --- a/data/Leipzig/E4EB-rest256th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4EC-rest512th.xml b/data/Leipzig/E4EC-rest512th.xml deleted file mode 100644 index bd832f7c49b..00000000000 --- a/data/Leipzig/E4EC-rest512th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4ED-rest1024th.xml b/data/Leipzig/E4ED-rest1024th.xml deleted file mode 100644 index c6dde38a6f4..00000000000 --- a/data/Leipzig/E4ED-rest1024th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4F2-restQuarterOld.xml b/data/Leipzig/E4F2-restQuarterOld.xml deleted file mode 100644 index 710da4850e5..00000000000 --- a/data/Leipzig/E4F2-restQuarterOld.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E4F6-restQuarterZ.xml b/data/Leipzig/E4F6-restQuarterZ.xml deleted file mode 100644 index a30b330d267..00000000000 --- a/data/Leipzig/E4F6-restQuarterZ.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E500-repeat1Bar.xml b/data/Leipzig/E500-repeat1Bar.xml deleted file mode 100644 index 9927ff9ac26..00000000000 --- a/data/Leipzig/E500-repeat1Bar.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E501-repeat2Bars.xml b/data/Leipzig/E501-repeat2Bars.xml deleted file mode 100644 index bd606f8362a..00000000000 --- a/data/Leipzig/E501-repeat2Bars.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E502-repeat4Bars.xml b/data/Leipzig/E502-repeat4Bars.xml deleted file mode 100644 index 3abae54ead3..00000000000 --- a/data/Leipzig/E502-repeat4Bars.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E503-repeatBarUpperDot.xml b/data/Leipzig/E503-repeatBarUpperDot.xml deleted file mode 100644 index 65081725679..00000000000 --- a/data/Leipzig/E503-repeatBarUpperDot.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E504-repeatBarSlash.xml b/data/Leipzig/E504-repeatBarSlash.xml deleted file mode 100644 index 93937e3589a..00000000000 --- a/data/Leipzig/E504-repeatBarSlash.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E505-repeatBarLowerDot.xml b/data/Leipzig/E505-repeatBarLowerDot.xml deleted file mode 100644 index da3f0a977c0..00000000000 --- a/data/Leipzig/E505-repeatBarLowerDot.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E510-ottava.xml b/data/Leipzig/E510-ottava.xml deleted file mode 100644 index 846530fecb6..00000000000 --- a/data/Leipzig/E510-ottava.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E511-ottavaAlta.xml b/data/Leipzig/E511-ottavaAlta.xml deleted file mode 100644 index f575e6fb906..00000000000 --- a/data/Leipzig/E511-ottavaAlta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E512-ottavaBassa.xml b/data/Leipzig/E512-ottavaBassa.xml deleted file mode 100644 index 1a1e4b8e2e6..00000000000 --- a/data/Leipzig/E512-ottavaBassa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E513-ottavaBassaBa.xml b/data/Leipzig/E513-ottavaBassaBa.xml deleted file mode 100644 index 414803ed0bf..00000000000 --- a/data/Leipzig/E513-ottavaBassaBa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E514-quindicesima.xml b/data/Leipzig/E514-quindicesima.xml deleted file mode 100644 index 7d955f97bc1..00000000000 --- a/data/Leipzig/E514-quindicesima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E515-quindicesimaAlta.xml b/data/Leipzig/E515-quindicesimaAlta.xml deleted file mode 100644 index 40d33278b44..00000000000 --- a/data/Leipzig/E515-quindicesimaAlta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E516-quindicesimaBassa.xml b/data/Leipzig/E516-quindicesimaBassa.xml deleted file mode 100644 index bdfd714063e..00000000000 --- a/data/Leipzig/E516-quindicesimaBassa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E517-ventiduesima.xml b/data/Leipzig/E517-ventiduesima.xml deleted file mode 100644 index bd8d734c9b1..00000000000 --- a/data/Leipzig/E517-ventiduesima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E518-ventiduesimaAlta.xml b/data/Leipzig/E518-ventiduesimaAlta.xml deleted file mode 100644 index c21feabba35..00000000000 --- a/data/Leipzig/E518-ventiduesimaAlta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E519-ventiduesimaBassa.xml b/data/Leipzig/E519-ventiduesimaBassa.xml deleted file mode 100644 index 735594bb080..00000000000 --- a/data/Leipzig/E519-ventiduesimaBassa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E51A-octaveParensLeft.xml b/data/Leipzig/E51A-octaveParensLeft.xml deleted file mode 100644 index 06b596de7b8..00000000000 --- a/data/Leipzig/E51A-octaveParensLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E51B-octaveParensRight.xml b/data/Leipzig/E51B-octaveParensRight.xml deleted file mode 100644 index b71c020c747..00000000000 --- a/data/Leipzig/E51B-octaveParensRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E51C-ottavaBassaVb.xml b/data/Leipzig/E51C-ottavaBassaVb.xml deleted file mode 100644 index b0aea0d5e42..00000000000 --- a/data/Leipzig/E51C-ottavaBassaVb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E51D-quindicesimaBassaMb.xml b/data/Leipzig/E51D-quindicesimaBassaMb.xml deleted file mode 100644 index 37abc267db8..00000000000 --- a/data/Leipzig/E51D-quindicesimaBassaMb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E51E-ventiduesimaBassaMb.xml b/data/Leipzig/E51E-ventiduesimaBassaMb.xml deleted file mode 100644 index 0bcebe4e77b..00000000000 --- a/data/Leipzig/E51E-ventiduesimaBassaMb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E520-dynamicPiano.xml b/data/Leipzig/E520-dynamicPiano.xml deleted file mode 100644 index 170fb7fd183..00000000000 --- a/data/Leipzig/E520-dynamicPiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E521-dynamicMezzo.xml b/data/Leipzig/E521-dynamicMezzo.xml deleted file mode 100644 index 5b700da4f76..00000000000 --- a/data/Leipzig/E521-dynamicMezzo.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E522-dynamicForte.xml b/data/Leipzig/E522-dynamicForte.xml deleted file mode 100644 index 620da5029d7..00000000000 --- a/data/Leipzig/E522-dynamicForte.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E523-dynamicRinforzando.xml b/data/Leipzig/E523-dynamicRinforzando.xml deleted file mode 100644 index 3442ac8214f..00000000000 --- a/data/Leipzig/E523-dynamicRinforzando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E524-dynamicSforzando.xml b/data/Leipzig/E524-dynamicSforzando.xml deleted file mode 100644 index 5d8d23f5736..00000000000 --- a/data/Leipzig/E524-dynamicSforzando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E525-dynamicZ.xml b/data/Leipzig/E525-dynamicZ.xml deleted file mode 100644 index fa03c8bdf05..00000000000 --- a/data/Leipzig/E525-dynamicZ.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E526-dynamicNiente.xml b/data/Leipzig/E526-dynamicNiente.xml deleted file mode 100644 index bc42be0ef81..00000000000 --- a/data/Leipzig/E526-dynamicNiente.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E527-dynamicPPPPPP.xml b/data/Leipzig/E527-dynamicPPPPPP.xml deleted file mode 100644 index 6ff1a520766..00000000000 --- a/data/Leipzig/E527-dynamicPPPPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E528-dynamicPPPPP.xml b/data/Leipzig/E528-dynamicPPPPP.xml deleted file mode 100644 index 32ccd476ec2..00000000000 --- a/data/Leipzig/E528-dynamicPPPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E529-dynamicPPPP.xml b/data/Leipzig/E529-dynamicPPPP.xml deleted file mode 100644 index 92e21829719..00000000000 --- a/data/Leipzig/E529-dynamicPPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E52A-dynamicPPP.xml b/data/Leipzig/E52A-dynamicPPP.xml deleted file mode 100644 index e23d2828d31..00000000000 --- a/data/Leipzig/E52A-dynamicPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E52B-dynamicPP.xml b/data/Leipzig/E52B-dynamicPP.xml deleted file mode 100644 index d5bde8f1eab..00000000000 --- a/data/Leipzig/E52B-dynamicPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E52C-dynamicMP.xml b/data/Leipzig/E52C-dynamicMP.xml deleted file mode 100644 index 447ad216d0d..00000000000 --- a/data/Leipzig/E52C-dynamicMP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E52D-dynamicMF.xml b/data/Leipzig/E52D-dynamicMF.xml deleted file mode 100644 index d71f9010298..00000000000 --- a/data/Leipzig/E52D-dynamicMF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E52E-dynamicPF.xml b/data/Leipzig/E52E-dynamicPF.xml deleted file mode 100644 index 0ac6cdc403b..00000000000 --- a/data/Leipzig/E52E-dynamicPF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E52F-dynamicFF.xml b/data/Leipzig/E52F-dynamicFF.xml deleted file mode 100644 index 790202da673..00000000000 --- a/data/Leipzig/E52F-dynamicFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E530-dynamicFFF.xml b/data/Leipzig/E530-dynamicFFF.xml deleted file mode 100644 index b79f4593013..00000000000 --- a/data/Leipzig/E530-dynamicFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E531-dynamicFFFF.xml b/data/Leipzig/E531-dynamicFFFF.xml deleted file mode 100644 index e87dd2ed584..00000000000 --- a/data/Leipzig/E531-dynamicFFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E532-dynamicFFFFF.xml b/data/Leipzig/E532-dynamicFFFFF.xml deleted file mode 100644 index 1630b3ae700..00000000000 --- a/data/Leipzig/E532-dynamicFFFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E533-dynamicFFFFFF.xml b/data/Leipzig/E533-dynamicFFFFFF.xml deleted file mode 100644 index d308fe7bdf8..00000000000 --- a/data/Leipzig/E533-dynamicFFFFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E534-dynamicFortePiano.xml b/data/Leipzig/E534-dynamicFortePiano.xml deleted file mode 100644 index a80c797c036..00000000000 --- a/data/Leipzig/E534-dynamicFortePiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E535-dynamicForzando.xml b/data/Leipzig/E535-dynamicForzando.xml deleted file mode 100644 index 48b9e2b43ec..00000000000 --- a/data/Leipzig/E535-dynamicForzando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E536-dynamicSforzando1.xml b/data/Leipzig/E536-dynamicSforzando1.xml deleted file mode 100644 index 7ffa7279a4a..00000000000 --- a/data/Leipzig/E536-dynamicSforzando1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E537-dynamicSforzandoPiano.xml b/data/Leipzig/E537-dynamicSforzandoPiano.xml deleted file mode 100644 index e6de2b9692e..00000000000 --- a/data/Leipzig/E537-dynamicSforzandoPiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E538-dynamicSforzandoPianissimo.xml b/data/Leipzig/E538-dynamicSforzandoPianissimo.xml deleted file mode 100644 index 2e626cf6548..00000000000 --- a/data/Leipzig/E538-dynamicSforzandoPianissimo.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E539-dynamicSforzato.xml b/data/Leipzig/E539-dynamicSforzato.xml deleted file mode 100644 index 8be6dbbaa7d..00000000000 --- a/data/Leipzig/E539-dynamicSforzato.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E53A-dynamicSforzatoPiano.xml b/data/Leipzig/E53A-dynamicSforzatoPiano.xml deleted file mode 100644 index 57eb85118d0..00000000000 --- a/data/Leipzig/E53A-dynamicSforzatoPiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E53B-dynamicSforzatoFF.xml b/data/Leipzig/E53B-dynamicSforzatoFF.xml deleted file mode 100644 index 9140f459219..00000000000 --- a/data/Leipzig/E53B-dynamicSforzatoFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E53C-dynamicRinforzando1.xml b/data/Leipzig/E53C-dynamicRinforzando1.xml deleted file mode 100644 index 17f2ae5f1db..00000000000 --- a/data/Leipzig/E53C-dynamicRinforzando1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E53D-dynamicRinforzando2.xml b/data/Leipzig/E53D-dynamicRinforzando2.xml deleted file mode 100644 index 9e4da21abe3..00000000000 --- a/data/Leipzig/E53D-dynamicRinforzando2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E566-ornamentTrill.xml b/data/Leipzig/E566-ornamentTrill.xml deleted file mode 100644 index 37ed1cbaa60..00000000000 --- a/data/Leipzig/E566-ornamentTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E567-ornamentTurn.xml b/data/Leipzig/E567-ornamentTurn.xml deleted file mode 100644 index a35e81d788a..00000000000 --- a/data/Leipzig/E567-ornamentTurn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E568-ornamentTurnInverted.xml b/data/Leipzig/E568-ornamentTurnInverted.xml deleted file mode 100644 index 6b02d1b62ce..00000000000 --- a/data/Leipzig/E568-ornamentTurnInverted.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E569-ornamentTurnSlash.xml b/data/Leipzig/E569-ornamentTurnSlash.xml deleted file mode 100644 index b99dc40e1ea..00000000000 --- a/data/Leipzig/E569-ornamentTurnSlash.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E56A-ornamentTurnUp.xml b/data/Leipzig/E56A-ornamentTurnUp.xml deleted file mode 100644 index bcf05ddb10f..00000000000 --- a/data/Leipzig/E56A-ornamentTurnUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E56B-ornamentTurnUpS.xml b/data/Leipzig/E56B-ornamentTurnUpS.xml deleted file mode 100644 index 4943a8a0b55..00000000000 --- a/data/Leipzig/E56B-ornamentTurnUpS.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E56C-ornamentShortTrill.xml b/data/Leipzig/E56C-ornamentShortTrill.xml deleted file mode 100644 index 2f1176fee1b..00000000000 --- a/data/Leipzig/E56C-ornamentShortTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E56D-ornamentMordent.xml b/data/Leipzig/E56D-ornamentMordent.xml deleted file mode 100644 index 8d4a5fc58ad..00000000000 --- a/data/Leipzig/E56D-ornamentMordent.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E56E-ornamentTremblement.xml b/data/Leipzig/E56E-ornamentTremblement.xml deleted file mode 100644 index 8b4070d51db..00000000000 --- a/data/Leipzig/E56E-ornamentTremblement.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E56F-ornamentHaydn.xml b/data/Leipzig/E56F-ornamentHaydn.xml deleted file mode 100644 index ab45bc1f8a6..00000000000 --- a/data/Leipzig/E56F-ornamentHaydn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E583-ornamentVerticalLine.xml b/data/Leipzig/E583-ornamentVerticalLine.xml deleted file mode 100644 index eaabecf03f2..00000000000 --- a/data/Leipzig/E583-ornamentVerticalLine.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E587-ornamentSchleifer.xml b/data/Leipzig/E587-ornamentSchleifer.xml deleted file mode 100644 index fb209b4b6b1..00000000000 --- a/data/Leipzig/E587-ornamentSchleifer.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E59D-ornamentZigZagLineNoRightEnd.xml b/data/Leipzig/E59D-ornamentZigZagLineNoRightEnd.xml deleted file mode 100644 index e64269c3b2f..00000000000 --- a/data/Leipzig/E59D-ornamentZigZagLineNoRightEnd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E59E-ornamentZigZagLineWithRightEnd.xml b/data/Leipzig/E59E-ornamentZigZagLineWithRightEnd.xml deleted file mode 100644 index f68ea5ce1ac..00000000000 --- a/data/Leipzig/E59E-ornamentZigZagLineWithRightEnd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5B0-ornamentPrecompSlide.xml b/data/Leipzig/E5B0-ornamentPrecompSlide.xml deleted file mode 100644 index fc45adb1d2a..00000000000 --- a/data/Leipzig/E5B0-ornamentPrecompSlide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5B1-ornamentPrecompDescendingSlide.xml b/data/Leipzig/E5B1-ornamentPrecompDescendingSlide.xml deleted file mode 100644 index e345832025c..00000000000 --- a/data/Leipzig/E5B1-ornamentPrecompDescendingSlide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5B2-ornamentPrecompAppoggTrill.xml b/data/Leipzig/E5B2-ornamentPrecompAppoggTrill.xml deleted file mode 100644 index 13727ead5fe..00000000000 --- a/data/Leipzig/E5B2-ornamentPrecompAppoggTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5B3-ornamentPrecompAppoggTrillSuffix.xml b/data/Leipzig/E5B3-ornamentPrecompAppoggTrillSuffix.xml deleted file mode 100644 index 2679aafa0f6..00000000000 --- a/data/Leipzig/E5B3-ornamentPrecompAppoggTrillSuffix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5B4-ornamentPrecompTurnTrillDAnglebert.xml b/data/Leipzig/E5B4-ornamentPrecompTurnTrillDAnglebert.xml deleted file mode 100644 index fbe33766e1b..00000000000 --- a/data/Leipzig/E5B4-ornamentPrecompTurnTrillDAnglebert.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5B5-ornamentPrecompSlideTrillDAnglebert.xml b/data/Leipzig/E5B5-ornamentPrecompSlideTrillDAnglebert.xml deleted file mode 100644 index 938f0243ac0..00000000000 --- a/data/Leipzig/E5B5-ornamentPrecompSlideTrillDAnglebert.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5B6-ornamentPrecompSlideTrillMarpurg.xml b/data/Leipzig/E5B6-ornamentPrecompSlideTrillMarpurg.xml deleted file mode 100644 index 65fe1f11ece..00000000000 --- a/data/Leipzig/E5B6-ornamentPrecompSlideTrillMarpurg.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5B7-ornamentPrecompTurnTrillBach.xml b/data/Leipzig/E5B7-ornamentPrecompTurnTrillBach.xml deleted file mode 100644 index c296166b25d..00000000000 --- a/data/Leipzig/E5B7-ornamentPrecompTurnTrillBach.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5B8-ornamentPrecompSlideTrillBach.xml b/data/Leipzig/E5B8-ornamentPrecompSlideTrillBach.xml deleted file mode 100644 index 075612b711a..00000000000 --- a/data/Leipzig/E5B8-ornamentPrecompSlideTrillBach.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5B9-ornamentPrecompSlideTrillMuffat.xml b/data/Leipzig/E5B9-ornamentPrecompSlideTrillMuffat.xml deleted file mode 100644 index 9633e0185a6..00000000000 --- a/data/Leipzig/E5B9-ornamentPrecompSlideTrillMuffat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5BA-ornamentPrecompSlideTrillSuffixMuffat.xml b/data/Leipzig/E5BA-ornamentPrecompSlideTrillSuffixMuffat.xml deleted file mode 100644 index b96d4a78f41..00000000000 --- a/data/Leipzig/E5BA-ornamentPrecompSlideTrillSuffixMuffat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5BB-ornamentPrecompTrillSuffixDandrieu.xml b/data/Leipzig/E5BB-ornamentPrecompTrillSuffixDandrieu.xml deleted file mode 100644 index d031eb42bce..00000000000 --- a/data/Leipzig/E5BB-ornamentPrecompTrillSuffixDandrieu.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5BC-ornamentPrecompPortDeVoixMordent.xml b/data/Leipzig/E5BC-ornamentPrecompPortDeVoixMordent.xml deleted file mode 100644 index 478e0c6f80d..00000000000 --- a/data/Leipzig/E5BC-ornamentPrecompPortDeVoixMordent.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5BD-ornamentPrecompTrillWithMordent.xml b/data/Leipzig/E5BD-ornamentPrecompTrillWithMordent.xml deleted file mode 100644 index 8d12c034d84..00000000000 --- a/data/Leipzig/E5BD-ornamentPrecompTrillWithMordent.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5BE-ornamentPrecompCadence.xml b/data/Leipzig/E5BE-ornamentPrecompCadence.xml deleted file mode 100644 index b1f1308ad3c..00000000000 --- a/data/Leipzig/E5BE-ornamentPrecompCadence.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5BF-ornamentPrecompCadenceWithTurn.xml b/data/Leipzig/E5BF-ornamentPrecompCadenceWithTurn.xml deleted file mode 100644 index 6efcf1a4861..00000000000 --- a/data/Leipzig/E5BF-ornamentPrecompCadenceWithTurn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml b/data/Leipzig/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml deleted file mode 100644 index be891810af2..00000000000 --- a/data/Leipzig/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5C1-ornamentPrecompCadenceUpperPrefix.xml b/data/Leipzig/E5C1-ornamentPrecompCadenceUpperPrefix.xml deleted file mode 100644 index 87cd06a8c07..00000000000 --- a/data/Leipzig/E5C1-ornamentPrecompCadenceUpperPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5C2-ornamentPrecompCadenceUpperPrefixTurn.xml b/data/Leipzig/E5C2-ornamentPrecompCadenceUpperPrefixTurn.xml deleted file mode 100644 index f1828043385..00000000000 --- a/data/Leipzig/E5C2-ornamentPrecompCadenceUpperPrefixTurn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml b/data/Leipzig/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml deleted file mode 100644 index e0eeb43657b..00000000000 --- a/data/Leipzig/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5C4-ornamentPrecompDoubleCadenceUpperPrefixTurn.xml b/data/Leipzig/E5C4-ornamentPrecompDoubleCadenceUpperPrefixTurn.xml deleted file mode 100644 index 5b4c68317e1..00000000000 --- a/data/Leipzig/E5C4-ornamentPrecompDoubleCadenceUpperPrefixTurn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5C5-ornamentPrecompMordentRelease.xml b/data/Leipzig/E5C5-ornamentPrecompMordentRelease.xml deleted file mode 100644 index fe0bd76fe7a..00000000000 --- a/data/Leipzig/E5C5-ornamentPrecompMordentRelease.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5C6-ornamentPrecompMordentUpperPrefix.xml b/data/Leipzig/E5C6-ornamentPrecompMordentUpperPrefix.xml deleted file mode 100644 index bf5009f17f2..00000000000 --- a/data/Leipzig/E5C6-ornamentPrecompMordentUpperPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml b/data/Leipzig/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml deleted file mode 100644 index 08f16c4f618..00000000000 --- a/data/Leipzig/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5C8-ornamentPrecompTrillLowerSuffix.xml b/data/Leipzig/E5C8-ornamentPrecompTrillLowerSuffix.xml deleted file mode 100644 index 92dd0a738c2..00000000000 --- a/data/Leipzig/E5C8-ornamentPrecompTrillLowerSuffix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5E5-brassMuteClosed.xml b/data/Leipzig/E5E5-brassMuteClosed.xml deleted file mode 100644 index 33f7599e87b..00000000000 --- a/data/Leipzig/E5E5-brassMuteClosed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5E6-brassMuteHalfClosed.xml b/data/Leipzig/E5E6-brassMuteHalfClosed.xml deleted file mode 100644 index 1e0294918f2..00000000000 --- a/data/Leipzig/E5E6-brassMuteHalfClosed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E5E7-brassMuteOpen.xml b/data/Leipzig/E5E7-brassMuteOpen.xml deleted file mode 100644 index 306dd0f0241..00000000000 --- a/data/Leipzig/E5E7-brassMuteOpen.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E610-stringsDownBow.xml b/data/Leipzig/E610-stringsDownBow.xml deleted file mode 100644 index ea9ed89a9b8..00000000000 --- a/data/Leipzig/E610-stringsDownBow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E611-stringsDownBowTurned.xml b/data/Leipzig/E611-stringsDownBowTurned.xml deleted file mode 100644 index 0fce7c493ab..00000000000 --- a/data/Leipzig/E611-stringsDownBowTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E612-stringsUpBow.xml b/data/Leipzig/E612-stringsUpBow.xml deleted file mode 100644 index cc7ecc4067d..00000000000 --- a/data/Leipzig/E612-stringsUpBow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E613-stringsUpBowTurned.xml b/data/Leipzig/E613-stringsUpBowTurned.xml deleted file mode 100644 index 1bd6751f8ca..00000000000 --- a/data/Leipzig/E613-stringsUpBowTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E614-stringsHarmonic.xml b/data/Leipzig/E614-stringsHarmonic.xml deleted file mode 100644 index f8dc3a258ed..00000000000 --- a/data/Leipzig/E614-stringsHarmonic.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E630-pluckedSnapPizzicatoBelow.xml b/data/Leipzig/E630-pluckedSnapPizzicatoBelow.xml deleted file mode 100644 index 80eb9d72db3..00000000000 --- a/data/Leipzig/E630-pluckedSnapPizzicatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E631-pluckedSnapPizzicatoAbove.xml b/data/Leipzig/E631-pluckedSnapPizzicatoAbove.xml deleted file mode 100644 index d709748615e..00000000000 --- a/data/Leipzig/E631-pluckedSnapPizzicatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E632-pluckedBuzzPizzicato.xml b/data/Leipzig/E632-pluckedBuzzPizzicato.xml deleted file mode 100644 index e64ff19e941..00000000000 --- a/data/Leipzig/E632-pluckedBuzzPizzicato.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E633-pluckedLeftHandPizzicato.xml b/data/Leipzig/E633-pluckedLeftHandPizzicato.xml deleted file mode 100644 index 504a3e68f19..00000000000 --- a/data/Leipzig/E633-pluckedLeftHandPizzicato.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E638-pluckedDamp.xml b/data/Leipzig/E638-pluckedDamp.xml deleted file mode 100644 index 01499f882d9..00000000000 --- a/data/Leipzig/E638-pluckedDamp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E645-vocalSprechgesang.xml b/data/Leipzig/E645-vocalSprechgesang.xml deleted file mode 100644 index 5de369ecaa5..00000000000 --- a/data/Leipzig/E645-vocalSprechgesang.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E650-keyboardPedalPed.xml b/data/Leipzig/E650-keyboardPedalPed.xml deleted file mode 100644 index f62ba204c86..00000000000 --- a/data/Leipzig/E650-keyboardPedalPed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E651-keyboardPedalP.xml b/data/Leipzig/E651-keyboardPedalP.xml deleted file mode 100644 index 1db5bec531f..00000000000 --- a/data/Leipzig/E651-keyboardPedalP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E655-keyboardPedalUp.xml b/data/Leipzig/E655-keyboardPedalUp.xml deleted file mode 100644 index 7d145d6daa3..00000000000 --- a/data/Leipzig/E655-keyboardPedalUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E659-keyboardPedalSost.xml b/data/Leipzig/E659-keyboardPedalSost.xml deleted file mode 100644 index 2aed7fbbe53..00000000000 --- a/data/Leipzig/E659-keyboardPedalSost.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E65A-keyboardPedalS.xml b/data/Leipzig/E65A-keyboardPedalS.xml deleted file mode 100644 index 780e2191b16..00000000000 --- a/data/Leipzig/E65A-keyboardPedalS.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E880-tuplet0.xml b/data/Leipzig/E880-tuplet0.xml deleted file mode 100644 index eb710651a0e..00000000000 --- a/data/Leipzig/E880-tuplet0.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E881-tuplet1.xml b/data/Leipzig/E881-tuplet1.xml deleted file mode 100644 index 272b4307448..00000000000 --- a/data/Leipzig/E881-tuplet1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E882-tuplet2.xml b/data/Leipzig/E882-tuplet2.xml deleted file mode 100644 index 1f79b8b5840..00000000000 --- a/data/Leipzig/E882-tuplet2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E883-tuplet3.xml b/data/Leipzig/E883-tuplet3.xml deleted file mode 100644 index 77649644b34..00000000000 --- a/data/Leipzig/E883-tuplet3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E884-tuplet4.xml b/data/Leipzig/E884-tuplet4.xml deleted file mode 100644 index 291d25906ef..00000000000 --- a/data/Leipzig/E884-tuplet4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E885-tuplet5.xml b/data/Leipzig/E885-tuplet5.xml deleted file mode 100644 index c72c1db74b5..00000000000 --- a/data/Leipzig/E885-tuplet5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E886-tuplet6.xml b/data/Leipzig/E886-tuplet6.xml deleted file mode 100644 index 6d182f7c56c..00000000000 --- a/data/Leipzig/E886-tuplet6.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E887-tuplet7.xml b/data/Leipzig/E887-tuplet7.xml deleted file mode 100644 index 1e8d153b8a1..00000000000 --- a/data/Leipzig/E887-tuplet7.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E888-tuplet8.xml b/data/Leipzig/E888-tuplet8.xml deleted file mode 100644 index a49a3242188..00000000000 --- a/data/Leipzig/E888-tuplet8.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E889-tuplet9.xml b/data/Leipzig/E889-tuplet9.xml deleted file mode 100644 index b77e92a7f6d..00000000000 --- a/data/Leipzig/E889-tuplet9.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E88A-tupletColon.xml b/data/Leipzig/E88A-tupletColon.xml deleted file mode 100644 index 3481055de89..00000000000 --- a/data/Leipzig/E88A-tupletColon.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E901-mensuralGclefPetrucci.xml b/data/Leipzig/E901-mensuralGclefPetrucci.xml deleted file mode 100644 index 56aea5923b4..00000000000 --- a/data/Leipzig/E901-mensuralGclefPetrucci.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E902-chantFclef.xml b/data/Leipzig/E902-chantFclef.xml deleted file mode 100644 index 9a295bd77fd..00000000000 --- a/data/Leipzig/E902-chantFclef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E904-mensuralFclefPetrucci.xml b/data/Leipzig/E904-mensuralFclefPetrucci.xml deleted file mode 100644 index 9e724514e3e..00000000000 --- a/data/Leipzig/E904-mensuralFclefPetrucci.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E906-chantCclef.xml b/data/Leipzig/E906-chantCclef.xml deleted file mode 100644 index 836fc423de3..00000000000 --- a/data/Leipzig/E906-chantCclef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E907-mensuralCclefPetrucciPosLowest.xml b/data/Leipzig/E907-mensuralCclefPetrucciPosLowest.xml deleted file mode 100644 index 96f8f5dbcfe..00000000000 --- a/data/Leipzig/E907-mensuralCclefPetrucciPosLowest.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E908-mensuralCclefPetrucciPosLow.xml b/data/Leipzig/E908-mensuralCclefPetrucciPosLow.xml deleted file mode 100644 index 9d679cc50a9..00000000000 --- a/data/Leipzig/E908-mensuralCclefPetrucciPosLow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E909-mensuralCclefPetrucciPosMiddle.xml b/data/Leipzig/E909-mensuralCclefPetrucciPosMiddle.xml deleted file mode 100644 index 9824fffaf4a..00000000000 --- a/data/Leipzig/E909-mensuralCclefPetrucciPosMiddle.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E90A-mensuralCclefPetrucciPosHigh.xml b/data/Leipzig/E90A-mensuralCclefPetrucciPosHigh.xml deleted file mode 100644 index 3c74dbf9732..00000000000 --- a/data/Leipzig/E90A-mensuralCclefPetrucciPosHigh.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E90B-mensuralCclefPetrucciPosHighest.xml b/data/Leipzig/E90B-mensuralCclefPetrucciPosHighest.xml deleted file mode 100644 index cb707a3af09..00000000000 --- a/data/Leipzig/E90B-mensuralCclefPetrucciPosHighest.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E910-mensuralProlation1.xml b/data/Leipzig/E910-mensuralProlation1.xml deleted file mode 100644 index 4fba3749924..00000000000 --- a/data/Leipzig/E910-mensuralProlation1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E911-mensuralProlation2.xml b/data/Leipzig/E911-mensuralProlation2.xml deleted file mode 100644 index 082710efb45..00000000000 --- a/data/Leipzig/E911-mensuralProlation2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E912-mensuralProlation3.xml b/data/Leipzig/E912-mensuralProlation3.xml deleted file mode 100644 index 8adab937c8a..00000000000 --- a/data/Leipzig/E912-mensuralProlation3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E913-mensuralProlation4.xml b/data/Leipzig/E913-mensuralProlation4.xml deleted file mode 100644 index eec723d8a6e..00000000000 --- a/data/Leipzig/E913-mensuralProlation4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E914-mensuralProlation5.xml b/data/Leipzig/E914-mensuralProlation5.xml deleted file mode 100644 index ea63567909f..00000000000 --- a/data/Leipzig/E914-mensuralProlation5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E915-mensuralProlation6.xml b/data/Leipzig/E915-mensuralProlation6.xml deleted file mode 100644 index a156a376170..00000000000 --- a/data/Leipzig/E915-mensuralProlation6.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E916-mensuralProlation7.xml b/data/Leipzig/E916-mensuralProlation7.xml deleted file mode 100644 index d7adaf3e62c..00000000000 --- a/data/Leipzig/E916-mensuralProlation7.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E917-mensuralProlation8.xml b/data/Leipzig/E917-mensuralProlation8.xml deleted file mode 100644 index 29f1e8de704..00000000000 --- a/data/Leipzig/E917-mensuralProlation8.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E918-mensuralProlation9.xml b/data/Leipzig/E918-mensuralProlation9.xml deleted file mode 100644 index eb43a50d1e5..00000000000 --- a/data/Leipzig/E918-mensuralProlation9.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E919-mensuralProlation10.xml b/data/Leipzig/E919-mensuralProlation10.xml deleted file mode 100644 index 2ae7d417a2f..00000000000 --- a/data/Leipzig/E919-mensuralProlation10.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E91A-mensuralProlation11.xml b/data/Leipzig/E91A-mensuralProlation11.xml deleted file mode 100644 index f9c992afa7b..00000000000 --- a/data/Leipzig/E91A-mensuralProlation11.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E91B-mensuralProportionTempusPerfectum.xml b/data/Leipzig/E91B-mensuralProportionTempusPerfectum.xml deleted file mode 100644 index 55fd7470f62..00000000000 --- a/data/Leipzig/E91B-mensuralProportionTempusPerfectum.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E91C-mensuralProportionProportioDupla1.xml b/data/Leipzig/E91C-mensuralProportionProportioDupla1.xml deleted file mode 100644 index 12d33d8a6e4..00000000000 --- a/data/Leipzig/E91C-mensuralProportionProportioDupla1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E91D-mensuralProportionProportioDupla2.xml b/data/Leipzig/E91D-mensuralProportionProportioDupla2.xml deleted file mode 100644 index a9184445d88..00000000000 --- a/data/Leipzig/E91D-mensuralProportionProportioDupla2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E91E-mensuralProportionProportioTripla.xml b/data/Leipzig/E91E-mensuralProportionProportioTripla.xml deleted file mode 100644 index 7b0ca3a70c2..00000000000 --- a/data/Leipzig/E91E-mensuralProportionProportioTripla.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E91F-mensuralProportionProportioQuadrupla.xml b/data/Leipzig/E91F-mensuralProportionProportioQuadrupla.xml deleted file mode 100644 index d8cae709906..00000000000 --- a/data/Leipzig/E91F-mensuralProportionProportioQuadrupla.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E920-mensuralProlationCombiningDot.xml b/data/Leipzig/E920-mensuralProlationCombiningDot.xml deleted file mode 100644 index a1c6a04c142..00000000000 --- a/data/Leipzig/E920-mensuralProlationCombiningDot.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E921-mensuralProlationCombiningTwoDots.xml b/data/Leipzig/E921-mensuralProlationCombiningTwoDots.xml deleted file mode 100644 index 9cecb651c58..00000000000 --- a/data/Leipzig/E921-mensuralProlationCombiningTwoDots.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E922-mensuralProlationCombiningThreeDots.xml b/data/Leipzig/E922-mensuralProlationCombiningThreeDots.xml deleted file mode 100644 index cc1ebad6fd3..00000000000 --- a/data/Leipzig/E922-mensuralProlationCombiningThreeDots.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E923-mensuralProlationCombiningThreeDotsTri.xml b/data/Leipzig/E923-mensuralProlationCombiningThreeDotsTri.xml deleted file mode 100644 index edf21952671..00000000000 --- a/data/Leipzig/E923-mensuralProlationCombiningThreeDotsTri.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E924-mensuralProlationCombiningDotVoid.xml b/data/Leipzig/E924-mensuralProlationCombiningDotVoid.xml deleted file mode 100644 index 5fe33bbcc85..00000000000 --- a/data/Leipzig/E924-mensuralProlationCombiningDotVoid.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E925-mensuralProlationCombiningStroke.xml b/data/Leipzig/E925-mensuralProlationCombiningStroke.xml deleted file mode 100644 index 866262beadd..00000000000 --- a/data/Leipzig/E925-mensuralProlationCombiningStroke.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E938-mensuralNoteheadSemibrevisBlack.xml b/data/Leipzig/E938-mensuralNoteheadSemibrevisBlack.xml deleted file mode 100644 index 128496f3d59..00000000000 --- a/data/Leipzig/E938-mensuralNoteheadSemibrevisBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E939-mensuralNoteheadSemibrevisVoid.xml b/data/Leipzig/E939-mensuralNoteheadSemibrevisVoid.xml deleted file mode 100644 index 8e5f0ddd7a3..00000000000 --- a/data/Leipzig/E939-mensuralNoteheadSemibrevisVoid.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E93C-mensuralNoteheadMinimaWhite.xml b/data/Leipzig/E93C-mensuralNoteheadMinimaWhite.xml deleted file mode 100644 index d13da51a8bd..00000000000 --- a/data/Leipzig/E93C-mensuralNoteheadMinimaWhite.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E93D-mensuralNoteheadSemiminimaWhite.xml b/data/Leipzig/E93D-mensuralNoteheadSemiminimaWhite.xml deleted file mode 100644 index 3eda617e957..00000000000 --- a/data/Leipzig/E93D-mensuralNoteheadSemiminimaWhite.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E93E-mensuralCombStemUp.xml b/data/Leipzig/E93E-mensuralCombStemUp.xml deleted file mode 100644 index 8e508ef71f9..00000000000 --- a/data/Leipzig/E93E-mensuralCombStemUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E93F-mensuralCombStemDown.xml b/data/Leipzig/E93F-mensuralCombStemDown.xml deleted file mode 100644 index e7c84a4d4be..00000000000 --- a/data/Leipzig/E93F-mensuralCombStemDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E949-mensuralCombStemUpFlagSemiminima.xml b/data/Leipzig/E949-mensuralCombStemUpFlagSemiminima.xml deleted file mode 100644 index 50edc5d38c9..00000000000 --- a/data/Leipzig/E949-mensuralCombStemUpFlagSemiminima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E94A-mensuralCombStemDownFlagSemiminima.xml b/data/Leipzig/E94A-mensuralCombStemDownFlagSemiminima.xml deleted file mode 100644 index 346e874e719..00000000000 --- a/data/Leipzig/E94A-mensuralCombStemDownFlagSemiminima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E94B-mensuralCombStemUpFlagFusa.xml b/data/Leipzig/E94B-mensuralCombStemUpFlagFusa.xml deleted file mode 100644 index 2659010d023..00000000000 --- a/data/Leipzig/E94B-mensuralCombStemUpFlagFusa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E94C-mensuralCombStemDownFlagFusa.xml b/data/Leipzig/E94C-mensuralCombStemDownFlagFusa.xml deleted file mode 100644 index bded688b359..00000000000 --- a/data/Leipzig/E94C-mensuralCombStemDownFlagFusa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E9E0-medRenFlatSoftB.xml b/data/Leipzig/E9E0-medRenFlatSoftB.xml deleted file mode 100644 index b65e859863e..00000000000 --- a/data/Leipzig/E9E0-medRenFlatSoftB.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E9E1-medRenFlatHardB.xml b/data/Leipzig/E9E1-medRenFlatHardB.xml deleted file mode 100644 index eac080c8ada..00000000000 --- a/data/Leipzig/E9E1-medRenFlatHardB.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E9E2-medRenNatural.xml b/data/Leipzig/E9E2-medRenNatural.xml deleted file mode 100644 index 3840c1153ed..00000000000 --- a/data/Leipzig/E9E2-medRenNatural.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E9E3-medRenSharpCroix.xml b/data/Leipzig/E9E3-medRenSharpCroix.xml deleted file mode 100644 index c08530a7d8e..00000000000 --- a/data/Leipzig/E9E3-medRenSharpCroix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E9F0-mensuralRestMaxima.xml b/data/Leipzig/E9F0-mensuralRestMaxima.xml deleted file mode 100644 index a1f44ee149e..00000000000 --- a/data/Leipzig/E9F0-mensuralRestMaxima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E9F1-mensuralRestLongaPerfecta.xml b/data/Leipzig/E9F1-mensuralRestLongaPerfecta.xml deleted file mode 100644 index 29066ce5113..00000000000 --- a/data/Leipzig/E9F1-mensuralRestLongaPerfecta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E9F2-mensuralRestLongaImperfecta.xml b/data/Leipzig/E9F2-mensuralRestLongaImperfecta.xml deleted file mode 100644 index e389b4b7594..00000000000 --- a/data/Leipzig/E9F2-mensuralRestLongaImperfecta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E9F3-mensuralRestBrevis.xml b/data/Leipzig/E9F3-mensuralRestBrevis.xml deleted file mode 100644 index 5230f5c96a6..00000000000 --- a/data/Leipzig/E9F3-mensuralRestBrevis.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E9F4-mensuralRestSemibrevis.xml b/data/Leipzig/E9F4-mensuralRestSemibrevis.xml deleted file mode 100644 index d61f6504d21..00000000000 --- a/data/Leipzig/E9F4-mensuralRestSemibrevis.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E9F5-mensuralRestMinima.xml b/data/Leipzig/E9F5-mensuralRestMinima.xml deleted file mode 100644 index a4045c0f907..00000000000 --- a/data/Leipzig/E9F5-mensuralRestMinima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E9F6-mensuralRestSemiminima.xml b/data/Leipzig/E9F6-mensuralRestSemiminima.xml deleted file mode 100644 index 277d4259deb..00000000000 --- a/data/Leipzig/E9F6-mensuralRestSemiminima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E9F7-mensuralRestFusa.xml b/data/Leipzig/E9F7-mensuralRestFusa.xml deleted file mode 100644 index cecdcefa7a1..00000000000 --- a/data/Leipzig/E9F7-mensuralRestFusa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/E9F8-mensuralRestSemifusa.xml b/data/Leipzig/E9F8-mensuralRestSemifusa.xml deleted file mode 100644 index 93b389f00f5..00000000000 --- a/data/Leipzig/E9F8-mensuralRestSemifusa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EA02-mensuralCustosUp.xml b/data/Leipzig/EA02-mensuralCustosUp.xml deleted file mode 100644 index 4eb80e8e9fb..00000000000 --- a/data/Leipzig/EA02-mensuralCustosUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EA06-chantCustosStemUpPosMiddle.xml b/data/Leipzig/EA06-chantCustosStemUpPosMiddle.xml deleted file mode 100644 index af3b2563f6a..00000000000 --- a/data/Leipzig/EA06-chantCustosStemUpPosMiddle.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EAA4-wiggleTrill.xml b/data/Leipzig/EAA4-wiggleTrill.xml deleted file mode 100644 index 1b0f5758928..00000000000 --- a/data/Leipzig/EAA4-wiggleTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EAA9-wiggleArpeggiatoUp.xml b/data/Leipzig/EAA9-wiggleArpeggiatoUp.xml deleted file mode 100644 index cc9d56ea24c..00000000000 --- a/data/Leipzig/EAA9-wiggleArpeggiatoUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EAAA-wiggleArpeggiatoDown.xml b/data/Leipzig/EAAA-wiggleArpeggiatoDown.xml deleted file mode 100644 index 37605f7ace8..00000000000 --- a/data/Leipzig/EAAA-wiggleArpeggiatoDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EAAD-wiggleArpeggiatoUpArrow.xml b/data/Leipzig/EAAD-wiggleArpeggiatoUpArrow.xml deleted file mode 100644 index 32f939a00e1..00000000000 --- a/data/Leipzig/EAAD-wiggleArpeggiatoUpArrow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EAAE-wiggleArpeggiatoDownArrow.xml b/data/Leipzig/EAAE-wiggleArpeggiatoDownArrow.xml deleted file mode 100644 index 597edd885d4..00000000000 --- a/data/Leipzig/EAAE-wiggleArpeggiatoDownArrow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EAAF-wiggleGlissando.xml b/data/Leipzig/EAAF-wiggleGlissando.xml deleted file mode 100644 index d24f5e40a7d..00000000000 --- a/data/Leipzig/EAAF-wiggleGlissando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBA7-luteDurationWhole.xml b/data/Leipzig/EBA7-luteDurationWhole.xml deleted file mode 100644 index cb7c7fee76b..00000000000 --- a/data/Leipzig/EBA7-luteDurationWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBA8-luteDurationHalf.xml b/data/Leipzig/EBA8-luteDurationHalf.xml deleted file mode 100644 index 31a0c6c9a1a..00000000000 --- a/data/Leipzig/EBA8-luteDurationHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBA9-luteDurationQuarter.xml b/data/Leipzig/EBA9-luteDurationQuarter.xml deleted file mode 100644 index 29d4700aabc..00000000000 --- a/data/Leipzig/EBA9-luteDurationQuarter.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBAA-luteDuration8th.xml b/data/Leipzig/EBAA-luteDuration8th.xml deleted file mode 100644 index 9320a94523e..00000000000 --- a/data/Leipzig/EBAA-luteDuration8th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBAB-luteDuration16th.xml b/data/Leipzig/EBAB-luteDuration16th.xml deleted file mode 100644 index 3000b69b0b6..00000000000 --- a/data/Leipzig/EBAB-luteDuration16th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBAC-luteDuration32nd.xml b/data/Leipzig/EBAC-luteDuration32nd.xml deleted file mode 100644 index 794441ef9c4..00000000000 --- a/data/Leipzig/EBAC-luteDuration32nd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBC0-luteFrenchFretA.xml b/data/Leipzig/EBC0-luteFrenchFretA.xml deleted file mode 100644 index fa6f1af4a25..00000000000 --- a/data/Leipzig/EBC0-luteFrenchFretA.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBC1-luteFrenchFretB.xml b/data/Leipzig/EBC1-luteFrenchFretB.xml deleted file mode 100644 index f54751de894..00000000000 --- a/data/Leipzig/EBC1-luteFrenchFretB.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBC2-luteFrenchFretC.xml b/data/Leipzig/EBC2-luteFrenchFretC.xml deleted file mode 100644 index f14b6fec755..00000000000 --- a/data/Leipzig/EBC2-luteFrenchFretC.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBC3-luteFrenchFretD.xml b/data/Leipzig/EBC3-luteFrenchFretD.xml deleted file mode 100644 index 11dfb08f562..00000000000 --- a/data/Leipzig/EBC3-luteFrenchFretD.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBC4-luteFrenchFretE.xml b/data/Leipzig/EBC4-luteFrenchFretE.xml deleted file mode 100644 index 07334e3fe75..00000000000 --- a/data/Leipzig/EBC4-luteFrenchFretE.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBC5-luteFrenchFretF.xml b/data/Leipzig/EBC5-luteFrenchFretF.xml deleted file mode 100644 index 85918e4303c..00000000000 --- a/data/Leipzig/EBC5-luteFrenchFretF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBC6-luteFrenchFretG.xml b/data/Leipzig/EBC6-luteFrenchFretG.xml deleted file mode 100644 index c59e8b060fb..00000000000 --- a/data/Leipzig/EBC6-luteFrenchFretG.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBC7-luteFrenchFretH.xml b/data/Leipzig/EBC7-luteFrenchFretH.xml deleted file mode 100644 index 6c89618043b..00000000000 --- a/data/Leipzig/EBC7-luteFrenchFretH.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBC8-luteFrenchFretI.xml b/data/Leipzig/EBC8-luteFrenchFretI.xml deleted file mode 100644 index 06aaa70515a..00000000000 --- a/data/Leipzig/EBC8-luteFrenchFretI.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBC9-luteFrenchFretK.xml b/data/Leipzig/EBC9-luteFrenchFretK.xml deleted file mode 100644 index 216d5fdfdb8..00000000000 --- a/data/Leipzig/EBC9-luteFrenchFretK.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBCA-luteFrenchFretL.xml b/data/Leipzig/EBCA-luteFrenchFretL.xml deleted file mode 100644 index 0a7ba912be2..00000000000 --- a/data/Leipzig/EBCA-luteFrenchFretL.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBCB-luteFrenchFretM.xml b/data/Leipzig/EBCB-luteFrenchFretM.xml deleted file mode 100644 index 4bd0a492e65..00000000000 --- a/data/Leipzig/EBCB-luteFrenchFretM.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBCC-luteFrenchFretN.xml b/data/Leipzig/EBCC-luteFrenchFretN.xml deleted file mode 100644 index bf448db58c5..00000000000 --- a/data/Leipzig/EBCC-luteFrenchFretN.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBE0-luteItalianFret0.xml b/data/Leipzig/EBE0-luteItalianFret0.xml deleted file mode 100644 index 0f2a8b89085..00000000000 --- a/data/Leipzig/EBE0-luteItalianFret0.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBE1-luteItalianFret1.xml b/data/Leipzig/EBE1-luteItalianFret1.xml deleted file mode 100644 index fc86101061b..00000000000 --- a/data/Leipzig/EBE1-luteItalianFret1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBE2-luteItalianFret2.xml b/data/Leipzig/EBE2-luteItalianFret2.xml deleted file mode 100644 index 658537028da..00000000000 --- a/data/Leipzig/EBE2-luteItalianFret2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBE3-luteItalianFret3.xml b/data/Leipzig/EBE3-luteItalianFret3.xml deleted file mode 100644 index 0700c87b51a..00000000000 --- a/data/Leipzig/EBE3-luteItalianFret3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBE4-luteItalianFret4.xml b/data/Leipzig/EBE4-luteItalianFret4.xml deleted file mode 100644 index 36e893c74fd..00000000000 --- a/data/Leipzig/EBE4-luteItalianFret4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBE5-luteItalianFret5.xml b/data/Leipzig/EBE5-luteItalianFret5.xml deleted file mode 100644 index bb0a7f7fbd8..00000000000 --- a/data/Leipzig/EBE5-luteItalianFret5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBE6-luteItalianFret6.xml b/data/Leipzig/EBE6-luteItalianFret6.xml deleted file mode 100644 index 24f00e73bb0..00000000000 --- a/data/Leipzig/EBE6-luteItalianFret6.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBE7-luteItalianFret7.xml b/data/Leipzig/EBE7-luteItalianFret7.xml deleted file mode 100644 index 265215a6c5d..00000000000 --- a/data/Leipzig/EBE7-luteItalianFret7.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBE8-luteItalianFret8.xml b/data/Leipzig/EBE8-luteItalianFret8.xml deleted file mode 100644 index a1cd24ab817..00000000000 --- a/data/Leipzig/EBE8-luteItalianFret8.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/EBE9-luteItalianFret9.xml b/data/Leipzig/EBE9-luteItalianFret9.xml deleted file mode 100644 index 2d0fa809190..00000000000 --- a/data/Leipzig/EBE9-luteItalianFret9.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/ED40-articSoftAccentAbove.xml b/data/Leipzig/ED40-articSoftAccentAbove.xml deleted file mode 100644 index bf32f801058..00000000000 --- a/data/Leipzig/ED40-articSoftAccentAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leipzig/ED41-articSoftAccentBelow.xml b/data/Leipzig/ED41-articSoftAccentBelow.xml deleted file mode 100644 index f01bb829d7e..00000000000 --- a/data/Leipzig/ED41-articSoftAccentBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland.xml b/data/Leland.xml deleted file mode 100644 index 4af642a74fe..00000000000 --- a/data/Leland.xml +++ /dev/null @@ -1,500 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/Leland/E000-brace.xml b/data/Leland/E000-brace.xml deleted file mode 100644 index aed55e73cd8..00000000000 --- a/data/Leland/E000-brace.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E003-bracketTop.xml b/data/Leland/E003-bracketTop.xml deleted file mode 100644 index 0d14159d3d2..00000000000 --- a/data/Leland/E003-bracketTop.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E004-bracketBottom.xml b/data/Leland/E004-bracketBottom.xml deleted file mode 100644 index 31ce43b7675..00000000000 --- a/data/Leland/E004-bracketBottom.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E043-repeatDots.xml b/data/Leland/E043-repeatDots.xml deleted file mode 100644 index 85bd2aeb7d1..00000000000 --- a/data/Leland/E043-repeatDots.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E044-repeatDot.xml b/data/Leland/E044-repeatDot.xml deleted file mode 100644 index 8deb5791c33..00000000000 --- a/data/Leland/E044-repeatDot.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E047-segno.xml b/data/Leland/E047-segno.xml deleted file mode 100644 index 3758e600dc1..00000000000 --- a/data/Leland/E047-segno.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E048-coda.xml b/data/Leland/E048-coda.xml deleted file mode 100644 index 06c8de2ed64..00000000000 --- a/data/Leland/E048-coda.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E049-codaSquare.xml b/data/Leland/E049-codaSquare.xml deleted file mode 100644 index 64696c5d5b7..00000000000 --- a/data/Leland/E049-codaSquare.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E04B-segnoSerpent2.xml b/data/Leland/E04B-segnoSerpent2.xml deleted file mode 100644 index f8b591a4892..00000000000 --- a/data/Leland/E04B-segnoSerpent2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E050-gClef.xml b/data/Leland/E050-gClef.xml deleted file mode 100644 index a8effb793a2..00000000000 --- a/data/Leland/E050-gClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E051-gClef15mb.xml b/data/Leland/E051-gClef15mb.xml deleted file mode 100644 index 66d9f45e63e..00000000000 --- a/data/Leland/E051-gClef15mb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E052-gClef8vb.xml b/data/Leland/E052-gClef8vb.xml deleted file mode 100644 index b00e899008b..00000000000 --- a/data/Leland/E052-gClef8vb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E053-gClef8va.xml b/data/Leland/E053-gClef8va.xml deleted file mode 100644 index 11bb07ea17e..00000000000 --- a/data/Leland/E053-gClef8va.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E054-gClef15ma.xml b/data/Leland/E054-gClef15ma.xml deleted file mode 100644 index 7abb337847f..00000000000 --- a/data/Leland/E054-gClef15ma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E055-gClef8vbOld.xml b/data/Leland/E055-gClef8vbOld.xml deleted file mode 100644 index 4a9bf52797b..00000000000 --- a/data/Leland/E055-gClef8vbOld.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E05C-cClef.xml b/data/Leland/E05C-cClef.xml deleted file mode 100644 index d19584c2226..00000000000 --- a/data/Leland/E05C-cClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E05D-cClef8vb.xml b/data/Leland/E05D-cClef8vb.xml deleted file mode 100644 index 53e9d0410ba..00000000000 --- a/data/Leland/E05D-cClef8vb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E062-fClef.xml b/data/Leland/E062-fClef.xml deleted file mode 100644 index 41a91522ae5..00000000000 --- a/data/Leland/E062-fClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E063-fClef15mb.xml b/data/Leland/E063-fClef15mb.xml deleted file mode 100644 index a2469eac716..00000000000 --- a/data/Leland/E063-fClef15mb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E064-fClef8vb.xml b/data/Leland/E064-fClef8vb.xml deleted file mode 100644 index 63bbec68d07..00000000000 --- a/data/Leland/E064-fClef8vb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E065-fClef8va.xml b/data/Leland/E065-fClef8va.xml deleted file mode 100644 index c2681476384..00000000000 --- a/data/Leland/E065-fClef8va.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E066-fClef15ma.xml b/data/Leland/E066-fClef15ma.xml deleted file mode 100644 index 4f2311cdc17..00000000000 --- a/data/Leland/E066-fClef15ma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E069-unpitchedPercussionClef1.xml b/data/Leland/E069-unpitchedPercussionClef1.xml deleted file mode 100644 index fb01ef04829..00000000000 --- a/data/Leland/E069-unpitchedPercussionClef1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E06A-unpitchedPercussionClef2.xml b/data/Leland/E06A-unpitchedPercussionClef2.xml deleted file mode 100644 index 4f5d7b7b3bd..00000000000 --- a/data/Leland/E06A-unpitchedPercussionClef2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E080-timeSig0.xml b/data/Leland/E080-timeSig0.xml deleted file mode 100644 index 51b50ae15d7..00000000000 --- a/data/Leland/E080-timeSig0.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E081-timeSig1.xml b/data/Leland/E081-timeSig1.xml deleted file mode 100644 index f515c56c25b..00000000000 --- a/data/Leland/E081-timeSig1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E082-timeSig2.xml b/data/Leland/E082-timeSig2.xml deleted file mode 100644 index 9161f7d7dc5..00000000000 --- a/data/Leland/E082-timeSig2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E083-timeSig3.xml b/data/Leland/E083-timeSig3.xml deleted file mode 100644 index 360c7aff935..00000000000 --- a/data/Leland/E083-timeSig3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E084-timeSig4.xml b/data/Leland/E084-timeSig4.xml deleted file mode 100644 index 4f813c57c47..00000000000 --- a/data/Leland/E084-timeSig4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E085-timeSig5.xml b/data/Leland/E085-timeSig5.xml deleted file mode 100644 index b359c5261a1..00000000000 --- a/data/Leland/E085-timeSig5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E086-timeSig6.xml b/data/Leland/E086-timeSig6.xml deleted file mode 100644 index ff4f884f1f5..00000000000 --- a/data/Leland/E086-timeSig6.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E087-timeSig7.xml b/data/Leland/E087-timeSig7.xml deleted file mode 100644 index 516a9040bcc..00000000000 --- a/data/Leland/E087-timeSig7.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E088-timeSig8.xml b/data/Leland/E088-timeSig8.xml deleted file mode 100644 index 1266aecdb2c..00000000000 --- a/data/Leland/E088-timeSig8.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E089-timeSig9.xml b/data/Leland/E089-timeSig9.xml deleted file mode 100644 index 976507e5572..00000000000 --- a/data/Leland/E089-timeSig9.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E08A-timeSigCommon.xml b/data/Leland/E08A-timeSigCommon.xml deleted file mode 100644 index cc2c5e9afd7..00000000000 --- a/data/Leland/E08A-timeSigCommon.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E08B-timeSigCutCommon.xml b/data/Leland/E08B-timeSigCutCommon.xml deleted file mode 100644 index b318e9570ab..00000000000 --- a/data/Leland/E08B-timeSigCutCommon.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E08C-timeSigPlus.xml b/data/Leland/E08C-timeSigPlus.xml deleted file mode 100644 index 849eb2f7957..00000000000 --- a/data/Leland/E08C-timeSigPlus.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E0A0-noteheadDoubleWhole.xml b/data/Leland/E0A0-noteheadDoubleWhole.xml deleted file mode 100644 index 25a1df2940e..00000000000 --- a/data/Leland/E0A0-noteheadDoubleWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E0A1-noteheadDoubleWholeSquare.xml b/data/Leland/E0A1-noteheadDoubleWholeSquare.xml deleted file mode 100644 index 04f6ec88092..00000000000 --- a/data/Leland/E0A1-noteheadDoubleWholeSquare.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E0A2-noteheadWhole.xml b/data/Leland/E0A2-noteheadWhole.xml deleted file mode 100644 index 9b676b3ae6f..00000000000 --- a/data/Leland/E0A2-noteheadWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E0A3-noteheadHalf.xml b/data/Leland/E0A3-noteheadHalf.xml deleted file mode 100644 index c070c60de44..00000000000 --- a/data/Leland/E0A3-noteheadHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E0A4-noteheadBlack.xml b/data/Leland/E0A4-noteheadBlack.xml deleted file mode 100644 index 8f4a8ad8ed5..00000000000 --- a/data/Leland/E0A4-noteheadBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E0A5-noteheadNull.xml b/data/Leland/E0A5-noteheadNull.xml deleted file mode 100644 index 1445fb5f59a..00000000000 --- a/data/Leland/E0A5-noteheadNull.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E0A9-noteheadXBlack.xml b/data/Leland/E0A9-noteheadXBlack.xml deleted file mode 100644 index 5e0a16056fa..00000000000 --- a/data/Leland/E0A9-noteheadXBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E0AF-noteheadPlusBlack.xml b/data/Leland/E0AF-noteheadPlusBlack.xml deleted file mode 100644 index fc5eb98baf7..00000000000 --- a/data/Leland/E0AF-noteheadPlusBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E0D9-noteheadDiamondHalf.xml b/data/Leland/E0D9-noteheadDiamondHalf.xml deleted file mode 100644 index c6826b3662f..00000000000 --- a/data/Leland/E0D9-noteheadDiamondHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E0DB-noteheadDiamondBlack.xml b/data/Leland/E0DB-noteheadDiamondBlack.xml deleted file mode 100644 index bc02f945cda..00000000000 --- a/data/Leland/E0DB-noteheadDiamondBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E0F5-noteheadParenthesisLeft.xml b/data/Leland/E0F5-noteheadParenthesisLeft.xml deleted file mode 100644 index b3cf0c60045..00000000000 --- a/data/Leland/E0F5-noteheadParenthesisLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E0F6-noteheadParenthesisRight.xml b/data/Leland/E0F6-noteheadParenthesisRight.xml deleted file mode 100644 index f93d5edd79d..00000000000 --- a/data/Leland/E0F6-noteheadParenthesisRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E220-tremolo1.xml b/data/Leland/E220-tremolo1.xml deleted file mode 100644 index 69bc49dab41..00000000000 --- a/data/Leland/E220-tremolo1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E221-tremolo2.xml b/data/Leland/E221-tremolo2.xml deleted file mode 100644 index 7fe3b704aca..00000000000 --- a/data/Leland/E221-tremolo2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E222-tremolo3.xml b/data/Leland/E222-tremolo3.xml deleted file mode 100644 index 33e0c9476ef..00000000000 --- a/data/Leland/E222-tremolo3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E223-tremolo4.xml b/data/Leland/E223-tremolo4.xml deleted file mode 100644 index d14f04e267d..00000000000 --- a/data/Leland/E223-tremolo4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E224-tremolo5.xml b/data/Leland/E224-tremolo5.xml deleted file mode 100644 index 7c8fea648aa..00000000000 --- a/data/Leland/E224-tremolo5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E22A-buzzRoll.xml b/data/Leland/E22A-buzzRoll.xml deleted file mode 100644 index 6c6054fe635..00000000000 --- a/data/Leland/E22A-buzzRoll.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E240-flag8thUp.xml b/data/Leland/E240-flag8thUp.xml deleted file mode 100644 index 3925eeb7c1c..00000000000 --- a/data/Leland/E240-flag8thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E241-flag8thDown.xml b/data/Leland/E241-flag8thDown.xml deleted file mode 100644 index ea66b7ac65f..00000000000 --- a/data/Leland/E241-flag8thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E242-flag16thUp.xml b/data/Leland/E242-flag16thUp.xml deleted file mode 100644 index 7c3ac178e7e..00000000000 --- a/data/Leland/E242-flag16thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E243-flag16thDown.xml b/data/Leland/E243-flag16thDown.xml deleted file mode 100644 index 5a937f9ef1d..00000000000 --- a/data/Leland/E243-flag16thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E244-flag32ndUp.xml b/data/Leland/E244-flag32ndUp.xml deleted file mode 100644 index 77e5e384920..00000000000 --- a/data/Leland/E244-flag32ndUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E245-flag32ndDown.xml b/data/Leland/E245-flag32ndDown.xml deleted file mode 100644 index 0e0e2434bf9..00000000000 --- a/data/Leland/E245-flag32ndDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E246-flag64thUp.xml b/data/Leland/E246-flag64thUp.xml deleted file mode 100644 index 10dd7cd74bb..00000000000 --- a/data/Leland/E246-flag64thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E247-flag64thDown.xml b/data/Leland/E247-flag64thDown.xml deleted file mode 100644 index 59a10680bea..00000000000 --- a/data/Leland/E247-flag64thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E248-flag128thUp.xml b/data/Leland/E248-flag128thUp.xml deleted file mode 100644 index 8e0863389f8..00000000000 --- a/data/Leland/E248-flag128thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E249-flag128thDown.xml b/data/Leland/E249-flag128thDown.xml deleted file mode 100644 index 01d09f79b04..00000000000 --- a/data/Leland/E249-flag128thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E24A-flag256thUp.xml b/data/Leland/E24A-flag256thUp.xml deleted file mode 100644 index 6a6b13931f7..00000000000 --- a/data/Leland/E24A-flag256thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E24B-flag256thDown.xml b/data/Leland/E24B-flag256thDown.xml deleted file mode 100644 index 00a55a2dd2b..00000000000 --- a/data/Leland/E24B-flag256thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E24C-flag512thUp.xml b/data/Leland/E24C-flag512thUp.xml deleted file mode 100644 index fae14c0309d..00000000000 --- a/data/Leland/E24C-flag512thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E24D-flag512thDown.xml b/data/Leland/E24D-flag512thDown.xml deleted file mode 100644 index 1043d51ea02..00000000000 --- a/data/Leland/E24D-flag512thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E24E-flag1024thUp.xml b/data/Leland/E24E-flag1024thUp.xml deleted file mode 100644 index c6aa7e2d1ad..00000000000 --- a/data/Leland/E24E-flag1024thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E24F-flag1024thDown.xml b/data/Leland/E24F-flag1024thDown.xml deleted file mode 100644 index 0c52b44610d..00000000000 --- a/data/Leland/E24F-flag1024thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E260-accidentalFlat.xml b/data/Leland/E260-accidentalFlat.xml deleted file mode 100644 index a5dc2c8e915..00000000000 --- a/data/Leland/E260-accidentalFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E261-accidentalNatural.xml b/data/Leland/E261-accidentalNatural.xml deleted file mode 100644 index cfdb58b6c54..00000000000 --- a/data/Leland/E261-accidentalNatural.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E262-accidentalSharp.xml b/data/Leland/E262-accidentalSharp.xml deleted file mode 100644 index 496ca7fd365..00000000000 --- a/data/Leland/E262-accidentalSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E263-accidentalDoubleSharp.xml b/data/Leland/E263-accidentalDoubleSharp.xml deleted file mode 100644 index fb9c31a1ce5..00000000000 --- a/data/Leland/E263-accidentalDoubleSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E264-accidentalDoubleFlat.xml b/data/Leland/E264-accidentalDoubleFlat.xml deleted file mode 100644 index ee6ae049446..00000000000 --- a/data/Leland/E264-accidentalDoubleFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E265-accidentalTripleSharp.xml b/data/Leland/E265-accidentalTripleSharp.xml deleted file mode 100644 index ddf0d23562c..00000000000 --- a/data/Leland/E265-accidentalTripleSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E266-accidentalTripleFlat.xml b/data/Leland/E266-accidentalTripleFlat.xml deleted file mode 100644 index 8f340714c7d..00000000000 --- a/data/Leland/E266-accidentalTripleFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E267-accidentalNaturalFlat.xml b/data/Leland/E267-accidentalNaturalFlat.xml deleted file mode 100644 index e20d39e2a63..00000000000 --- a/data/Leland/E267-accidentalNaturalFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E268-accidentalNaturalSharp.xml b/data/Leland/E268-accidentalNaturalSharp.xml deleted file mode 100644 index 900bf4f3957..00000000000 --- a/data/Leland/E268-accidentalNaturalSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E269-accidentalSharpSharp.xml b/data/Leland/E269-accidentalSharpSharp.xml deleted file mode 100644 index 1df34c252e1..00000000000 --- a/data/Leland/E269-accidentalSharpSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E26A-accidentalParensLeft.xml b/data/Leland/E26A-accidentalParensLeft.xml deleted file mode 100644 index 996343fb2f3..00000000000 --- a/data/Leland/E26A-accidentalParensLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E26B-accidentalParensRight.xml b/data/Leland/E26B-accidentalParensRight.xml deleted file mode 100644 index df3564cf342..00000000000 --- a/data/Leland/E26B-accidentalParensRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E26C-accidentalBracketLeft.xml b/data/Leland/E26C-accidentalBracketLeft.xml deleted file mode 100644 index 7846d1ec1a7..00000000000 --- a/data/Leland/E26C-accidentalBracketLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E26D-accidentalBracketRight.xml b/data/Leland/E26D-accidentalBracketRight.xml deleted file mode 100644 index 8ec83819d17..00000000000 --- a/data/Leland/E26D-accidentalBracketRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E270-accidentalQuarterToneFlatArrowUp.xml b/data/Leland/E270-accidentalQuarterToneFlatArrowUp.xml deleted file mode 100644 index f8d6a695a3e..00000000000 --- a/data/Leland/E270-accidentalQuarterToneFlatArrowUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E271-accidentalThreeQuarterTonesFlatArrowDown.xml b/data/Leland/E271-accidentalThreeQuarterTonesFlatArrowDown.xml deleted file mode 100644 index 69f7b8872b7..00000000000 --- a/data/Leland/E271-accidentalThreeQuarterTonesFlatArrowDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E272-accidentalQuarterToneSharpNaturalArrowUp.xml b/data/Leland/E272-accidentalQuarterToneSharpNaturalArrowUp.xml deleted file mode 100644 index 50df4dd2385..00000000000 --- a/data/Leland/E272-accidentalQuarterToneSharpNaturalArrowUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E273-accidentalQuarterToneFlatNaturalArrowDown.xml b/data/Leland/E273-accidentalQuarterToneFlatNaturalArrowDown.xml deleted file mode 100644 index 4c3ea878915..00000000000 --- a/data/Leland/E273-accidentalQuarterToneFlatNaturalArrowDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E274-accidentalThreeQuarterTonesSharpArrowUp.xml b/data/Leland/E274-accidentalThreeQuarterTonesSharpArrowUp.xml deleted file mode 100644 index 01c06ebdba3..00000000000 --- a/data/Leland/E274-accidentalThreeQuarterTonesSharpArrowUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E275-accidentalQuarterToneSharpArrowDown.xml b/data/Leland/E275-accidentalQuarterToneSharpArrowDown.xml deleted file mode 100644 index 0fbac18fb0e..00000000000 --- a/data/Leland/E275-accidentalQuarterToneSharpArrowDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E280-accidentalQuarterToneFlatStein.xml b/data/Leland/E280-accidentalQuarterToneFlatStein.xml deleted file mode 100644 index a474ae05f2a..00000000000 --- a/data/Leland/E280-accidentalQuarterToneFlatStein.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E281-accidentalThreeQuarterTonesFlatZimmermann.xml b/data/Leland/E281-accidentalThreeQuarterTonesFlatZimmermann.xml deleted file mode 100644 index e3bca3e287a..00000000000 --- a/data/Leland/E281-accidentalThreeQuarterTonesFlatZimmermann.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E282-accidentalQuarterToneSharpStein.xml b/data/Leland/E282-accidentalQuarterToneSharpStein.xml deleted file mode 100644 index 89d4eaa92ca..00000000000 --- a/data/Leland/E282-accidentalQuarterToneSharpStein.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E283-accidentalThreeQuarterTonesSharpStein.xml b/data/Leland/E283-accidentalThreeQuarterTonesSharpStein.xml deleted file mode 100644 index df2c517cd01..00000000000 --- a/data/Leland/E283-accidentalThreeQuarterTonesSharpStein.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E440-accidentalBuyukMucennebFlat.xml b/data/Leland/E440-accidentalBuyukMucennebFlat.xml deleted file mode 100644 index 1766dca60f9..00000000000 --- a/data/Leland/E440-accidentalBuyukMucennebFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E442-accidentalBakiyeFlat.xml b/data/Leland/E442-accidentalBakiyeFlat.xml deleted file mode 100644 index 341a77d7bd0..00000000000 --- a/data/Leland/E442-accidentalBakiyeFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E446-accidentalKucukMucennebSharp.xml b/data/Leland/E446-accidentalKucukMucennebSharp.xml deleted file mode 100644 index 755a41c63df..00000000000 --- a/data/Leland/E446-accidentalKucukMucennebSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E447-accidentalBuyukMucennebSharp.xml b/data/Leland/E447-accidentalBuyukMucennebSharp.xml deleted file mode 100644 index 94a16dd08e9..00000000000 --- a/data/Leland/E447-accidentalBuyukMucennebSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4A0-articAccentAbove.xml b/data/Leland/E4A0-articAccentAbove.xml deleted file mode 100644 index 7ed454f0cd2..00000000000 --- a/data/Leland/E4A0-articAccentAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4A1-articAccentBelow.xml b/data/Leland/E4A1-articAccentBelow.xml deleted file mode 100644 index f047b4a2c52..00000000000 --- a/data/Leland/E4A1-articAccentBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4A2-articStaccatoAbove.xml b/data/Leland/E4A2-articStaccatoAbove.xml deleted file mode 100644 index c754f478063..00000000000 --- a/data/Leland/E4A2-articStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4A3-articStaccatoBelow.xml b/data/Leland/E4A3-articStaccatoBelow.xml deleted file mode 100644 index 0b2f9391576..00000000000 --- a/data/Leland/E4A3-articStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4A4-articTenutoAbove.xml b/data/Leland/E4A4-articTenutoAbove.xml deleted file mode 100644 index 8daefe2f772..00000000000 --- a/data/Leland/E4A4-articTenutoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4A5-articTenutoBelow.xml b/data/Leland/E4A5-articTenutoBelow.xml deleted file mode 100644 index df2742b4d55..00000000000 --- a/data/Leland/E4A5-articTenutoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4A6-articStaccatissimoAbove.xml b/data/Leland/E4A6-articStaccatissimoAbove.xml deleted file mode 100644 index af3bc700bf0..00000000000 --- a/data/Leland/E4A6-articStaccatissimoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4A7-articStaccatissimoBelow.xml b/data/Leland/E4A7-articStaccatissimoBelow.xml deleted file mode 100644 index 4e8d7deeedb..00000000000 --- a/data/Leland/E4A7-articStaccatissimoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4A8-articStaccatissimoWedgeAbove.xml b/data/Leland/E4A8-articStaccatissimoWedgeAbove.xml deleted file mode 100644 index 72e2b4cbd71..00000000000 --- a/data/Leland/E4A8-articStaccatissimoWedgeAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4A9-articStaccatissimoWedgeBelow.xml b/data/Leland/E4A9-articStaccatissimoWedgeBelow.xml deleted file mode 100644 index c6b5390a125..00000000000 --- a/data/Leland/E4A9-articStaccatissimoWedgeBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4AC-articMarcatoAbove.xml b/data/Leland/E4AC-articMarcatoAbove.xml deleted file mode 100644 index cffbc41e212..00000000000 --- a/data/Leland/E4AC-articMarcatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4AD-articMarcatoBelow.xml b/data/Leland/E4AD-articMarcatoBelow.xml deleted file mode 100644 index cbcf8cbaeba..00000000000 --- a/data/Leland/E4AD-articMarcatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4AE-articMarcatoStaccatoAbove.xml b/data/Leland/E4AE-articMarcatoStaccatoAbove.xml deleted file mode 100644 index d33085ff393..00000000000 --- a/data/Leland/E4AE-articMarcatoStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4AF-articMarcatoStaccatoBelow.xml b/data/Leland/E4AF-articMarcatoStaccatoBelow.xml deleted file mode 100644 index 9306d4744a4..00000000000 --- a/data/Leland/E4AF-articMarcatoStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4B0-articAccentStaccatoAbove.xml b/data/Leland/E4B0-articAccentStaccatoAbove.xml deleted file mode 100644 index 3386239c678..00000000000 --- a/data/Leland/E4B0-articAccentStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4B1-articAccentStaccatoBelow.xml b/data/Leland/E4B1-articAccentStaccatoBelow.xml deleted file mode 100644 index b710d5dc582..00000000000 --- a/data/Leland/E4B1-articAccentStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4B2-articTenutoStaccatoAbove.xml b/data/Leland/E4B2-articTenutoStaccatoAbove.xml deleted file mode 100644 index e880f82f15c..00000000000 --- a/data/Leland/E4B2-articTenutoStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4B3-articTenutoStaccatoBelow.xml b/data/Leland/E4B3-articTenutoStaccatoBelow.xml deleted file mode 100644 index 1a6af0e538f..00000000000 --- a/data/Leland/E4B3-articTenutoStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4B4-articTenutoAccentAbove.xml b/data/Leland/E4B4-articTenutoAccentAbove.xml deleted file mode 100644 index 167de076d07..00000000000 --- a/data/Leland/E4B4-articTenutoAccentAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4B5-articTenutoAccentBelow.xml b/data/Leland/E4B5-articTenutoAccentBelow.xml deleted file mode 100644 index e87c9b8bcf0..00000000000 --- a/data/Leland/E4B5-articTenutoAccentBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4B6-articStressAbove.xml b/data/Leland/E4B6-articStressAbove.xml deleted file mode 100644 index 89b1dbb4b06..00000000000 --- a/data/Leland/E4B6-articStressAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4B7-articStressBelow.xml b/data/Leland/E4B7-articStressBelow.xml deleted file mode 100644 index f7251e8ae2b..00000000000 --- a/data/Leland/E4B7-articStressBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4B8-articUnstressAbove.xml b/data/Leland/E4B8-articUnstressAbove.xml deleted file mode 100644 index 7c695a2e3d0..00000000000 --- a/data/Leland/E4B8-articUnstressAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4B9-articUnstressBelow.xml b/data/Leland/E4B9-articUnstressBelow.xml deleted file mode 100644 index 52cd172ecb6..00000000000 --- a/data/Leland/E4B9-articUnstressBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4BA-articLaissezVibrerAbove.xml b/data/Leland/E4BA-articLaissezVibrerAbove.xml deleted file mode 100644 index 7887dc4e325..00000000000 --- a/data/Leland/E4BA-articLaissezVibrerAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4BB-articLaissezVibrerBelow.xml b/data/Leland/E4BB-articLaissezVibrerBelow.xml deleted file mode 100644 index 3257923db4b..00000000000 --- a/data/Leland/E4BB-articLaissezVibrerBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4BC-articMarcatoTenutoAbove.xml b/data/Leland/E4BC-articMarcatoTenutoAbove.xml deleted file mode 100644 index 433d6fb6727..00000000000 --- a/data/Leland/E4BC-articMarcatoTenutoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4BD-articMarcatoTenutoBelow.xml b/data/Leland/E4BD-articMarcatoTenutoBelow.xml deleted file mode 100644 index b33fe22a1d6..00000000000 --- a/data/Leland/E4BD-articMarcatoTenutoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4C0-fermataAbove.xml b/data/Leland/E4C0-fermataAbove.xml deleted file mode 100644 index c215ab17196..00000000000 --- a/data/Leland/E4C0-fermataAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4C1-fermataBelow.xml b/data/Leland/E4C1-fermataBelow.xml deleted file mode 100644 index 80c3da27c26..00000000000 --- a/data/Leland/E4C1-fermataBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4C4-fermataShortAbove.xml b/data/Leland/E4C4-fermataShortAbove.xml deleted file mode 100644 index 51327554ae9..00000000000 --- a/data/Leland/E4C4-fermataShortAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4C5-fermataShortBelow.xml b/data/Leland/E4C5-fermataShortBelow.xml deleted file mode 100644 index 0f2ee7ea49e..00000000000 --- a/data/Leland/E4C5-fermataShortBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4C6-fermataLongAbove.xml b/data/Leland/E4C6-fermataLongAbove.xml deleted file mode 100644 index c856398ff52..00000000000 --- a/data/Leland/E4C6-fermataLongAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4C7-fermataLongBelow.xml b/data/Leland/E4C7-fermataLongBelow.xml deleted file mode 100644 index 14271b3efaa..00000000000 --- a/data/Leland/E4C7-fermataLongBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4C8-fermataVeryLongAbove.xml b/data/Leland/E4C8-fermataVeryLongAbove.xml deleted file mode 100644 index 67d360d1ee9..00000000000 --- a/data/Leland/E4C8-fermataVeryLongAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4C9-fermataVeryLongBelow.xml b/data/Leland/E4C9-fermataVeryLongBelow.xml deleted file mode 100644 index 029ef76fa2f..00000000000 --- a/data/Leland/E4C9-fermataVeryLongBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4CE-breathMarkComma.xml b/data/Leland/E4CE-breathMarkComma.xml deleted file mode 100644 index 1956f5e68d1..00000000000 --- a/data/Leland/E4CE-breathMarkComma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4E0-restMaxima.xml b/data/Leland/E4E0-restMaxima.xml deleted file mode 100644 index 0e9ecbbe5f0..00000000000 --- a/data/Leland/E4E0-restMaxima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4E1-restLonga.xml b/data/Leland/E4E1-restLonga.xml deleted file mode 100644 index ae80e8cd20b..00000000000 --- a/data/Leland/E4E1-restLonga.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4E2-restDoubleWhole.xml b/data/Leland/E4E2-restDoubleWhole.xml deleted file mode 100644 index 966dfb8b5c7..00000000000 --- a/data/Leland/E4E2-restDoubleWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4E3-restWhole.xml b/data/Leland/E4E3-restWhole.xml deleted file mode 100644 index bb35a5683d5..00000000000 --- a/data/Leland/E4E3-restWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4E4-restHalf.xml b/data/Leland/E4E4-restHalf.xml deleted file mode 100644 index 17320e9bafc..00000000000 --- a/data/Leland/E4E4-restHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4E5-restQuarter.xml b/data/Leland/E4E5-restQuarter.xml deleted file mode 100644 index 953c9129d36..00000000000 --- a/data/Leland/E4E5-restQuarter.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4E6-rest8th.xml b/data/Leland/E4E6-rest8th.xml deleted file mode 100644 index dff6f81aba9..00000000000 --- a/data/Leland/E4E6-rest8th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4E7-rest16th.xml b/data/Leland/E4E7-rest16th.xml deleted file mode 100644 index 2f698ee6a1e..00000000000 --- a/data/Leland/E4E7-rest16th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4E8-rest32nd.xml b/data/Leland/E4E8-rest32nd.xml deleted file mode 100644 index ccc044cc713..00000000000 --- a/data/Leland/E4E8-rest32nd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4E9-rest64th.xml b/data/Leland/E4E9-rest64th.xml deleted file mode 100644 index 38321608504..00000000000 --- a/data/Leland/E4E9-rest64th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4EA-rest128th.xml b/data/Leland/E4EA-rest128th.xml deleted file mode 100644 index 9733c3227b7..00000000000 --- a/data/Leland/E4EA-rest128th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4EB-rest256th.xml b/data/Leland/E4EB-rest256th.xml deleted file mode 100644 index 7cef136e770..00000000000 --- a/data/Leland/E4EB-rest256th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4EC-rest512th.xml b/data/Leland/E4EC-rest512th.xml deleted file mode 100644 index 1ac3f619651..00000000000 --- a/data/Leland/E4EC-rest512th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4ED-rest1024th.xml b/data/Leland/E4ED-rest1024th.xml deleted file mode 100644 index d2607a906ef..00000000000 --- a/data/Leland/E4ED-rest1024th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4F2-restQuarterOld.xml b/data/Leland/E4F2-restQuarterOld.xml deleted file mode 100644 index bf39a0d8b86..00000000000 --- a/data/Leland/E4F2-restQuarterOld.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E4F6-restQuarterZ.xml b/data/Leland/E4F6-restQuarterZ.xml deleted file mode 100644 index 518c5ddd0fe..00000000000 --- a/data/Leland/E4F6-restQuarterZ.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E500-repeat1Bar.xml b/data/Leland/E500-repeat1Bar.xml deleted file mode 100644 index e027e8011de..00000000000 --- a/data/Leland/E500-repeat1Bar.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E501-repeat2Bars.xml b/data/Leland/E501-repeat2Bars.xml deleted file mode 100644 index 645086c7a3b..00000000000 --- a/data/Leland/E501-repeat2Bars.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E502-repeat4Bars.xml b/data/Leland/E502-repeat4Bars.xml deleted file mode 100644 index 7d3ef576ead..00000000000 --- a/data/Leland/E502-repeat4Bars.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E503-repeatBarUpperDot.xml b/data/Leland/E503-repeatBarUpperDot.xml deleted file mode 100644 index 7b7bea226d1..00000000000 --- a/data/Leland/E503-repeatBarUpperDot.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E504-repeatBarSlash.xml b/data/Leland/E504-repeatBarSlash.xml deleted file mode 100644 index 305eb6bce50..00000000000 --- a/data/Leland/E504-repeatBarSlash.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E505-repeatBarLowerDot.xml b/data/Leland/E505-repeatBarLowerDot.xml deleted file mode 100644 index 2d27de46640..00000000000 --- a/data/Leland/E505-repeatBarLowerDot.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E510-ottava.xml b/data/Leland/E510-ottava.xml deleted file mode 100644 index 7e1b9252ff4..00000000000 --- a/data/Leland/E510-ottava.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E511-ottavaAlta.xml b/data/Leland/E511-ottavaAlta.xml deleted file mode 100644 index f87b42850fe..00000000000 --- a/data/Leland/E511-ottavaAlta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E512-ottavaBassa.xml b/data/Leland/E512-ottavaBassa.xml deleted file mode 100644 index 10a36f6be87..00000000000 --- a/data/Leland/E512-ottavaBassa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E513-ottavaBassaBa.xml b/data/Leland/E513-ottavaBassaBa.xml deleted file mode 100644 index 198afa48369..00000000000 --- a/data/Leland/E513-ottavaBassaBa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E514-quindicesima.xml b/data/Leland/E514-quindicesima.xml deleted file mode 100644 index 467011cbe39..00000000000 --- a/data/Leland/E514-quindicesima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E515-quindicesimaAlta.xml b/data/Leland/E515-quindicesimaAlta.xml deleted file mode 100644 index 98924a48cc9..00000000000 --- a/data/Leland/E515-quindicesimaAlta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E516-quindicesimaBassa.xml b/data/Leland/E516-quindicesimaBassa.xml deleted file mode 100644 index c275de27bf7..00000000000 --- a/data/Leland/E516-quindicesimaBassa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E517-ventiduesima.xml b/data/Leland/E517-ventiduesima.xml deleted file mode 100644 index e6071810db2..00000000000 --- a/data/Leland/E517-ventiduesima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E518-ventiduesimaAlta.xml b/data/Leland/E518-ventiduesimaAlta.xml deleted file mode 100644 index cad95d5ac4f..00000000000 --- a/data/Leland/E518-ventiduesimaAlta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E519-ventiduesimaBassa.xml b/data/Leland/E519-ventiduesimaBassa.xml deleted file mode 100644 index 60c19b5dfbe..00000000000 --- a/data/Leland/E519-ventiduesimaBassa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E51A-octaveParensLeft.xml b/data/Leland/E51A-octaveParensLeft.xml deleted file mode 100644 index bf505fd7638..00000000000 --- a/data/Leland/E51A-octaveParensLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E51B-octaveParensRight.xml b/data/Leland/E51B-octaveParensRight.xml deleted file mode 100644 index 52c0804a84b..00000000000 --- a/data/Leland/E51B-octaveParensRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E51C-ottavaBassaVb.xml b/data/Leland/E51C-ottavaBassaVb.xml deleted file mode 100644 index 04e726a4fef..00000000000 --- a/data/Leland/E51C-ottavaBassaVb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E51D-quindicesimaBassaMb.xml b/data/Leland/E51D-quindicesimaBassaMb.xml deleted file mode 100644 index 71df519a46f..00000000000 --- a/data/Leland/E51D-quindicesimaBassaMb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E51E-ventiduesimaBassaMb.xml b/data/Leland/E51E-ventiduesimaBassaMb.xml deleted file mode 100644 index 7d6a3f6c685..00000000000 --- a/data/Leland/E51E-ventiduesimaBassaMb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E520-dynamicPiano.xml b/data/Leland/E520-dynamicPiano.xml deleted file mode 100644 index ea36a870d3b..00000000000 --- a/data/Leland/E520-dynamicPiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E521-dynamicMezzo.xml b/data/Leland/E521-dynamicMezzo.xml deleted file mode 100644 index ee8da9c4c7f..00000000000 --- a/data/Leland/E521-dynamicMezzo.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E522-dynamicForte.xml b/data/Leland/E522-dynamicForte.xml deleted file mode 100644 index 7bac2fba2fb..00000000000 --- a/data/Leland/E522-dynamicForte.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E523-dynamicRinforzando.xml b/data/Leland/E523-dynamicRinforzando.xml deleted file mode 100644 index 74302a1dd42..00000000000 --- a/data/Leland/E523-dynamicRinforzando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E524-dynamicSforzando.xml b/data/Leland/E524-dynamicSforzando.xml deleted file mode 100644 index 238821bc612..00000000000 --- a/data/Leland/E524-dynamicSforzando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E525-dynamicZ.xml b/data/Leland/E525-dynamicZ.xml deleted file mode 100644 index 4e61dcfcfc4..00000000000 --- a/data/Leland/E525-dynamicZ.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E526-dynamicNiente.xml b/data/Leland/E526-dynamicNiente.xml deleted file mode 100644 index 5b2ac993997..00000000000 --- a/data/Leland/E526-dynamicNiente.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E527-dynamicPPPPPP.xml b/data/Leland/E527-dynamicPPPPPP.xml deleted file mode 100644 index a5375832767..00000000000 --- a/data/Leland/E527-dynamicPPPPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E528-dynamicPPPPP.xml b/data/Leland/E528-dynamicPPPPP.xml deleted file mode 100644 index 8b4bed08b78..00000000000 --- a/data/Leland/E528-dynamicPPPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E529-dynamicPPPP.xml b/data/Leland/E529-dynamicPPPP.xml deleted file mode 100644 index eb5e7254885..00000000000 --- a/data/Leland/E529-dynamicPPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E52A-dynamicPPP.xml b/data/Leland/E52A-dynamicPPP.xml deleted file mode 100644 index e5d1725cfde..00000000000 --- a/data/Leland/E52A-dynamicPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E52B-dynamicPP.xml b/data/Leland/E52B-dynamicPP.xml deleted file mode 100644 index ebbe3a4d30f..00000000000 --- a/data/Leland/E52B-dynamicPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E52C-dynamicMP.xml b/data/Leland/E52C-dynamicMP.xml deleted file mode 100644 index ac3045504b4..00000000000 --- a/data/Leland/E52C-dynamicMP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E52D-dynamicMF.xml b/data/Leland/E52D-dynamicMF.xml deleted file mode 100644 index 200303b6f25..00000000000 --- a/data/Leland/E52D-dynamicMF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E52E-dynamicPF.xml b/data/Leland/E52E-dynamicPF.xml deleted file mode 100644 index 2ca03f720e5..00000000000 --- a/data/Leland/E52E-dynamicPF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E52F-dynamicFF.xml b/data/Leland/E52F-dynamicFF.xml deleted file mode 100644 index d8c288d9edc..00000000000 --- a/data/Leland/E52F-dynamicFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E530-dynamicFFF.xml b/data/Leland/E530-dynamicFFF.xml deleted file mode 100644 index 52f9451f93f..00000000000 --- a/data/Leland/E530-dynamicFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E531-dynamicFFFF.xml b/data/Leland/E531-dynamicFFFF.xml deleted file mode 100644 index c1885d2fae7..00000000000 --- a/data/Leland/E531-dynamicFFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E532-dynamicFFFFF.xml b/data/Leland/E532-dynamicFFFFF.xml deleted file mode 100644 index a556e8063b0..00000000000 --- a/data/Leland/E532-dynamicFFFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E533-dynamicFFFFFF.xml b/data/Leland/E533-dynamicFFFFFF.xml deleted file mode 100644 index e4fa1ec743c..00000000000 --- a/data/Leland/E533-dynamicFFFFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E534-dynamicFortePiano.xml b/data/Leland/E534-dynamicFortePiano.xml deleted file mode 100644 index 63bb4a22fb8..00000000000 --- a/data/Leland/E534-dynamicFortePiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E535-dynamicForzando.xml b/data/Leland/E535-dynamicForzando.xml deleted file mode 100644 index edd96bdca2f..00000000000 --- a/data/Leland/E535-dynamicForzando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E536-dynamicSforzando1.xml b/data/Leland/E536-dynamicSforzando1.xml deleted file mode 100644 index 7c88fabc820..00000000000 --- a/data/Leland/E536-dynamicSforzando1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E537-dynamicSforzandoPiano.xml b/data/Leland/E537-dynamicSforzandoPiano.xml deleted file mode 100644 index f425587af98..00000000000 --- a/data/Leland/E537-dynamicSforzandoPiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E538-dynamicSforzandoPianissimo.xml b/data/Leland/E538-dynamicSforzandoPianissimo.xml deleted file mode 100644 index a9d63cf5718..00000000000 --- a/data/Leland/E538-dynamicSforzandoPianissimo.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E539-dynamicSforzato.xml b/data/Leland/E539-dynamicSforzato.xml deleted file mode 100644 index 9cc1cfc6b02..00000000000 --- a/data/Leland/E539-dynamicSforzato.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E53A-dynamicSforzatoPiano.xml b/data/Leland/E53A-dynamicSforzatoPiano.xml deleted file mode 100644 index 4c87e5e3a55..00000000000 --- a/data/Leland/E53A-dynamicSforzatoPiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E53B-dynamicSforzatoFF.xml b/data/Leland/E53B-dynamicSforzatoFF.xml deleted file mode 100644 index 53362b11923..00000000000 --- a/data/Leland/E53B-dynamicSforzatoFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E53C-dynamicRinforzando1.xml b/data/Leland/E53C-dynamicRinforzando1.xml deleted file mode 100644 index 4311849be0a..00000000000 --- a/data/Leland/E53C-dynamicRinforzando1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E53D-dynamicRinforzando2.xml b/data/Leland/E53D-dynamicRinforzando2.xml deleted file mode 100644 index 49ea3f90897..00000000000 --- a/data/Leland/E53D-dynamicRinforzando2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E566-ornamentTrill.xml b/data/Leland/E566-ornamentTrill.xml deleted file mode 100644 index 82e76243450..00000000000 --- a/data/Leland/E566-ornamentTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E567-ornamentTurn.xml b/data/Leland/E567-ornamentTurn.xml deleted file mode 100644 index 70c9220d079..00000000000 --- a/data/Leland/E567-ornamentTurn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E568-ornamentTurnInverted.xml b/data/Leland/E568-ornamentTurnInverted.xml deleted file mode 100644 index a854537c6de..00000000000 --- a/data/Leland/E568-ornamentTurnInverted.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E569-ornamentTurnSlash.xml b/data/Leland/E569-ornamentTurnSlash.xml deleted file mode 100644 index 1cfbfec2c30..00000000000 --- a/data/Leland/E569-ornamentTurnSlash.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E56A-ornamentTurnUp.xml b/data/Leland/E56A-ornamentTurnUp.xml deleted file mode 100644 index 4aef71b0c1d..00000000000 --- a/data/Leland/E56A-ornamentTurnUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E56B-ornamentTurnUpS.xml b/data/Leland/E56B-ornamentTurnUpS.xml deleted file mode 100644 index 1cc8149d4ab..00000000000 --- a/data/Leland/E56B-ornamentTurnUpS.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E56C-ornamentShortTrill.xml b/data/Leland/E56C-ornamentShortTrill.xml deleted file mode 100644 index cb74be9fa38..00000000000 --- a/data/Leland/E56C-ornamentShortTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E56D-ornamentMordent.xml b/data/Leland/E56D-ornamentMordent.xml deleted file mode 100644 index d71d56aff95..00000000000 --- a/data/Leland/E56D-ornamentMordent.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E56E-ornamentTremblement.xml b/data/Leland/E56E-ornamentTremblement.xml deleted file mode 100644 index 5269d61f476..00000000000 --- a/data/Leland/E56E-ornamentTremblement.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E56F-ornamentHaydn.xml b/data/Leland/E56F-ornamentHaydn.xml deleted file mode 100644 index 2701933dcd1..00000000000 --- a/data/Leland/E56F-ornamentHaydn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E583-ornamentVerticalLine.xml b/data/Leland/E583-ornamentVerticalLine.xml deleted file mode 100644 index 6f82578df84..00000000000 --- a/data/Leland/E583-ornamentVerticalLine.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E587-ornamentSchleifer.xml b/data/Leland/E587-ornamentSchleifer.xml deleted file mode 100644 index b689a2e5b30..00000000000 --- a/data/Leland/E587-ornamentSchleifer.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E59D-ornamentZigZagLineNoRightEnd.xml b/data/Leland/E59D-ornamentZigZagLineNoRightEnd.xml deleted file mode 100644 index 59d5fccbc6f..00000000000 --- a/data/Leland/E59D-ornamentZigZagLineNoRightEnd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E59E-ornamentZigZagLineWithRightEnd.xml b/data/Leland/E59E-ornamentZigZagLineWithRightEnd.xml deleted file mode 100644 index 78732667e97..00000000000 --- a/data/Leland/E59E-ornamentZigZagLineWithRightEnd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E5B2-ornamentPrecompAppoggTrill.xml b/data/Leland/E5B2-ornamentPrecompAppoggTrill.xml deleted file mode 100644 index f55bf95981d..00000000000 --- a/data/Leland/E5B2-ornamentPrecompAppoggTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E5B5-ornamentPrecompSlideTrillDAnglebert.xml b/data/Leland/E5B5-ornamentPrecompSlideTrillDAnglebert.xml deleted file mode 100644 index 259d6f4ea35..00000000000 --- a/data/Leland/E5B5-ornamentPrecompSlideTrillDAnglebert.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E5B8-ornamentPrecompSlideTrillBach.xml b/data/Leland/E5B8-ornamentPrecompSlideTrillBach.xml deleted file mode 100644 index dd0dff58ad9..00000000000 --- a/data/Leland/E5B8-ornamentPrecompSlideTrillBach.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E5BB-ornamentPrecompTrillSuffixDandrieu.xml b/data/Leland/E5BB-ornamentPrecompTrillSuffixDandrieu.xml deleted file mode 100644 index 0ebcb0fcc9e..00000000000 --- a/data/Leland/E5BB-ornamentPrecompTrillSuffixDandrieu.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E5BC-ornamentPrecompPortDeVoixMordent.xml b/data/Leland/E5BC-ornamentPrecompPortDeVoixMordent.xml deleted file mode 100644 index 83a8d44fce4..00000000000 --- a/data/Leland/E5BC-ornamentPrecompPortDeVoixMordent.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E5BD-ornamentPrecompTrillWithMordent.xml b/data/Leland/E5BD-ornamentPrecompTrillWithMordent.xml deleted file mode 100644 index bb54059363a..00000000000 --- a/data/Leland/E5BD-ornamentPrecompTrillWithMordent.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E5BE-ornamentPrecompCadence.xml b/data/Leland/E5BE-ornamentPrecompCadence.xml deleted file mode 100644 index adc1e9a54cd..00000000000 --- a/data/Leland/E5BE-ornamentPrecompCadence.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml b/data/Leland/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml deleted file mode 100644 index 186cfc71298..00000000000 --- a/data/Leland/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml b/data/Leland/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml deleted file mode 100644 index 1ff6c6266b1..00000000000 --- a/data/Leland/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E5C6-ornamentPrecompMordentUpperPrefix.xml b/data/Leland/E5C6-ornamentPrecompMordentUpperPrefix.xml deleted file mode 100644 index 8f1cbff91c3..00000000000 --- a/data/Leland/E5C6-ornamentPrecompMordentUpperPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml b/data/Leland/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml deleted file mode 100644 index dd61baed291..00000000000 --- a/data/Leland/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E5C8-ornamentPrecompTrillLowerSuffix.xml b/data/Leland/E5C8-ornamentPrecompTrillLowerSuffix.xml deleted file mode 100644 index dae7aa53512..00000000000 --- a/data/Leland/E5C8-ornamentPrecompTrillLowerSuffix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E5E5-brassMuteClosed.xml b/data/Leland/E5E5-brassMuteClosed.xml deleted file mode 100644 index 2a2d97aece2..00000000000 --- a/data/Leland/E5E5-brassMuteClosed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E5E6-brassMuteHalfClosed.xml b/data/Leland/E5E6-brassMuteHalfClosed.xml deleted file mode 100644 index 119326046bf..00000000000 --- a/data/Leland/E5E6-brassMuteHalfClosed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E5E7-brassMuteOpen.xml b/data/Leland/E5E7-brassMuteOpen.xml deleted file mode 100644 index b9954f5293a..00000000000 --- a/data/Leland/E5E7-brassMuteOpen.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E610-stringsDownBow.xml b/data/Leland/E610-stringsDownBow.xml deleted file mode 100644 index 6aa9b14d979..00000000000 --- a/data/Leland/E610-stringsDownBow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E611-stringsDownBowTurned.xml b/data/Leland/E611-stringsDownBowTurned.xml deleted file mode 100644 index 84e8a1162f8..00000000000 --- a/data/Leland/E611-stringsDownBowTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E612-stringsUpBow.xml b/data/Leland/E612-stringsUpBow.xml deleted file mode 100644 index aff59f13669..00000000000 --- a/data/Leland/E612-stringsUpBow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E613-stringsUpBowTurned.xml b/data/Leland/E613-stringsUpBowTurned.xml deleted file mode 100644 index d05f225bdbc..00000000000 --- a/data/Leland/E613-stringsUpBowTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E614-stringsHarmonic.xml b/data/Leland/E614-stringsHarmonic.xml deleted file mode 100644 index a3d06dd5f88..00000000000 --- a/data/Leland/E614-stringsHarmonic.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E630-pluckedSnapPizzicatoBelow.xml b/data/Leland/E630-pluckedSnapPizzicatoBelow.xml deleted file mode 100644 index 14081882344..00000000000 --- a/data/Leland/E630-pluckedSnapPizzicatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E631-pluckedSnapPizzicatoAbove.xml b/data/Leland/E631-pluckedSnapPizzicatoAbove.xml deleted file mode 100644 index cc192ab8f59..00000000000 --- a/data/Leland/E631-pluckedSnapPizzicatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E632-pluckedBuzzPizzicato.xml b/data/Leland/E632-pluckedBuzzPizzicato.xml deleted file mode 100644 index 9278b65e2d2..00000000000 --- a/data/Leland/E632-pluckedBuzzPizzicato.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E650-keyboardPedalPed.xml b/data/Leland/E650-keyboardPedalPed.xml deleted file mode 100644 index ce58ce79ceb..00000000000 --- a/data/Leland/E650-keyboardPedalPed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E651-keyboardPedalP.xml b/data/Leland/E651-keyboardPedalP.xml deleted file mode 100644 index 15fe9251f2c..00000000000 --- a/data/Leland/E651-keyboardPedalP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E655-keyboardPedalUp.xml b/data/Leland/E655-keyboardPedalUp.xml deleted file mode 100644 index c0dd9905443..00000000000 --- a/data/Leland/E655-keyboardPedalUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E880-tuplet0.xml b/data/Leland/E880-tuplet0.xml deleted file mode 100644 index 88d10cadfcd..00000000000 --- a/data/Leland/E880-tuplet0.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E881-tuplet1.xml b/data/Leland/E881-tuplet1.xml deleted file mode 100644 index 1f3843008da..00000000000 --- a/data/Leland/E881-tuplet1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E882-tuplet2.xml b/data/Leland/E882-tuplet2.xml deleted file mode 100644 index 37d43ccbb37..00000000000 --- a/data/Leland/E882-tuplet2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E883-tuplet3.xml b/data/Leland/E883-tuplet3.xml deleted file mode 100644 index 2851b612cdb..00000000000 --- a/data/Leland/E883-tuplet3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E884-tuplet4.xml b/data/Leland/E884-tuplet4.xml deleted file mode 100644 index 350a42ada23..00000000000 --- a/data/Leland/E884-tuplet4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E885-tuplet5.xml b/data/Leland/E885-tuplet5.xml deleted file mode 100644 index 65808b3d674..00000000000 --- a/data/Leland/E885-tuplet5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E886-tuplet6.xml b/data/Leland/E886-tuplet6.xml deleted file mode 100644 index 6b45ebdab55..00000000000 --- a/data/Leland/E886-tuplet6.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E887-tuplet7.xml b/data/Leland/E887-tuplet7.xml deleted file mode 100644 index 33d786a1fa7..00000000000 --- a/data/Leland/E887-tuplet7.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E888-tuplet8.xml b/data/Leland/E888-tuplet8.xml deleted file mode 100644 index b7b57a5d699..00000000000 --- a/data/Leland/E888-tuplet8.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E889-tuplet9.xml b/data/Leland/E889-tuplet9.xml deleted file mode 100644 index 05a256f8334..00000000000 --- a/data/Leland/E889-tuplet9.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E88A-tupletColon.xml b/data/Leland/E88A-tupletColon.xml deleted file mode 100644 index 58c5644d128..00000000000 --- a/data/Leland/E88A-tupletColon.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E93C-mensuralNoteheadMinimaWhite.xml b/data/Leland/E93C-mensuralNoteheadMinimaWhite.xml deleted file mode 100644 index baca852c2a4..00000000000 --- a/data/Leland/E93C-mensuralNoteheadMinimaWhite.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/E93D-mensuralNoteheadSemiminimaWhite.xml b/data/Leland/E93D-mensuralNoteheadSemiminimaWhite.xml deleted file mode 100644 index fd0d3569570..00000000000 --- a/data/Leland/E93D-mensuralNoteheadSemiminimaWhite.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/EAA4-wiggleTrill.xml b/data/Leland/EAA4-wiggleTrill.xml deleted file mode 100644 index d4a0fbd59cb..00000000000 --- a/data/Leland/EAA4-wiggleTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/EAA9-wiggleArpeggiatoUp.xml b/data/Leland/EAA9-wiggleArpeggiatoUp.xml deleted file mode 100644 index da617d667b3..00000000000 --- a/data/Leland/EAA9-wiggleArpeggiatoUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/EAAA-wiggleArpeggiatoDown.xml b/data/Leland/EAAA-wiggleArpeggiatoDown.xml deleted file mode 100644 index 84dc1a206ea..00000000000 --- a/data/Leland/EAAA-wiggleArpeggiatoDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/EAAD-wiggleArpeggiatoUpArrow.xml b/data/Leland/EAAD-wiggleArpeggiatoUpArrow.xml deleted file mode 100644 index 6d346bf879d..00000000000 --- a/data/Leland/EAAD-wiggleArpeggiatoUpArrow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Leland/EAAE-wiggleArpeggiatoDownArrow.xml b/data/Leland/EAAE-wiggleArpeggiatoDownArrow.xml deleted file mode 100644 index 74ab36afe0d..00000000000 --- a/data/Leland/EAAE-wiggleArpeggiatoDownArrow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma.xml b/data/Petaluma.xml deleted file mode 100644 index 7b3fc62ca95..00000000000 --- a/data/Petaluma.xml +++ /dev/null @@ -1,599 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/Petaluma/E000-brace.xml b/data/Petaluma/E000-brace.xml deleted file mode 100644 index 2b645f3c57b..00000000000 --- a/data/Petaluma/E000-brace.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E003-bracketTop.xml b/data/Petaluma/E003-bracketTop.xml deleted file mode 100644 index 64453cc3c6b..00000000000 --- a/data/Petaluma/E003-bracketTop.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E004-bracketBottom.xml b/data/Petaluma/E004-bracketBottom.xml deleted file mode 100644 index 4571c512ef0..00000000000 --- a/data/Petaluma/E004-bracketBottom.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E043-repeatDots.xml b/data/Petaluma/E043-repeatDots.xml deleted file mode 100644 index ae7b3bbf2dc..00000000000 --- a/data/Petaluma/E043-repeatDots.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E044-repeatDot.xml b/data/Petaluma/E044-repeatDot.xml deleted file mode 100644 index 31047898e93..00000000000 --- a/data/Petaluma/E044-repeatDot.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E045-dalSegno.xml b/data/Petaluma/E045-dalSegno.xml deleted file mode 100644 index 513a817fe51..00000000000 --- a/data/Petaluma/E045-dalSegno.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E046-daCapo.xml b/data/Petaluma/E046-daCapo.xml deleted file mode 100644 index a1b39dc6fbb..00000000000 --- a/data/Petaluma/E046-daCapo.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E047-segno.xml b/data/Petaluma/E047-segno.xml deleted file mode 100644 index 1ac07e85b3d..00000000000 --- a/data/Petaluma/E047-segno.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E048-coda.xml b/data/Petaluma/E048-coda.xml deleted file mode 100644 index 95d9d0f4057..00000000000 --- a/data/Petaluma/E048-coda.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E049-codaSquare.xml b/data/Petaluma/E049-codaSquare.xml deleted file mode 100644 index f9e1603bd20..00000000000 --- a/data/Petaluma/E049-codaSquare.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E04B-segnoSerpent2.xml b/data/Petaluma/E04B-segnoSerpent2.xml deleted file mode 100644 index 51f49e3db57..00000000000 --- a/data/Petaluma/E04B-segnoSerpent2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E050-gClef.xml b/data/Petaluma/E050-gClef.xml deleted file mode 100644 index eda04aecfd9..00000000000 --- a/data/Petaluma/E050-gClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E051-gClef15mb.xml b/data/Petaluma/E051-gClef15mb.xml deleted file mode 100644 index 54de8392f63..00000000000 --- a/data/Petaluma/E051-gClef15mb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E052-gClef8vb.xml b/data/Petaluma/E052-gClef8vb.xml deleted file mode 100644 index 6d04deb54cb..00000000000 --- a/data/Petaluma/E052-gClef8vb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E053-gClef8va.xml b/data/Petaluma/E053-gClef8va.xml deleted file mode 100644 index 0147a76dde2..00000000000 --- a/data/Petaluma/E053-gClef8va.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E054-gClef15ma.xml b/data/Petaluma/E054-gClef15ma.xml deleted file mode 100644 index 65127d62e3e..00000000000 --- a/data/Petaluma/E054-gClef15ma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E055-gClef8vbOld.xml b/data/Petaluma/E055-gClef8vbOld.xml deleted file mode 100644 index 5de589ec595..00000000000 --- a/data/Petaluma/E055-gClef8vbOld.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E056-gClef8vbCClef.xml b/data/Petaluma/E056-gClef8vbCClef.xml deleted file mode 100644 index 0c9b235390f..00000000000 --- a/data/Petaluma/E056-gClef8vbCClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E05C-cClef.xml b/data/Petaluma/E05C-cClef.xml deleted file mode 100644 index ce512e1f29a..00000000000 --- a/data/Petaluma/E05C-cClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E05D-cClef8vb.xml b/data/Petaluma/E05D-cClef8vb.xml deleted file mode 100644 index 7197852432f..00000000000 --- a/data/Petaluma/E05D-cClef8vb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E062-fClef.xml b/data/Petaluma/E062-fClef.xml deleted file mode 100644 index c0c5c269ef7..00000000000 --- a/data/Petaluma/E062-fClef.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E063-fClef15mb.xml b/data/Petaluma/E063-fClef15mb.xml deleted file mode 100644 index 89d6e3c0b20..00000000000 --- a/data/Petaluma/E063-fClef15mb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E064-fClef8vb.xml b/data/Petaluma/E064-fClef8vb.xml deleted file mode 100644 index cab325b0da2..00000000000 --- a/data/Petaluma/E064-fClef8vb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E065-fClef8va.xml b/data/Petaluma/E065-fClef8va.xml deleted file mode 100644 index 9095568b9da..00000000000 --- a/data/Petaluma/E065-fClef8va.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E066-fClef15ma.xml b/data/Petaluma/E066-fClef15ma.xml deleted file mode 100644 index 52e91e1790f..00000000000 --- a/data/Petaluma/E066-fClef15ma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E069-unpitchedPercussionClef1.xml b/data/Petaluma/E069-unpitchedPercussionClef1.xml deleted file mode 100644 index 9b675dee4da..00000000000 --- a/data/Petaluma/E069-unpitchedPercussionClef1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E06A-unpitchedPercussionClef2.xml b/data/Petaluma/E06A-unpitchedPercussionClef2.xml deleted file mode 100644 index 9fdcdfd8712..00000000000 --- a/data/Petaluma/E06A-unpitchedPercussionClef2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E073-gClefReversed.xml b/data/Petaluma/E073-gClefReversed.xml deleted file mode 100644 index b042b8f37c6..00000000000 --- a/data/Petaluma/E073-gClefReversed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E074-gClefTurned.xml b/data/Petaluma/E074-gClefTurned.xml deleted file mode 100644 index 1baccba0e96..00000000000 --- a/data/Petaluma/E074-gClefTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E075-cClefReversed.xml b/data/Petaluma/E075-cClefReversed.xml deleted file mode 100644 index 76379820359..00000000000 --- a/data/Petaluma/E075-cClefReversed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E076-fClefReversed.xml b/data/Petaluma/E076-fClefReversed.xml deleted file mode 100644 index 5157d92bf82..00000000000 --- a/data/Petaluma/E076-fClefReversed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E077-fClefTurned.xml b/data/Petaluma/E077-fClefTurned.xml deleted file mode 100644 index dde5bcee56b..00000000000 --- a/data/Petaluma/E077-fClefTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E080-timeSig0.xml b/data/Petaluma/E080-timeSig0.xml deleted file mode 100644 index 2d6b61b2346..00000000000 --- a/data/Petaluma/E080-timeSig0.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E081-timeSig1.xml b/data/Petaluma/E081-timeSig1.xml deleted file mode 100644 index e7c707535c8..00000000000 --- a/data/Petaluma/E081-timeSig1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E082-timeSig2.xml b/data/Petaluma/E082-timeSig2.xml deleted file mode 100644 index b8e73c8e02f..00000000000 --- a/data/Petaluma/E082-timeSig2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E083-timeSig3.xml b/data/Petaluma/E083-timeSig3.xml deleted file mode 100644 index 80cbcd2ad50..00000000000 --- a/data/Petaluma/E083-timeSig3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E084-timeSig4.xml b/data/Petaluma/E084-timeSig4.xml deleted file mode 100644 index 1eefc78826a..00000000000 --- a/data/Petaluma/E084-timeSig4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E085-timeSig5.xml b/data/Petaluma/E085-timeSig5.xml deleted file mode 100644 index eae788bf7c2..00000000000 --- a/data/Petaluma/E085-timeSig5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E086-timeSig6.xml b/data/Petaluma/E086-timeSig6.xml deleted file mode 100644 index 552509631ce..00000000000 --- a/data/Petaluma/E086-timeSig6.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E087-timeSig7.xml b/data/Petaluma/E087-timeSig7.xml deleted file mode 100644 index 7b9c32d9a78..00000000000 --- a/data/Petaluma/E087-timeSig7.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E088-timeSig8.xml b/data/Petaluma/E088-timeSig8.xml deleted file mode 100644 index 24b53c80f83..00000000000 --- a/data/Petaluma/E088-timeSig8.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E089-timeSig9.xml b/data/Petaluma/E089-timeSig9.xml deleted file mode 100644 index e693b775490..00000000000 --- a/data/Petaluma/E089-timeSig9.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E08A-timeSigCommon.xml b/data/Petaluma/E08A-timeSigCommon.xml deleted file mode 100644 index 5fbbd8bf61d..00000000000 --- a/data/Petaluma/E08A-timeSigCommon.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E08B-timeSigCutCommon.xml b/data/Petaluma/E08B-timeSigCutCommon.xml deleted file mode 100644 index 16a3dd0e2a8..00000000000 --- a/data/Petaluma/E08B-timeSigCutCommon.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E08C-timeSigPlus.xml b/data/Petaluma/E08C-timeSigPlus.xml deleted file mode 100644 index b8c4b541a2a..00000000000 --- a/data/Petaluma/E08C-timeSigPlus.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E08D-timeSigPlusSmall.xml b/data/Petaluma/E08D-timeSigPlusSmall.xml deleted file mode 100644 index fb800da7982..00000000000 --- a/data/Petaluma/E08D-timeSigPlusSmall.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E08E-timeSigFractionalSlash.xml b/data/Petaluma/E08E-timeSigFractionalSlash.xml deleted file mode 100644 index c206958d3f2..00000000000 --- a/data/Petaluma/E08E-timeSigFractionalSlash.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E08F-timeSigEquals.xml b/data/Petaluma/E08F-timeSigEquals.xml deleted file mode 100644 index 09752f63592..00000000000 --- a/data/Petaluma/E08F-timeSigEquals.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E090-timeSigMinus.xml b/data/Petaluma/E090-timeSigMinus.xml deleted file mode 100644 index 0d4ca1f6acf..00000000000 --- a/data/Petaluma/E090-timeSigMinus.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E091-timeSigMultiply.xml b/data/Petaluma/E091-timeSigMultiply.xml deleted file mode 100644 index 2f53c752a98..00000000000 --- a/data/Petaluma/E091-timeSigMultiply.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E092-timeSigParensLeftSmall.xml b/data/Petaluma/E092-timeSigParensLeftSmall.xml deleted file mode 100644 index ca2b1555af3..00000000000 --- a/data/Petaluma/E092-timeSigParensLeftSmall.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E093-timeSigParensRightSmall.xml b/data/Petaluma/E093-timeSigParensRightSmall.xml deleted file mode 100644 index e1b8288c352..00000000000 --- a/data/Petaluma/E093-timeSigParensRightSmall.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E094-timeSigParensLeft.xml b/data/Petaluma/E094-timeSigParensLeft.xml deleted file mode 100644 index 09cc761c6b6..00000000000 --- a/data/Petaluma/E094-timeSigParensLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E095-timeSigParensRight.xml b/data/Petaluma/E095-timeSigParensRight.xml deleted file mode 100644 index f85e020146c..00000000000 --- a/data/Petaluma/E095-timeSigParensRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0A0-noteheadDoubleWhole.xml b/data/Petaluma/E0A0-noteheadDoubleWhole.xml deleted file mode 100644 index 6ed5186a244..00000000000 --- a/data/Petaluma/E0A0-noteheadDoubleWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0A1-noteheadDoubleWholeSquare.xml b/data/Petaluma/E0A1-noteheadDoubleWholeSquare.xml deleted file mode 100644 index 025657dd296..00000000000 --- a/data/Petaluma/E0A1-noteheadDoubleWholeSquare.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0A2-noteheadWhole.xml b/data/Petaluma/E0A2-noteheadWhole.xml deleted file mode 100644 index 568ec68a9ba..00000000000 --- a/data/Petaluma/E0A2-noteheadWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0A3-noteheadHalf.xml b/data/Petaluma/E0A3-noteheadHalf.xml deleted file mode 100644 index 30a0a9f5f3c..00000000000 --- a/data/Petaluma/E0A3-noteheadHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0A4-noteheadBlack.xml b/data/Petaluma/E0A4-noteheadBlack.xml deleted file mode 100644 index cd3947b2a01..00000000000 --- a/data/Petaluma/E0A4-noteheadBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0A5-noteheadNull.xml b/data/Petaluma/E0A5-noteheadNull.xml deleted file mode 100644 index 1445fb5f59a..00000000000 --- a/data/Petaluma/E0A5-noteheadNull.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0A9-noteheadXBlack.xml b/data/Petaluma/E0A9-noteheadXBlack.xml deleted file mode 100644 index e2cfb5f0cbc..00000000000 --- a/data/Petaluma/E0A9-noteheadXBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0AF-noteheadPlusBlack.xml b/data/Petaluma/E0AF-noteheadPlusBlack.xml deleted file mode 100644 index ad8e1596899..00000000000 --- a/data/Petaluma/E0AF-noteheadPlusBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0B5-noteheadWholeWithX.xml b/data/Petaluma/E0B5-noteheadWholeWithX.xml deleted file mode 100644 index 7c099533226..00000000000 --- a/data/Petaluma/E0B5-noteheadWholeWithX.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0B6-noteheadHalfWithX.xml b/data/Petaluma/E0B6-noteheadHalfWithX.xml deleted file mode 100644 index 77b9ce3bb08..00000000000 --- a/data/Petaluma/E0B6-noteheadHalfWithX.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0B7-noteheadVoidWithX.xml b/data/Petaluma/E0B7-noteheadVoidWithX.xml deleted file mode 100644 index 1dc18f25c4b..00000000000 --- a/data/Petaluma/E0B7-noteheadVoidWithX.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0D9-noteheadDiamondHalf.xml b/data/Petaluma/E0D9-noteheadDiamondHalf.xml deleted file mode 100644 index 92c616227ee..00000000000 --- a/data/Petaluma/E0D9-noteheadDiamondHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0DA-noteheadDiamondHalfWide.xml b/data/Petaluma/E0DA-noteheadDiamondHalfWide.xml deleted file mode 100644 index 689067642b0..00000000000 --- a/data/Petaluma/E0DA-noteheadDiamondHalfWide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0DB-noteheadDiamondBlack.xml b/data/Petaluma/E0DB-noteheadDiamondBlack.xml deleted file mode 100644 index 032217cb7b1..00000000000 --- a/data/Petaluma/E0DB-noteheadDiamondBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0DC-noteheadDiamondBlackWide.xml b/data/Petaluma/E0DC-noteheadDiamondBlackWide.xml deleted file mode 100644 index 13acdfb1e54..00000000000 --- a/data/Petaluma/E0DC-noteheadDiamondBlackWide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0DD-noteheadDiamondWhite.xml b/data/Petaluma/E0DD-noteheadDiamondWhite.xml deleted file mode 100644 index 5e414f70825..00000000000 --- a/data/Petaluma/E0DD-noteheadDiamondWhite.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0DE-noteheadDiamondWhiteWide.xml b/data/Petaluma/E0DE-noteheadDiamondWhiteWide.xml deleted file mode 100644 index f66b4bd4fc0..00000000000 --- a/data/Petaluma/E0DE-noteheadDiamondWhiteWide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0F5-noteheadParenthesisLeft.xml b/data/Petaluma/E0F5-noteheadParenthesisLeft.xml deleted file mode 100644 index d51b5bfc5c5..00000000000 --- a/data/Petaluma/E0F5-noteheadParenthesisLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0F6-noteheadParenthesisRight.xml b/data/Petaluma/E0F6-noteheadParenthesisRight.xml deleted file mode 100644 index cbdeff19954..00000000000 --- a/data/Petaluma/E0F6-noteheadParenthesisRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E0FA-noteheadWholeFilled.xml b/data/Petaluma/E0FA-noteheadWholeFilled.xml deleted file mode 100644 index 7f99079590f..00000000000 --- a/data/Petaluma/E0FA-noteheadWholeFilled.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E101-noteheadSlashHorizontalEnds.xml b/data/Petaluma/E101-noteheadSlashHorizontalEnds.xml deleted file mode 100644 index bd443003b6b..00000000000 --- a/data/Petaluma/E101-noteheadSlashHorizontalEnds.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E102-noteheadSlashWhiteWhole.xml b/data/Petaluma/E102-noteheadSlashWhiteWhole.xml deleted file mode 100644 index c2e7b3a4242..00000000000 --- a/data/Petaluma/E102-noteheadSlashWhiteWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E103-noteheadSlashWhiteHalf.xml b/data/Petaluma/E103-noteheadSlashWhiteHalf.xml deleted file mode 100644 index 6ab22cadb44..00000000000 --- a/data/Petaluma/E103-noteheadSlashWhiteHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E220-tremolo1.xml b/data/Petaluma/E220-tremolo1.xml deleted file mode 100644 index 1d8029dc8e3..00000000000 --- a/data/Petaluma/E220-tremolo1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E221-tremolo2.xml b/data/Petaluma/E221-tremolo2.xml deleted file mode 100644 index 2e0efe7dbc2..00000000000 --- a/data/Petaluma/E221-tremolo2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E222-tremolo3.xml b/data/Petaluma/E222-tremolo3.xml deleted file mode 100644 index 47d1bcd7416..00000000000 --- a/data/Petaluma/E222-tremolo3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E223-tremolo4.xml b/data/Petaluma/E223-tremolo4.xml deleted file mode 100644 index f9a888d45fc..00000000000 --- a/data/Petaluma/E223-tremolo4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E224-tremolo5.xml b/data/Petaluma/E224-tremolo5.xml deleted file mode 100644 index 984c32272da..00000000000 --- a/data/Petaluma/E224-tremolo5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E22A-buzzRoll.xml b/data/Petaluma/E22A-buzzRoll.xml deleted file mode 100644 index 9fe80d46716..00000000000 --- a/data/Petaluma/E22A-buzzRoll.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E240-flag8thUp.xml b/data/Petaluma/E240-flag8thUp.xml deleted file mode 100644 index d115b0c9110..00000000000 --- a/data/Petaluma/E240-flag8thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E241-flag8thDown.xml b/data/Petaluma/E241-flag8thDown.xml deleted file mode 100644 index 616cbfc5876..00000000000 --- a/data/Petaluma/E241-flag8thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E242-flag16thUp.xml b/data/Petaluma/E242-flag16thUp.xml deleted file mode 100644 index 9953fa570ca..00000000000 --- a/data/Petaluma/E242-flag16thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E243-flag16thDown.xml b/data/Petaluma/E243-flag16thDown.xml deleted file mode 100644 index da91af23c13..00000000000 --- a/data/Petaluma/E243-flag16thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E244-flag32ndUp.xml b/data/Petaluma/E244-flag32ndUp.xml deleted file mode 100644 index 86ab259a7b2..00000000000 --- a/data/Petaluma/E244-flag32ndUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E245-flag32ndDown.xml b/data/Petaluma/E245-flag32ndDown.xml deleted file mode 100644 index 930af8a76ce..00000000000 --- a/data/Petaluma/E245-flag32ndDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E246-flag64thUp.xml b/data/Petaluma/E246-flag64thUp.xml deleted file mode 100644 index dd040543306..00000000000 --- a/data/Petaluma/E246-flag64thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E247-flag64thDown.xml b/data/Petaluma/E247-flag64thDown.xml deleted file mode 100644 index 78352a0f80d..00000000000 --- a/data/Petaluma/E247-flag64thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E248-flag128thUp.xml b/data/Petaluma/E248-flag128thUp.xml deleted file mode 100644 index a1c621babf6..00000000000 --- a/data/Petaluma/E248-flag128thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E249-flag128thDown.xml b/data/Petaluma/E249-flag128thDown.xml deleted file mode 100644 index 968356dceff..00000000000 --- a/data/Petaluma/E249-flag128thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E24A-flag256thUp.xml b/data/Petaluma/E24A-flag256thUp.xml deleted file mode 100644 index a53a7cc6273..00000000000 --- a/data/Petaluma/E24A-flag256thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E24B-flag256thDown.xml b/data/Petaluma/E24B-flag256thDown.xml deleted file mode 100644 index 801935e08d7..00000000000 --- a/data/Petaluma/E24B-flag256thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E24C-flag512thUp.xml b/data/Petaluma/E24C-flag512thUp.xml deleted file mode 100644 index 903d81175c7..00000000000 --- a/data/Petaluma/E24C-flag512thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E24D-flag512thDown.xml b/data/Petaluma/E24D-flag512thDown.xml deleted file mode 100644 index a7a911fb02c..00000000000 --- a/data/Petaluma/E24D-flag512thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E24E-flag1024thUp.xml b/data/Petaluma/E24E-flag1024thUp.xml deleted file mode 100644 index 520f1bf6c56..00000000000 --- a/data/Petaluma/E24E-flag1024thUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E24F-flag1024thDown.xml b/data/Petaluma/E24F-flag1024thDown.xml deleted file mode 100644 index 8a9020e87b9..00000000000 --- a/data/Petaluma/E24F-flag1024thDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E260-accidentalFlat.xml b/data/Petaluma/E260-accidentalFlat.xml deleted file mode 100644 index 20cbc3182ac..00000000000 --- a/data/Petaluma/E260-accidentalFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E261-accidentalNatural.xml b/data/Petaluma/E261-accidentalNatural.xml deleted file mode 100644 index ee6d09c3a45..00000000000 --- a/data/Petaluma/E261-accidentalNatural.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E262-accidentalSharp.xml b/data/Petaluma/E262-accidentalSharp.xml deleted file mode 100644 index 65f1c958ee5..00000000000 --- a/data/Petaluma/E262-accidentalSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E263-accidentalDoubleSharp.xml b/data/Petaluma/E263-accidentalDoubleSharp.xml deleted file mode 100644 index d9a5350831f..00000000000 --- a/data/Petaluma/E263-accidentalDoubleSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E264-accidentalDoubleFlat.xml b/data/Petaluma/E264-accidentalDoubleFlat.xml deleted file mode 100644 index defe663c9f4..00000000000 --- a/data/Petaluma/E264-accidentalDoubleFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E265-accidentalTripleSharp.xml b/data/Petaluma/E265-accidentalTripleSharp.xml deleted file mode 100644 index 59d12677468..00000000000 --- a/data/Petaluma/E265-accidentalTripleSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E266-accidentalTripleFlat.xml b/data/Petaluma/E266-accidentalTripleFlat.xml deleted file mode 100644 index 6ca1aa4d33b..00000000000 --- a/data/Petaluma/E266-accidentalTripleFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E267-accidentalNaturalFlat.xml b/data/Petaluma/E267-accidentalNaturalFlat.xml deleted file mode 100644 index 83f6a1a04d2..00000000000 --- a/data/Petaluma/E267-accidentalNaturalFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E268-accidentalNaturalSharp.xml b/data/Petaluma/E268-accidentalNaturalSharp.xml deleted file mode 100644 index be2cb308a6e..00000000000 --- a/data/Petaluma/E268-accidentalNaturalSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E269-accidentalSharpSharp.xml b/data/Petaluma/E269-accidentalSharpSharp.xml deleted file mode 100644 index da02c970029..00000000000 --- a/data/Petaluma/E269-accidentalSharpSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E26A-accidentalParensLeft.xml b/data/Petaluma/E26A-accidentalParensLeft.xml deleted file mode 100644 index db3d5398acc..00000000000 --- a/data/Petaluma/E26A-accidentalParensLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E26B-accidentalParensRight.xml b/data/Petaluma/E26B-accidentalParensRight.xml deleted file mode 100644 index b2a55dc9845..00000000000 --- a/data/Petaluma/E26B-accidentalParensRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E26C-accidentalBracketLeft.xml b/data/Petaluma/E26C-accidentalBracketLeft.xml deleted file mode 100644 index 437cee1f8d6..00000000000 --- a/data/Petaluma/E26C-accidentalBracketLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E26D-accidentalBracketRight.xml b/data/Petaluma/E26D-accidentalBracketRight.xml deleted file mode 100644 index dccbf489621..00000000000 --- a/data/Petaluma/E26D-accidentalBracketRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E270-accidentalQuarterToneFlatArrowUp.xml b/data/Petaluma/E270-accidentalQuarterToneFlatArrowUp.xml deleted file mode 100644 index 0f8f7d023ef..00000000000 --- a/data/Petaluma/E270-accidentalQuarterToneFlatArrowUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E271-accidentalThreeQuarterTonesFlatArrowDown.xml b/data/Petaluma/E271-accidentalThreeQuarterTonesFlatArrowDown.xml deleted file mode 100644 index caf77b89cfb..00000000000 --- a/data/Petaluma/E271-accidentalThreeQuarterTonesFlatArrowDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E272-accidentalQuarterToneSharpNaturalArrowUp.xml b/data/Petaluma/E272-accidentalQuarterToneSharpNaturalArrowUp.xml deleted file mode 100644 index 1e69a073d44..00000000000 --- a/data/Petaluma/E272-accidentalQuarterToneSharpNaturalArrowUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E273-accidentalQuarterToneFlatNaturalArrowDown.xml b/data/Petaluma/E273-accidentalQuarterToneFlatNaturalArrowDown.xml deleted file mode 100644 index f90e627881d..00000000000 --- a/data/Petaluma/E273-accidentalQuarterToneFlatNaturalArrowDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E274-accidentalThreeQuarterTonesSharpArrowUp.xml b/data/Petaluma/E274-accidentalThreeQuarterTonesSharpArrowUp.xml deleted file mode 100644 index d38b2f22100..00000000000 --- a/data/Petaluma/E274-accidentalThreeQuarterTonesSharpArrowUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E275-accidentalQuarterToneSharpArrowDown.xml b/data/Petaluma/E275-accidentalQuarterToneSharpArrowDown.xml deleted file mode 100644 index 8619fc075f1..00000000000 --- a/data/Petaluma/E275-accidentalQuarterToneSharpArrowDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E280-accidentalQuarterToneFlatStein.xml b/data/Petaluma/E280-accidentalQuarterToneFlatStein.xml deleted file mode 100644 index fc091d7fe66..00000000000 --- a/data/Petaluma/E280-accidentalQuarterToneFlatStein.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E281-accidentalThreeQuarterTonesFlatZimmermann.xml b/data/Petaluma/E281-accidentalThreeQuarterTonesFlatZimmermann.xml deleted file mode 100644 index 05d9b30c4e3..00000000000 --- a/data/Petaluma/E281-accidentalThreeQuarterTonesFlatZimmermann.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E282-accidentalQuarterToneSharpStein.xml b/data/Petaluma/E282-accidentalQuarterToneSharpStein.xml deleted file mode 100644 index 335550e4fe9..00000000000 --- a/data/Petaluma/E282-accidentalQuarterToneSharpStein.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E283-accidentalThreeQuarterTonesSharpStein.xml b/data/Petaluma/E283-accidentalThreeQuarterTonesSharpStein.xml deleted file mode 100644 index 969bd035455..00000000000 --- a/data/Petaluma/E283-accidentalThreeQuarterTonesSharpStein.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E440-accidentalBuyukMucennebFlat.xml b/data/Petaluma/E440-accidentalBuyukMucennebFlat.xml deleted file mode 100644 index f7e980c7755..00000000000 --- a/data/Petaluma/E440-accidentalBuyukMucennebFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E441-accidentalKucukMucennebFlat.xml b/data/Petaluma/E441-accidentalKucukMucennebFlat.xml deleted file mode 100644 index 2ff47466126..00000000000 --- a/data/Petaluma/E441-accidentalKucukMucennebFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E442-accidentalBakiyeFlat.xml b/data/Petaluma/E442-accidentalBakiyeFlat.xml deleted file mode 100644 index 108451d0c48..00000000000 --- a/data/Petaluma/E442-accidentalBakiyeFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E443-accidentalKomaFlat.xml b/data/Petaluma/E443-accidentalKomaFlat.xml deleted file mode 100644 index e6faef1e6ec..00000000000 --- a/data/Petaluma/E443-accidentalKomaFlat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E444-accidentalKomaSharp.xml b/data/Petaluma/E444-accidentalKomaSharp.xml deleted file mode 100644 index d986f147f4e..00000000000 --- a/data/Petaluma/E444-accidentalKomaSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E445-accidentalBakiyeSharp.xml b/data/Petaluma/E445-accidentalBakiyeSharp.xml deleted file mode 100644 index dc828f4160d..00000000000 --- a/data/Petaluma/E445-accidentalBakiyeSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E446-accidentalKucukMucennebSharp.xml b/data/Petaluma/E446-accidentalKucukMucennebSharp.xml deleted file mode 100644 index 57b37c1bb22..00000000000 --- a/data/Petaluma/E446-accidentalKucukMucennebSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E447-accidentalBuyukMucennebSharp.xml b/data/Petaluma/E447-accidentalBuyukMucennebSharp.xml deleted file mode 100644 index 7c4e0386771..00000000000 --- a/data/Petaluma/E447-accidentalBuyukMucennebSharp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4A0-articAccentAbove.xml b/data/Petaluma/E4A0-articAccentAbove.xml deleted file mode 100644 index 0c21eb94c4c..00000000000 --- a/data/Petaluma/E4A0-articAccentAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4A1-articAccentBelow.xml b/data/Petaluma/E4A1-articAccentBelow.xml deleted file mode 100644 index 0155af9f030..00000000000 --- a/data/Petaluma/E4A1-articAccentBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4A2-articStaccatoAbove.xml b/data/Petaluma/E4A2-articStaccatoAbove.xml deleted file mode 100644 index ce6d5a5a474..00000000000 --- a/data/Petaluma/E4A2-articStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4A3-articStaccatoBelow.xml b/data/Petaluma/E4A3-articStaccatoBelow.xml deleted file mode 100644 index ce5ae4f5c7f..00000000000 --- a/data/Petaluma/E4A3-articStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4A4-articTenutoAbove.xml b/data/Petaluma/E4A4-articTenutoAbove.xml deleted file mode 100644 index da616524a3f..00000000000 --- a/data/Petaluma/E4A4-articTenutoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4A5-articTenutoBelow.xml b/data/Petaluma/E4A5-articTenutoBelow.xml deleted file mode 100644 index 41975b37680..00000000000 --- a/data/Petaluma/E4A5-articTenutoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4A6-articStaccatissimoAbove.xml b/data/Petaluma/E4A6-articStaccatissimoAbove.xml deleted file mode 100644 index b9c6bebca43..00000000000 --- a/data/Petaluma/E4A6-articStaccatissimoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4A7-articStaccatissimoBelow.xml b/data/Petaluma/E4A7-articStaccatissimoBelow.xml deleted file mode 100644 index 3f946cfea75..00000000000 --- a/data/Petaluma/E4A7-articStaccatissimoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4A8-articStaccatissimoWedgeAbove.xml b/data/Petaluma/E4A8-articStaccatissimoWedgeAbove.xml deleted file mode 100644 index 6c0db5fa040..00000000000 --- a/data/Petaluma/E4A8-articStaccatissimoWedgeAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4A9-articStaccatissimoWedgeBelow.xml b/data/Petaluma/E4A9-articStaccatissimoWedgeBelow.xml deleted file mode 100644 index f227015f7fc..00000000000 --- a/data/Petaluma/E4A9-articStaccatissimoWedgeBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4AA-articStaccatissimoStrokeAbove.xml b/data/Petaluma/E4AA-articStaccatissimoStrokeAbove.xml deleted file mode 100644 index a68f27c5c9b..00000000000 --- a/data/Petaluma/E4AA-articStaccatissimoStrokeAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4AB-articStaccatissimoStrokeBelow.xml b/data/Petaluma/E4AB-articStaccatissimoStrokeBelow.xml deleted file mode 100644 index 3e2d9bb422c..00000000000 --- a/data/Petaluma/E4AB-articStaccatissimoStrokeBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4AC-articMarcatoAbove.xml b/data/Petaluma/E4AC-articMarcatoAbove.xml deleted file mode 100644 index 49415c231b1..00000000000 --- a/data/Petaluma/E4AC-articMarcatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4AD-articMarcatoBelow.xml b/data/Petaluma/E4AD-articMarcatoBelow.xml deleted file mode 100644 index f145201d605..00000000000 --- a/data/Petaluma/E4AD-articMarcatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4AE-articMarcatoStaccatoAbove.xml b/data/Petaluma/E4AE-articMarcatoStaccatoAbove.xml deleted file mode 100644 index 541113d8260..00000000000 --- a/data/Petaluma/E4AE-articMarcatoStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4AF-articMarcatoStaccatoBelow.xml b/data/Petaluma/E4AF-articMarcatoStaccatoBelow.xml deleted file mode 100644 index f29a47792c8..00000000000 --- a/data/Petaluma/E4AF-articMarcatoStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4B0-articAccentStaccatoAbove.xml b/data/Petaluma/E4B0-articAccentStaccatoAbove.xml deleted file mode 100644 index 2ec5147152b..00000000000 --- a/data/Petaluma/E4B0-articAccentStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4B1-articAccentStaccatoBelow.xml b/data/Petaluma/E4B1-articAccentStaccatoBelow.xml deleted file mode 100644 index 7a57841b709..00000000000 --- a/data/Petaluma/E4B1-articAccentStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4B2-articTenutoStaccatoAbove.xml b/data/Petaluma/E4B2-articTenutoStaccatoAbove.xml deleted file mode 100644 index 2cb809c3b62..00000000000 --- a/data/Petaluma/E4B2-articTenutoStaccatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4B3-articTenutoStaccatoBelow.xml b/data/Petaluma/E4B3-articTenutoStaccatoBelow.xml deleted file mode 100644 index d861664dd15..00000000000 --- a/data/Petaluma/E4B3-articTenutoStaccatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4B4-articTenutoAccentAbove.xml b/data/Petaluma/E4B4-articTenutoAccentAbove.xml deleted file mode 100644 index 66d385df451..00000000000 --- a/data/Petaluma/E4B4-articTenutoAccentAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4B5-articTenutoAccentBelow.xml b/data/Petaluma/E4B5-articTenutoAccentBelow.xml deleted file mode 100644 index f233214009d..00000000000 --- a/data/Petaluma/E4B5-articTenutoAccentBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4B6-articStressAbove.xml b/data/Petaluma/E4B6-articStressAbove.xml deleted file mode 100644 index d6aff16e96e..00000000000 --- a/data/Petaluma/E4B6-articStressAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4B7-articStressBelow.xml b/data/Petaluma/E4B7-articStressBelow.xml deleted file mode 100644 index c32c826feb6..00000000000 --- a/data/Petaluma/E4B7-articStressBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4B8-articUnstressAbove.xml b/data/Petaluma/E4B8-articUnstressAbove.xml deleted file mode 100644 index e10edf0da90..00000000000 --- a/data/Petaluma/E4B8-articUnstressAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4B9-articUnstressBelow.xml b/data/Petaluma/E4B9-articUnstressBelow.xml deleted file mode 100644 index 0df6737545f..00000000000 --- a/data/Petaluma/E4B9-articUnstressBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4BA-articLaissezVibrerAbove.xml b/data/Petaluma/E4BA-articLaissezVibrerAbove.xml deleted file mode 100644 index e1d60449254..00000000000 --- a/data/Petaluma/E4BA-articLaissezVibrerAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4BB-articLaissezVibrerBelow.xml b/data/Petaluma/E4BB-articLaissezVibrerBelow.xml deleted file mode 100644 index 1337217bb54..00000000000 --- a/data/Petaluma/E4BB-articLaissezVibrerBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4BC-articMarcatoTenutoAbove.xml b/data/Petaluma/E4BC-articMarcatoTenutoAbove.xml deleted file mode 100644 index 6ad74e479ee..00000000000 --- a/data/Petaluma/E4BC-articMarcatoTenutoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4BD-articMarcatoTenutoBelow.xml b/data/Petaluma/E4BD-articMarcatoTenutoBelow.xml deleted file mode 100644 index 60e6d3cc482..00000000000 --- a/data/Petaluma/E4BD-articMarcatoTenutoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4C0-fermataAbove.xml b/data/Petaluma/E4C0-fermataAbove.xml deleted file mode 100644 index 43e64ad729f..00000000000 --- a/data/Petaluma/E4C0-fermataAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4C1-fermataBelow.xml b/data/Petaluma/E4C1-fermataBelow.xml deleted file mode 100644 index f843ed65c90..00000000000 --- a/data/Petaluma/E4C1-fermataBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4C2-fermataVeryShortAbove.xml b/data/Petaluma/E4C2-fermataVeryShortAbove.xml deleted file mode 100644 index eae5f0f3519..00000000000 --- a/data/Petaluma/E4C2-fermataVeryShortAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4C3-fermataVeryShortBelow.xml b/data/Petaluma/E4C3-fermataVeryShortBelow.xml deleted file mode 100644 index 712ac324473..00000000000 --- a/data/Petaluma/E4C3-fermataVeryShortBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4C4-fermataShortAbove.xml b/data/Petaluma/E4C4-fermataShortAbove.xml deleted file mode 100644 index 3508a735db8..00000000000 --- a/data/Petaluma/E4C4-fermataShortAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4C5-fermataShortBelow.xml b/data/Petaluma/E4C5-fermataShortBelow.xml deleted file mode 100644 index ec2e20653db..00000000000 --- a/data/Petaluma/E4C5-fermataShortBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4C6-fermataLongAbove.xml b/data/Petaluma/E4C6-fermataLongAbove.xml deleted file mode 100644 index 7414d36c5fe..00000000000 --- a/data/Petaluma/E4C6-fermataLongAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4C7-fermataLongBelow.xml b/data/Petaluma/E4C7-fermataLongBelow.xml deleted file mode 100644 index 8ff5adcbfd4..00000000000 --- a/data/Petaluma/E4C7-fermataLongBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4C8-fermataVeryLongAbove.xml b/data/Petaluma/E4C8-fermataVeryLongAbove.xml deleted file mode 100644 index 537d7462575..00000000000 --- a/data/Petaluma/E4C8-fermataVeryLongAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4C9-fermataVeryLongBelow.xml b/data/Petaluma/E4C9-fermataVeryLongBelow.xml deleted file mode 100644 index 78e35da7014..00000000000 --- a/data/Petaluma/E4C9-fermataVeryLongBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4CE-breathMarkComma.xml b/data/Petaluma/E4CE-breathMarkComma.xml deleted file mode 100644 index 246cc74edc0..00000000000 --- a/data/Petaluma/E4CE-breathMarkComma.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4E0-restMaxima.xml b/data/Petaluma/E4E0-restMaxima.xml deleted file mode 100644 index 75ed6f83792..00000000000 --- a/data/Petaluma/E4E0-restMaxima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4E1-restLonga.xml b/data/Petaluma/E4E1-restLonga.xml deleted file mode 100644 index 261c63b649a..00000000000 --- a/data/Petaluma/E4E1-restLonga.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4E2-restDoubleWhole.xml b/data/Petaluma/E4E2-restDoubleWhole.xml deleted file mode 100644 index eb3696dd596..00000000000 --- a/data/Petaluma/E4E2-restDoubleWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4E3-restWhole.xml b/data/Petaluma/E4E3-restWhole.xml deleted file mode 100644 index 16efcdcd49f..00000000000 --- a/data/Petaluma/E4E3-restWhole.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4E4-restHalf.xml b/data/Petaluma/E4E4-restHalf.xml deleted file mode 100644 index 5ad64010a78..00000000000 --- a/data/Petaluma/E4E4-restHalf.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4E5-restQuarter.xml b/data/Petaluma/E4E5-restQuarter.xml deleted file mode 100644 index 2624562e24d..00000000000 --- a/data/Petaluma/E4E5-restQuarter.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4E6-rest8th.xml b/data/Petaluma/E4E6-rest8th.xml deleted file mode 100644 index d38144b65c2..00000000000 --- a/data/Petaluma/E4E6-rest8th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4E7-rest16th.xml b/data/Petaluma/E4E7-rest16th.xml deleted file mode 100644 index 167b37700f5..00000000000 --- a/data/Petaluma/E4E7-rest16th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4E8-rest32nd.xml b/data/Petaluma/E4E8-rest32nd.xml deleted file mode 100644 index a9f26644146..00000000000 --- a/data/Petaluma/E4E8-rest32nd.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4E9-rest64th.xml b/data/Petaluma/E4E9-rest64th.xml deleted file mode 100644 index 6ede68a6b7a..00000000000 --- a/data/Petaluma/E4E9-rest64th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4EA-rest128th.xml b/data/Petaluma/E4EA-rest128th.xml deleted file mode 100644 index 960682704a0..00000000000 --- a/data/Petaluma/E4EA-rest128th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4EB-rest256th.xml b/data/Petaluma/E4EB-rest256th.xml deleted file mode 100644 index d4f699994f7..00000000000 --- a/data/Petaluma/E4EB-rest256th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4EC-rest512th.xml b/data/Petaluma/E4EC-rest512th.xml deleted file mode 100644 index 93d95165482..00000000000 --- a/data/Petaluma/E4EC-rest512th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4ED-rest1024th.xml b/data/Petaluma/E4ED-rest1024th.xml deleted file mode 100644 index cab64eb12bf..00000000000 --- a/data/Petaluma/E4ED-rest1024th.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4F2-restQuarterOld.xml b/data/Petaluma/E4F2-restQuarterOld.xml deleted file mode 100644 index b31419f931f..00000000000 --- a/data/Petaluma/E4F2-restQuarterOld.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E4F6-restQuarterZ.xml b/data/Petaluma/E4F6-restQuarterZ.xml deleted file mode 100644 index e42d9d455fd..00000000000 --- a/data/Petaluma/E4F6-restQuarterZ.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E500-repeat1Bar.xml b/data/Petaluma/E500-repeat1Bar.xml deleted file mode 100644 index 345a788f8a8..00000000000 --- a/data/Petaluma/E500-repeat1Bar.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E501-repeat2Bars.xml b/data/Petaluma/E501-repeat2Bars.xml deleted file mode 100644 index baf2e34d436..00000000000 --- a/data/Petaluma/E501-repeat2Bars.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E502-repeat4Bars.xml b/data/Petaluma/E502-repeat4Bars.xml deleted file mode 100644 index 356eaf45fcd..00000000000 --- a/data/Petaluma/E502-repeat4Bars.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E503-repeatBarUpperDot.xml b/data/Petaluma/E503-repeatBarUpperDot.xml deleted file mode 100644 index bc548a190e7..00000000000 --- a/data/Petaluma/E503-repeatBarUpperDot.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E504-repeatBarSlash.xml b/data/Petaluma/E504-repeatBarSlash.xml deleted file mode 100644 index 581e8097fcb..00000000000 --- a/data/Petaluma/E504-repeatBarSlash.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E505-repeatBarLowerDot.xml b/data/Petaluma/E505-repeatBarLowerDot.xml deleted file mode 100644 index 0834b61f674..00000000000 --- a/data/Petaluma/E505-repeatBarLowerDot.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E510-ottava.xml b/data/Petaluma/E510-ottava.xml deleted file mode 100644 index d41386beb7e..00000000000 --- a/data/Petaluma/E510-ottava.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E511-ottavaAlta.xml b/data/Petaluma/E511-ottavaAlta.xml deleted file mode 100644 index e85f9903932..00000000000 --- a/data/Petaluma/E511-ottavaAlta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E512-ottavaBassa.xml b/data/Petaluma/E512-ottavaBassa.xml deleted file mode 100644 index 197d5a63dbd..00000000000 --- a/data/Petaluma/E512-ottavaBassa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E513-ottavaBassaBa.xml b/data/Petaluma/E513-ottavaBassaBa.xml deleted file mode 100644 index 029cb29eed9..00000000000 --- a/data/Petaluma/E513-ottavaBassaBa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E514-quindicesima.xml b/data/Petaluma/E514-quindicesima.xml deleted file mode 100644 index bf6ff17e303..00000000000 --- a/data/Petaluma/E514-quindicesima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E515-quindicesimaAlta.xml b/data/Petaluma/E515-quindicesimaAlta.xml deleted file mode 100644 index cd8c759fccc..00000000000 --- a/data/Petaluma/E515-quindicesimaAlta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E516-quindicesimaBassa.xml b/data/Petaluma/E516-quindicesimaBassa.xml deleted file mode 100644 index 1a938a1de15..00000000000 --- a/data/Petaluma/E516-quindicesimaBassa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E517-ventiduesima.xml b/data/Petaluma/E517-ventiduesima.xml deleted file mode 100644 index 92f21d7ced6..00000000000 --- a/data/Petaluma/E517-ventiduesima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E518-ventiduesimaAlta.xml b/data/Petaluma/E518-ventiduesimaAlta.xml deleted file mode 100644 index 37e0ab5246a..00000000000 --- a/data/Petaluma/E518-ventiduesimaAlta.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E519-ventiduesimaBassa.xml b/data/Petaluma/E519-ventiduesimaBassa.xml deleted file mode 100644 index 7607caa0ebe..00000000000 --- a/data/Petaluma/E519-ventiduesimaBassa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E51A-octaveParensLeft.xml b/data/Petaluma/E51A-octaveParensLeft.xml deleted file mode 100644 index 04623ff6c4e..00000000000 --- a/data/Petaluma/E51A-octaveParensLeft.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E51B-octaveParensRight.xml b/data/Petaluma/E51B-octaveParensRight.xml deleted file mode 100644 index 09bd81839ef..00000000000 --- a/data/Petaluma/E51B-octaveParensRight.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E51C-ottavaBassaVb.xml b/data/Petaluma/E51C-ottavaBassaVb.xml deleted file mode 100644 index 264f16c99f1..00000000000 --- a/data/Petaluma/E51C-ottavaBassaVb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E51D-quindicesimaBassaMb.xml b/data/Petaluma/E51D-quindicesimaBassaMb.xml deleted file mode 100644 index f62839cfb91..00000000000 --- a/data/Petaluma/E51D-quindicesimaBassaMb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E51E-ventiduesimaBassaMb.xml b/data/Petaluma/E51E-ventiduesimaBassaMb.xml deleted file mode 100644 index 2d3c4fbe560..00000000000 --- a/data/Petaluma/E51E-ventiduesimaBassaMb.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E520-dynamicPiano.xml b/data/Petaluma/E520-dynamicPiano.xml deleted file mode 100644 index 8586554f3a1..00000000000 --- a/data/Petaluma/E520-dynamicPiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E521-dynamicMezzo.xml b/data/Petaluma/E521-dynamicMezzo.xml deleted file mode 100644 index ab03bd2aff6..00000000000 --- a/data/Petaluma/E521-dynamicMezzo.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E522-dynamicForte.xml b/data/Petaluma/E522-dynamicForte.xml deleted file mode 100644 index 058c4273ef1..00000000000 --- a/data/Petaluma/E522-dynamicForte.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E523-dynamicRinforzando.xml b/data/Petaluma/E523-dynamicRinforzando.xml deleted file mode 100644 index 5f547de476d..00000000000 --- a/data/Petaluma/E523-dynamicRinforzando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E524-dynamicSforzando.xml b/data/Petaluma/E524-dynamicSforzando.xml deleted file mode 100644 index d80d5d5ec6a..00000000000 --- a/data/Petaluma/E524-dynamicSforzando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E525-dynamicZ.xml b/data/Petaluma/E525-dynamicZ.xml deleted file mode 100644 index 0609ed7e81c..00000000000 --- a/data/Petaluma/E525-dynamicZ.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E526-dynamicNiente.xml b/data/Petaluma/E526-dynamicNiente.xml deleted file mode 100644 index 327db4e21ec..00000000000 --- a/data/Petaluma/E526-dynamicNiente.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E527-dynamicPPPPPP.xml b/data/Petaluma/E527-dynamicPPPPPP.xml deleted file mode 100644 index 84370eb41fc..00000000000 --- a/data/Petaluma/E527-dynamicPPPPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E528-dynamicPPPPP.xml b/data/Petaluma/E528-dynamicPPPPP.xml deleted file mode 100644 index 227247984fc..00000000000 --- a/data/Petaluma/E528-dynamicPPPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E529-dynamicPPPP.xml b/data/Petaluma/E529-dynamicPPPP.xml deleted file mode 100644 index ccd01547e91..00000000000 --- a/data/Petaluma/E529-dynamicPPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E52A-dynamicPPP.xml b/data/Petaluma/E52A-dynamicPPP.xml deleted file mode 100644 index 435093d4ce0..00000000000 --- a/data/Petaluma/E52A-dynamicPPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E52B-dynamicPP.xml b/data/Petaluma/E52B-dynamicPP.xml deleted file mode 100644 index 03a6b8061aa..00000000000 --- a/data/Petaluma/E52B-dynamicPP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E52C-dynamicMP.xml b/data/Petaluma/E52C-dynamicMP.xml deleted file mode 100644 index d15b49ef313..00000000000 --- a/data/Petaluma/E52C-dynamicMP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E52D-dynamicMF.xml b/data/Petaluma/E52D-dynamicMF.xml deleted file mode 100644 index 5e3de403f5d..00000000000 --- a/data/Petaluma/E52D-dynamicMF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E52E-dynamicPF.xml b/data/Petaluma/E52E-dynamicPF.xml deleted file mode 100644 index 15e3f921c17..00000000000 --- a/data/Petaluma/E52E-dynamicPF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E52F-dynamicFF.xml b/data/Petaluma/E52F-dynamicFF.xml deleted file mode 100644 index 5ea3b4e5dc5..00000000000 --- a/data/Petaluma/E52F-dynamicFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E530-dynamicFFF.xml b/data/Petaluma/E530-dynamicFFF.xml deleted file mode 100644 index 21a167b128e..00000000000 --- a/data/Petaluma/E530-dynamicFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E531-dynamicFFFF.xml b/data/Petaluma/E531-dynamicFFFF.xml deleted file mode 100644 index b55bc1556ff..00000000000 --- a/data/Petaluma/E531-dynamicFFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E532-dynamicFFFFF.xml b/data/Petaluma/E532-dynamicFFFFF.xml deleted file mode 100644 index 09d01131803..00000000000 --- a/data/Petaluma/E532-dynamicFFFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E533-dynamicFFFFFF.xml b/data/Petaluma/E533-dynamicFFFFFF.xml deleted file mode 100644 index 0e544ed1440..00000000000 --- a/data/Petaluma/E533-dynamicFFFFFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E534-dynamicFortePiano.xml b/data/Petaluma/E534-dynamicFortePiano.xml deleted file mode 100644 index 894909be119..00000000000 --- a/data/Petaluma/E534-dynamicFortePiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E535-dynamicForzando.xml b/data/Petaluma/E535-dynamicForzando.xml deleted file mode 100644 index a1b7cf90e89..00000000000 --- a/data/Petaluma/E535-dynamicForzando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E536-dynamicSforzando1.xml b/data/Petaluma/E536-dynamicSforzando1.xml deleted file mode 100644 index 133ac5f82fd..00000000000 --- a/data/Petaluma/E536-dynamicSforzando1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E537-dynamicSforzandoPiano.xml b/data/Petaluma/E537-dynamicSforzandoPiano.xml deleted file mode 100644 index 80c516051b2..00000000000 --- a/data/Petaluma/E537-dynamicSforzandoPiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E538-dynamicSforzandoPianissimo.xml b/data/Petaluma/E538-dynamicSforzandoPianissimo.xml deleted file mode 100644 index 38744eda43a..00000000000 --- a/data/Petaluma/E538-dynamicSforzandoPianissimo.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E539-dynamicSforzato.xml b/data/Petaluma/E539-dynamicSforzato.xml deleted file mode 100644 index ab7b8b07a0a..00000000000 --- a/data/Petaluma/E539-dynamicSforzato.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E53A-dynamicSforzatoPiano.xml b/data/Petaluma/E53A-dynamicSforzatoPiano.xml deleted file mode 100644 index ea95244e219..00000000000 --- a/data/Petaluma/E53A-dynamicSforzatoPiano.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E53B-dynamicSforzatoFF.xml b/data/Petaluma/E53B-dynamicSforzatoFF.xml deleted file mode 100644 index 0327c94b3bb..00000000000 --- a/data/Petaluma/E53B-dynamicSforzatoFF.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E53C-dynamicRinforzando1.xml b/data/Petaluma/E53C-dynamicRinforzando1.xml deleted file mode 100644 index e621f444a35..00000000000 --- a/data/Petaluma/E53C-dynamicRinforzando1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E53D-dynamicRinforzando2.xml b/data/Petaluma/E53D-dynamicRinforzando2.xml deleted file mode 100644 index 87cf34f63bf..00000000000 --- a/data/Petaluma/E53D-dynamicRinforzando2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E566-ornamentTrill.xml b/data/Petaluma/E566-ornamentTrill.xml deleted file mode 100644 index 71970e93112..00000000000 --- a/data/Petaluma/E566-ornamentTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E567-ornamentTurn.xml b/data/Petaluma/E567-ornamentTurn.xml deleted file mode 100644 index be0f88adfb6..00000000000 --- a/data/Petaluma/E567-ornamentTurn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E568-ornamentTurnInverted.xml b/data/Petaluma/E568-ornamentTurnInverted.xml deleted file mode 100644 index be6a69a5f59..00000000000 --- a/data/Petaluma/E568-ornamentTurnInverted.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E569-ornamentTurnSlash.xml b/data/Petaluma/E569-ornamentTurnSlash.xml deleted file mode 100644 index 878a5448d97..00000000000 --- a/data/Petaluma/E569-ornamentTurnSlash.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E56A-ornamentTurnUp.xml b/data/Petaluma/E56A-ornamentTurnUp.xml deleted file mode 100644 index dc3749f34eb..00000000000 --- a/data/Petaluma/E56A-ornamentTurnUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E56B-ornamentTurnUpS.xml b/data/Petaluma/E56B-ornamentTurnUpS.xml deleted file mode 100644 index 88cb964d6b3..00000000000 --- a/data/Petaluma/E56B-ornamentTurnUpS.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E56C-ornamentShortTrill.xml b/data/Petaluma/E56C-ornamentShortTrill.xml deleted file mode 100644 index b30e35b3d40..00000000000 --- a/data/Petaluma/E56C-ornamentShortTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E56D-ornamentMordent.xml b/data/Petaluma/E56D-ornamentMordent.xml deleted file mode 100644 index da8917ba41c..00000000000 --- a/data/Petaluma/E56D-ornamentMordent.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E56E-ornamentTremblement.xml b/data/Petaluma/E56E-ornamentTremblement.xml deleted file mode 100644 index 08a5e3315d1..00000000000 --- a/data/Petaluma/E56E-ornamentTremblement.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E56F-ornamentHaydn.xml b/data/Petaluma/E56F-ornamentHaydn.xml deleted file mode 100644 index 0b7201ec408..00000000000 --- a/data/Petaluma/E56F-ornamentHaydn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E583-ornamentVerticalLine.xml b/data/Petaluma/E583-ornamentVerticalLine.xml deleted file mode 100644 index cdca1ce51d5..00000000000 --- a/data/Petaluma/E583-ornamentVerticalLine.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E587-ornamentSchleifer.xml b/data/Petaluma/E587-ornamentSchleifer.xml deleted file mode 100644 index 96d724e9741..00000000000 --- a/data/Petaluma/E587-ornamentSchleifer.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5B0-ornamentPrecompSlide.xml b/data/Petaluma/E5B0-ornamentPrecompSlide.xml deleted file mode 100644 index 07c73b866ea..00000000000 --- a/data/Petaluma/E5B0-ornamentPrecompSlide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5B1-ornamentPrecompDescendingSlide.xml b/data/Petaluma/E5B1-ornamentPrecompDescendingSlide.xml deleted file mode 100644 index 8b5fa0edb72..00000000000 --- a/data/Petaluma/E5B1-ornamentPrecompDescendingSlide.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5B2-ornamentPrecompAppoggTrill.xml b/data/Petaluma/E5B2-ornamentPrecompAppoggTrill.xml deleted file mode 100644 index f38478b871a..00000000000 --- a/data/Petaluma/E5B2-ornamentPrecompAppoggTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5B3-ornamentPrecompAppoggTrillSuffix.xml b/data/Petaluma/E5B3-ornamentPrecompAppoggTrillSuffix.xml deleted file mode 100644 index ee45ce19636..00000000000 --- a/data/Petaluma/E5B3-ornamentPrecompAppoggTrillSuffix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5B4-ornamentPrecompTurnTrillDAnglebert.xml b/data/Petaluma/E5B4-ornamentPrecompTurnTrillDAnglebert.xml deleted file mode 100644 index e5839e0bfda..00000000000 --- a/data/Petaluma/E5B4-ornamentPrecompTurnTrillDAnglebert.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5B5-ornamentPrecompSlideTrillDAnglebert.xml b/data/Petaluma/E5B5-ornamentPrecompSlideTrillDAnglebert.xml deleted file mode 100644 index bf305e04bbb..00000000000 --- a/data/Petaluma/E5B5-ornamentPrecompSlideTrillDAnglebert.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5B6-ornamentPrecompSlideTrillMarpurg.xml b/data/Petaluma/E5B6-ornamentPrecompSlideTrillMarpurg.xml deleted file mode 100644 index cfc842abf45..00000000000 --- a/data/Petaluma/E5B6-ornamentPrecompSlideTrillMarpurg.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5B7-ornamentPrecompTurnTrillBach.xml b/data/Petaluma/E5B7-ornamentPrecompTurnTrillBach.xml deleted file mode 100644 index ef403350cd6..00000000000 --- a/data/Petaluma/E5B7-ornamentPrecompTurnTrillBach.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5B8-ornamentPrecompSlideTrillBach.xml b/data/Petaluma/E5B8-ornamentPrecompSlideTrillBach.xml deleted file mode 100644 index 8957e1fdf3b..00000000000 --- a/data/Petaluma/E5B8-ornamentPrecompSlideTrillBach.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5B9-ornamentPrecompSlideTrillMuffat.xml b/data/Petaluma/E5B9-ornamentPrecompSlideTrillMuffat.xml deleted file mode 100644 index 4ffa5d8cadc..00000000000 --- a/data/Petaluma/E5B9-ornamentPrecompSlideTrillMuffat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5BA-ornamentPrecompSlideTrillSuffixMuffat.xml b/data/Petaluma/E5BA-ornamentPrecompSlideTrillSuffixMuffat.xml deleted file mode 100644 index dfbf4648741..00000000000 --- a/data/Petaluma/E5BA-ornamentPrecompSlideTrillSuffixMuffat.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5BB-ornamentPrecompTrillSuffixDandrieu.xml b/data/Petaluma/E5BB-ornamentPrecompTrillSuffixDandrieu.xml deleted file mode 100644 index 94e9f55c772..00000000000 --- a/data/Petaluma/E5BB-ornamentPrecompTrillSuffixDandrieu.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5BC-ornamentPrecompPortDeVoixMordent.xml b/data/Petaluma/E5BC-ornamentPrecompPortDeVoixMordent.xml deleted file mode 100644 index dd98bd54a51..00000000000 --- a/data/Petaluma/E5BC-ornamentPrecompPortDeVoixMordent.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5BD-ornamentPrecompTrillWithMordent.xml b/data/Petaluma/E5BD-ornamentPrecompTrillWithMordent.xml deleted file mode 100644 index 825fcd333a4..00000000000 --- a/data/Petaluma/E5BD-ornamentPrecompTrillWithMordent.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5BE-ornamentPrecompCadence.xml b/data/Petaluma/E5BE-ornamentPrecompCadence.xml deleted file mode 100644 index 06481d825af..00000000000 --- a/data/Petaluma/E5BE-ornamentPrecompCadence.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5BF-ornamentPrecompCadenceWithTurn.xml b/data/Petaluma/E5BF-ornamentPrecompCadenceWithTurn.xml deleted file mode 100644 index 6a7c4a46473..00000000000 --- a/data/Petaluma/E5BF-ornamentPrecompCadenceWithTurn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml b/data/Petaluma/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml deleted file mode 100644 index f6add93d24d..00000000000 --- a/data/Petaluma/E5C0-ornamentPrecompDoubleCadenceLowerPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5C1-ornamentPrecompCadenceUpperPrefix.xml b/data/Petaluma/E5C1-ornamentPrecompCadenceUpperPrefix.xml deleted file mode 100644 index 3fe9676025e..00000000000 --- a/data/Petaluma/E5C1-ornamentPrecompCadenceUpperPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5C2-ornamentPrecompCadenceUpperPrefixTurn.xml b/data/Petaluma/E5C2-ornamentPrecompCadenceUpperPrefixTurn.xml deleted file mode 100644 index 2309f193f3c..00000000000 --- a/data/Petaluma/E5C2-ornamentPrecompCadenceUpperPrefixTurn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml b/data/Petaluma/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml deleted file mode 100644 index ee35c233eb4..00000000000 --- a/data/Petaluma/E5C3-ornamentPrecompDoubleCadenceUpperPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5C4-ornamentPrecompDoubleCadenceUpperPrefixTurn.xml b/data/Petaluma/E5C4-ornamentPrecompDoubleCadenceUpperPrefixTurn.xml deleted file mode 100644 index 11e838c91de..00000000000 --- a/data/Petaluma/E5C4-ornamentPrecompDoubleCadenceUpperPrefixTurn.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5C5-ornamentPrecompMordentRelease.xml b/data/Petaluma/E5C5-ornamentPrecompMordentRelease.xml deleted file mode 100644 index ddee489bc40..00000000000 --- a/data/Petaluma/E5C5-ornamentPrecompMordentRelease.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5C6-ornamentPrecompMordentUpperPrefix.xml b/data/Petaluma/E5C6-ornamentPrecompMordentUpperPrefix.xml deleted file mode 100644 index 7e7b2b5ec46..00000000000 --- a/data/Petaluma/E5C6-ornamentPrecompMordentUpperPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml b/data/Petaluma/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml deleted file mode 100644 index 6fba4d0842a..00000000000 --- a/data/Petaluma/E5C7-ornamentPrecompInvertedMordentUpperPrefix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5C8-ornamentPrecompTrillLowerSuffix.xml b/data/Petaluma/E5C8-ornamentPrecompTrillLowerSuffix.xml deleted file mode 100644 index 43affb3ce57..00000000000 --- a/data/Petaluma/E5C8-ornamentPrecompTrillLowerSuffix.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5E5-brassMuteClosed.xml b/data/Petaluma/E5E5-brassMuteClosed.xml deleted file mode 100644 index 1c3700121c0..00000000000 --- a/data/Petaluma/E5E5-brassMuteClosed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5E6-brassMuteHalfClosed.xml b/data/Petaluma/E5E6-brassMuteHalfClosed.xml deleted file mode 100644 index d3e576bb86b..00000000000 --- a/data/Petaluma/E5E6-brassMuteHalfClosed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E5E7-brassMuteOpen.xml b/data/Petaluma/E5E7-brassMuteOpen.xml deleted file mode 100644 index 6977c8ceaf0..00000000000 --- a/data/Petaluma/E5E7-brassMuteOpen.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E610-stringsDownBow.xml b/data/Petaluma/E610-stringsDownBow.xml deleted file mode 100644 index 83686c6f59a..00000000000 --- a/data/Petaluma/E610-stringsDownBow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E611-stringsDownBowTurned.xml b/data/Petaluma/E611-stringsDownBowTurned.xml deleted file mode 100644 index ba47f07ca3e..00000000000 --- a/data/Petaluma/E611-stringsDownBowTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E612-stringsUpBow.xml b/data/Petaluma/E612-stringsUpBow.xml deleted file mode 100644 index 359e4abb463..00000000000 --- a/data/Petaluma/E612-stringsUpBow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E613-stringsUpBowTurned.xml b/data/Petaluma/E613-stringsUpBowTurned.xml deleted file mode 100644 index 654a4152e83..00000000000 --- a/data/Petaluma/E613-stringsUpBowTurned.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E614-stringsHarmonic.xml b/data/Petaluma/E614-stringsHarmonic.xml deleted file mode 100644 index b7ac3306da6..00000000000 --- a/data/Petaluma/E614-stringsHarmonic.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E630-pluckedSnapPizzicatoBelow.xml b/data/Petaluma/E630-pluckedSnapPizzicatoBelow.xml deleted file mode 100644 index 4a6f3e0150d..00000000000 --- a/data/Petaluma/E630-pluckedSnapPizzicatoBelow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E631-pluckedSnapPizzicatoAbove.xml b/data/Petaluma/E631-pluckedSnapPizzicatoAbove.xml deleted file mode 100644 index ffb7f0f8784..00000000000 --- a/data/Petaluma/E631-pluckedSnapPizzicatoAbove.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E632-pluckedBuzzPizzicato.xml b/data/Petaluma/E632-pluckedBuzzPizzicato.xml deleted file mode 100644 index 2655abbaba6..00000000000 --- a/data/Petaluma/E632-pluckedBuzzPizzicato.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E633-pluckedLeftHandPizzicato.xml b/data/Petaluma/E633-pluckedLeftHandPizzicato.xml deleted file mode 100644 index 7f278fbf1f0..00000000000 --- a/data/Petaluma/E633-pluckedLeftHandPizzicato.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E638-pluckedDamp.xml b/data/Petaluma/E638-pluckedDamp.xml deleted file mode 100644 index 0d1672da495..00000000000 --- a/data/Petaluma/E638-pluckedDamp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E645-vocalSprechgesang.xml b/data/Petaluma/E645-vocalSprechgesang.xml deleted file mode 100644 index 4f0c9ce30f1..00000000000 --- a/data/Petaluma/E645-vocalSprechgesang.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E650-keyboardPedalPed.xml b/data/Petaluma/E650-keyboardPedalPed.xml deleted file mode 100644 index 09000408e46..00000000000 --- a/data/Petaluma/E650-keyboardPedalPed.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E651-keyboardPedalP.xml b/data/Petaluma/E651-keyboardPedalP.xml deleted file mode 100644 index 6fbfc9f5a6d..00000000000 --- a/data/Petaluma/E651-keyboardPedalP.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E655-keyboardPedalUp.xml b/data/Petaluma/E655-keyboardPedalUp.xml deleted file mode 100644 index dc52d20bb69..00000000000 --- a/data/Petaluma/E655-keyboardPedalUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E659-keyboardPedalSost.xml b/data/Petaluma/E659-keyboardPedalSost.xml deleted file mode 100644 index e0a7ccd42ac..00000000000 --- a/data/Petaluma/E659-keyboardPedalSost.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E65A-keyboardPedalS.xml b/data/Petaluma/E65A-keyboardPedalS.xml deleted file mode 100644 index d8215e364d6..00000000000 --- a/data/Petaluma/E65A-keyboardPedalS.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E880-tuplet0.xml b/data/Petaluma/E880-tuplet0.xml deleted file mode 100644 index e8271f87a65..00000000000 --- a/data/Petaluma/E880-tuplet0.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E881-tuplet1.xml b/data/Petaluma/E881-tuplet1.xml deleted file mode 100644 index 4ff4effd11f..00000000000 --- a/data/Petaluma/E881-tuplet1.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E882-tuplet2.xml b/data/Petaluma/E882-tuplet2.xml deleted file mode 100644 index 2958619fa36..00000000000 --- a/data/Petaluma/E882-tuplet2.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E883-tuplet3.xml b/data/Petaluma/E883-tuplet3.xml deleted file mode 100644 index e48dfb0e5be..00000000000 --- a/data/Petaluma/E883-tuplet3.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E884-tuplet4.xml b/data/Petaluma/E884-tuplet4.xml deleted file mode 100644 index bbb531d7645..00000000000 --- a/data/Petaluma/E884-tuplet4.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E885-tuplet5.xml b/data/Petaluma/E885-tuplet5.xml deleted file mode 100644 index 99c45178f7f..00000000000 --- a/data/Petaluma/E885-tuplet5.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E886-tuplet6.xml b/data/Petaluma/E886-tuplet6.xml deleted file mode 100644 index b200c5e9fdd..00000000000 --- a/data/Petaluma/E886-tuplet6.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E887-tuplet7.xml b/data/Petaluma/E887-tuplet7.xml deleted file mode 100644 index 17a609c889d..00000000000 --- a/data/Petaluma/E887-tuplet7.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E888-tuplet8.xml b/data/Petaluma/E888-tuplet8.xml deleted file mode 100644 index 0608d2b1558..00000000000 --- a/data/Petaluma/E888-tuplet8.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E889-tuplet9.xml b/data/Petaluma/E889-tuplet9.xml deleted file mode 100644 index ae22879c335..00000000000 --- a/data/Petaluma/E889-tuplet9.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E88A-tupletColon.xml b/data/Petaluma/E88A-tupletColon.xml deleted file mode 100644 index 2409d784f92..00000000000 --- a/data/Petaluma/E88A-tupletColon.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E938-mensuralNoteheadSemibrevisBlack.xml b/data/Petaluma/E938-mensuralNoteheadSemibrevisBlack.xml deleted file mode 100644 index cf07560106d..00000000000 --- a/data/Petaluma/E938-mensuralNoteheadSemibrevisBlack.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E939-mensuralNoteheadSemibrevisVoid.xml b/data/Petaluma/E939-mensuralNoteheadSemibrevisVoid.xml deleted file mode 100644 index b45f0675fd2..00000000000 --- a/data/Petaluma/E939-mensuralNoteheadSemibrevisVoid.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E93C-mensuralNoteheadMinimaWhite.xml b/data/Petaluma/E93C-mensuralNoteheadMinimaWhite.xml deleted file mode 100644 index ac943dc3621..00000000000 --- a/data/Petaluma/E93C-mensuralNoteheadMinimaWhite.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E93D-mensuralNoteheadSemiminimaWhite.xml b/data/Petaluma/E93D-mensuralNoteheadSemiminimaWhite.xml deleted file mode 100644 index 9bbc8dab90d..00000000000 --- a/data/Petaluma/E93D-mensuralNoteheadSemiminimaWhite.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E93E-mensuralCombStemUp.xml b/data/Petaluma/E93E-mensuralCombStemUp.xml deleted file mode 100644 index b3f2e5f6aa8..00000000000 --- a/data/Petaluma/E93E-mensuralCombStemUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E93F-mensuralCombStemDown.xml b/data/Petaluma/E93F-mensuralCombStemDown.xml deleted file mode 100644 index 7f158813bca..00000000000 --- a/data/Petaluma/E93F-mensuralCombStemDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E949-mensuralCombStemUpFlagSemiminima.xml b/data/Petaluma/E949-mensuralCombStemUpFlagSemiminima.xml deleted file mode 100644 index efb43cf565e..00000000000 --- a/data/Petaluma/E949-mensuralCombStemUpFlagSemiminima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E94A-mensuralCombStemDownFlagSemiminima.xml b/data/Petaluma/E94A-mensuralCombStemDownFlagSemiminima.xml deleted file mode 100644 index ed7b25dd8c4..00000000000 --- a/data/Petaluma/E94A-mensuralCombStemDownFlagSemiminima.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E94B-mensuralCombStemUpFlagFusa.xml b/data/Petaluma/E94B-mensuralCombStemUpFlagFusa.xml deleted file mode 100644 index b18018df0cd..00000000000 --- a/data/Petaluma/E94B-mensuralCombStemUpFlagFusa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/E94C-mensuralCombStemDownFlagFusa.xml b/data/Petaluma/E94C-mensuralCombStemDownFlagFusa.xml deleted file mode 100644 index 6a1ddaaa664..00000000000 --- a/data/Petaluma/E94C-mensuralCombStemDownFlagFusa.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/EAA4-wiggleTrill.xml b/data/Petaluma/EAA4-wiggleTrill.xml deleted file mode 100644 index 641b12e58c2..00000000000 --- a/data/Petaluma/EAA4-wiggleTrill.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/EAA9-wiggleArpeggiatoUp.xml b/data/Petaluma/EAA9-wiggleArpeggiatoUp.xml deleted file mode 100644 index 1a7353aa075..00000000000 --- a/data/Petaluma/EAA9-wiggleArpeggiatoUp.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/EAAA-wiggleArpeggiatoDown.xml b/data/Petaluma/EAAA-wiggleArpeggiatoDown.xml deleted file mode 100644 index 81f41a743d3..00000000000 --- a/data/Petaluma/EAAA-wiggleArpeggiatoDown.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/EAAD-wiggleArpeggiatoUpArrow.xml b/data/Petaluma/EAAD-wiggleArpeggiatoUpArrow.xml deleted file mode 100644 index be06ab229b7..00000000000 --- a/data/Petaluma/EAAD-wiggleArpeggiatoUpArrow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/EAAE-wiggleArpeggiatoDownArrow.xml b/data/Petaluma/EAAE-wiggleArpeggiatoDownArrow.xml deleted file mode 100644 index 10006b42d52..00000000000 --- a/data/Petaluma/EAAE-wiggleArpeggiatoDownArrow.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/Petaluma/EAAF-wiggleGlissando.xml b/data/Petaluma/EAAF-wiggleGlissando.xml deleted file mode 100644 index fd2a327bec0..00000000000 --- a/data/Petaluma/EAAF-wiggleGlissando.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From 8d23093476959d7fba622ebf4dae901488d36e37 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Wed, 26 Jan 2022 09:57:00 +0100 Subject: [PATCH 143/403] regenerate SMuFL glyphs --- data/Bravura.xml | 696 ++++++++++++++++++++++++++++++++++++++++ data/Bravura/E000.xml | 1 + data/Bravura/E003.xml | 1 + data/Bravura/E004.xml | 1 + data/Bravura/E043.xml | 1 + data/Bravura/E044.xml | 1 + data/Bravura/E045.xml | 1 + data/Bravura/E046.xml | 1 + data/Bravura/E047.xml | 1 + data/Bravura/E048.xml | 1 + data/Bravura/E049.xml | 1 + data/Bravura/E04B.xml | 1 + data/Bravura/E050.xml | 1 + data/Bravura/E051.xml | 1 + data/Bravura/E052.xml | 1 + data/Bravura/E053.xml | 1 + data/Bravura/E054.xml | 1 + data/Bravura/E055.xml | 1 + data/Bravura/E056.xml | 1 + data/Bravura/E05C.xml | 1 + data/Bravura/E05D.xml | 1 + data/Bravura/E062.xml | 1 + data/Bravura/E063.xml | 1 + data/Bravura/E064.xml | 1 + data/Bravura/E065.xml | 1 + data/Bravura/E066.xml | 1 + data/Bravura/E069.xml | 1 + data/Bravura/E06A.xml | 1 + data/Bravura/E073.xml | 1 + data/Bravura/E074.xml | 1 + data/Bravura/E075.xml | 1 + data/Bravura/E076.xml | 1 + data/Bravura/E077.xml | 1 + data/Bravura/E080.xml | 1 + data/Bravura/E081.xml | 1 + data/Bravura/E082.xml | 1 + data/Bravura/E083.xml | 1 + data/Bravura/E084.xml | 1 + data/Bravura/E085.xml | 1 + data/Bravura/E086.xml | 1 + data/Bravura/E087.xml | 1 + data/Bravura/E088.xml | 1 + data/Bravura/E089.xml | 1 + data/Bravura/E08A.xml | 1 + data/Bravura/E08B.xml | 1 + data/Bravura/E08C.xml | 1 + data/Bravura/E08D.xml | 1 + data/Bravura/E08E.xml | 1 + data/Bravura/E08F.xml | 1 + data/Bravura/E090.xml | 1 + data/Bravura/E091.xml | 1 + data/Bravura/E092.xml | 1 + data/Bravura/E093.xml | 1 + data/Bravura/E094.xml | 1 + data/Bravura/E095.xml | 1 + data/Bravura/E0A0.xml | 1 + data/Bravura/E0A1.xml | 1 + data/Bravura/E0A2.xml | 1 + data/Bravura/E0A3.xml | 1 + data/Bravura/E0A4.xml | 1 + data/Bravura/E0A5.xml | 1 + data/Bravura/E0A9.xml | 1 + data/Bravura/E0AF.xml | 1 + data/Bravura/E0B5.xml | 1 + data/Bravura/E0B6.xml | 1 + data/Bravura/E0B7.xml | 1 + data/Bravura/E0D9.xml | 1 + data/Bravura/E0DA.xml | 1 + data/Bravura/E0DB.xml | 1 + data/Bravura/E0DC.xml | 1 + data/Bravura/E0DD.xml | 1 + data/Bravura/E0DE.xml | 1 + data/Bravura/E0F5.xml | 1 + data/Bravura/E0F6.xml | 1 + data/Bravura/E0FA.xml | 1 + data/Bravura/E101.xml | 1 + data/Bravura/E102.xml | 1 + data/Bravura/E103.xml | 1 + data/Bravura/E220.xml | 1 + data/Bravura/E221.xml | 1 + data/Bravura/E222.xml | 1 + data/Bravura/E223.xml | 1 + data/Bravura/E224.xml | 1 + data/Bravura/E22A.xml | 1 + data/Bravura/E240.xml | 1 + data/Bravura/E241.xml | 1 + data/Bravura/E242.xml | 1 + data/Bravura/E243.xml | 1 + data/Bravura/E244.xml | 1 + data/Bravura/E245.xml | 1 + data/Bravura/E246.xml | 1 + data/Bravura/E247.xml | 1 + data/Bravura/E248.xml | 1 + data/Bravura/E249.xml | 1 + data/Bravura/E24A.xml | 1 + data/Bravura/E24B.xml | 1 + data/Bravura/E24C.xml | 1 + data/Bravura/E24D.xml | 1 + data/Bravura/E24E.xml | 1 + data/Bravura/E24F.xml | 1 + data/Bravura/E260.xml | 1 + data/Bravura/E261.xml | 1 + data/Bravura/E262.xml | 1 + data/Bravura/E263.xml | 1 + data/Bravura/E264.xml | 1 + data/Bravura/E265.xml | 1 + data/Bravura/E266.xml | 1 + data/Bravura/E267.xml | 1 + data/Bravura/E268.xml | 1 + data/Bravura/E269.xml | 1 + data/Bravura/E26A.xml | 1 + data/Bravura/E26B.xml | 1 + data/Bravura/E26C.xml | 1 + data/Bravura/E26D.xml | 1 + data/Bravura/E270.xml | 1 + data/Bravura/E271.xml | 1 + data/Bravura/E272.xml | 1 + data/Bravura/E273.xml | 1 + data/Bravura/E274.xml | 1 + data/Bravura/E275.xml | 1 + data/Bravura/E280.xml | 1 + data/Bravura/E281.xml | 1 + data/Bravura/E282.xml | 1 + data/Bravura/E283.xml | 1 + data/Bravura/E440.xml | 1 + data/Bravura/E441.xml | 1 + data/Bravura/E442.xml | 1 + data/Bravura/E443.xml | 1 + data/Bravura/E444.xml | 1 + data/Bravura/E445.xml | 1 + data/Bravura/E446.xml | 1 + data/Bravura/E447.xml | 1 + data/Bravura/E4A0.xml | 1 + data/Bravura/E4A1.xml | 1 + data/Bravura/E4A2.xml | 1 + data/Bravura/E4A3.xml | 1 + data/Bravura/E4A4.xml | 1 + data/Bravura/E4A5.xml | 1 + data/Bravura/E4A6.xml | 1 + data/Bravura/E4A7.xml | 1 + data/Bravura/E4A8.xml | 1 + data/Bravura/E4A9.xml | 1 + data/Bravura/E4AA.xml | 1 + data/Bravura/E4AB.xml | 1 + data/Bravura/E4AC.xml | 1 + data/Bravura/E4AD.xml | 1 + data/Bravura/E4AE.xml | 1 + data/Bravura/E4AF.xml | 1 + data/Bravura/E4B0.xml | 1 + data/Bravura/E4B1.xml | 1 + data/Bravura/E4B2.xml | 1 + data/Bravura/E4B3.xml | 1 + data/Bravura/E4B4.xml | 1 + data/Bravura/E4B5.xml | 1 + data/Bravura/E4B6.xml | 1 + data/Bravura/E4B7.xml | 1 + data/Bravura/E4B8.xml | 1 + data/Bravura/E4B9.xml | 1 + data/Bravura/E4BA.xml | 1 + data/Bravura/E4BB.xml | 1 + data/Bravura/E4BC.xml | 1 + data/Bravura/E4BD.xml | 1 + data/Bravura/E4C0.xml | 1 + data/Bravura/E4C1.xml | 1 + data/Bravura/E4C2.xml | 1 + data/Bravura/E4C3.xml | 1 + data/Bravura/E4C4.xml | 1 + data/Bravura/E4C5.xml | 1 + data/Bravura/E4C6.xml | 1 + data/Bravura/E4C7.xml | 1 + data/Bravura/E4C8.xml | 1 + data/Bravura/E4C9.xml | 1 + data/Bravura/E4CE.xml | 1 + data/Bravura/E4E0.xml | 1 + data/Bravura/E4E1.xml | 1 + data/Bravura/E4E2.xml | 1 + data/Bravura/E4E3.xml | 1 + data/Bravura/E4E4.xml | 1 + data/Bravura/E4E5.xml | 1 + data/Bravura/E4E6.xml | 1 + data/Bravura/E4E7.xml | 1 + data/Bravura/E4E8.xml | 1 + data/Bravura/E4E9.xml | 1 + data/Bravura/E4EA.xml | 1 + data/Bravura/E4EB.xml | 1 + data/Bravura/E4EC.xml | 1 + data/Bravura/E4ED.xml | 1 + data/Bravura/E4F2.xml | 1 + data/Bravura/E4F6.xml | 1 + data/Bravura/E500.xml | 1 + data/Bravura/E501.xml | 1 + data/Bravura/E502.xml | 1 + data/Bravura/E503.xml | 1 + data/Bravura/E504.xml | 1 + data/Bravura/E505.xml | 1 + data/Bravura/E510.xml | 1 + data/Bravura/E511.xml | 1 + data/Bravura/E512.xml | 1 + data/Bravura/E513.xml | 1 + data/Bravura/E514.xml | 1 + data/Bravura/E515.xml | 1 + data/Bravura/E516.xml | 1 + data/Bravura/E517.xml | 1 + data/Bravura/E518.xml | 1 + data/Bravura/E519.xml | 1 + data/Bravura/E51A.xml | 1 + data/Bravura/E51B.xml | 1 + data/Bravura/E51C.xml | 1 + data/Bravura/E51D.xml | 1 + data/Bravura/E51E.xml | 1 + data/Bravura/E520.xml | 1 + data/Bravura/E521.xml | 1 + data/Bravura/E522.xml | 1 + data/Bravura/E523.xml | 1 + data/Bravura/E524.xml | 1 + data/Bravura/E525.xml | 1 + data/Bravura/E526.xml | 1 + data/Bravura/E527.xml | 1 + data/Bravura/E528.xml | 1 + data/Bravura/E529.xml | 1 + data/Bravura/E52A.xml | 1 + data/Bravura/E52B.xml | 1 + data/Bravura/E52C.xml | 1 + data/Bravura/E52D.xml | 1 + data/Bravura/E52E.xml | 1 + data/Bravura/E52F.xml | 1 + data/Bravura/E530.xml | 1 + data/Bravura/E531.xml | 1 + data/Bravura/E532.xml | 1 + data/Bravura/E533.xml | 1 + data/Bravura/E534.xml | 1 + data/Bravura/E535.xml | 1 + data/Bravura/E536.xml | 1 + data/Bravura/E537.xml | 1 + data/Bravura/E538.xml | 1 + data/Bravura/E539.xml | 1 + data/Bravura/E53A.xml | 1 + data/Bravura/E53B.xml | 1 + data/Bravura/E53C.xml | 1 + data/Bravura/E53D.xml | 1 + data/Bravura/E566.xml | 1 + data/Bravura/E567.xml | 1 + data/Bravura/E568.xml | 1 + data/Bravura/E569.xml | 1 + data/Bravura/E56A.xml | 1 + data/Bravura/E56B.xml | 1 + data/Bravura/E56C.xml | 1 + data/Bravura/E56D.xml | 1 + data/Bravura/E56E.xml | 1 + data/Bravura/E56F.xml | 1 + data/Bravura/E583.xml | 1 + data/Bravura/E587.xml | 1 + data/Bravura/E59D.xml | 1 + data/Bravura/E59E.xml | 1 + data/Bravura/E5B0.xml | 1 + data/Bravura/E5B1.xml | 1 + data/Bravura/E5B2.xml | 1 + data/Bravura/E5B3.xml | 1 + data/Bravura/E5B4.xml | 1 + data/Bravura/E5B5.xml | 1 + data/Bravura/E5B6.xml | 1 + data/Bravura/E5B7.xml | 1 + data/Bravura/E5B8.xml | 1 + data/Bravura/E5B9.xml | 1 + data/Bravura/E5BA.xml | 1 + data/Bravura/E5BB.xml | 1 + data/Bravura/E5BC.xml | 1 + data/Bravura/E5BD.xml | 1 + data/Bravura/E5BE.xml | 1 + data/Bravura/E5BF.xml | 1 + data/Bravura/E5C0.xml | 1 + data/Bravura/E5C1.xml | 1 + data/Bravura/E5C2.xml | 1 + data/Bravura/E5C3.xml | 1 + data/Bravura/E5C4.xml | 1 + data/Bravura/E5C5.xml | 1 + data/Bravura/E5C6.xml | 1 + data/Bravura/E5C7.xml | 1 + data/Bravura/E5C8.xml | 1 + data/Bravura/E5E5.xml | 1 + data/Bravura/E5E6.xml | 1 + data/Bravura/E5E7.xml | 1 + data/Bravura/E610.xml | 1 + data/Bravura/E611.xml | 1 + data/Bravura/E612.xml | 1 + data/Bravura/E613.xml | 1 + data/Bravura/E614.xml | 1 + data/Bravura/E630.xml | 1 + data/Bravura/E631.xml | 1 + data/Bravura/E632.xml | 1 + data/Bravura/E633.xml | 1 + data/Bravura/E638.xml | 1 + data/Bravura/E645.xml | 1 + data/Bravura/E650.xml | 1 + data/Bravura/E651.xml | 1 + data/Bravura/E655.xml | 1 + data/Bravura/E659.xml | 1 + data/Bravura/E65A.xml | 1 + data/Bravura/E880.xml | 1 + data/Bravura/E881.xml | 1 + data/Bravura/E882.xml | 1 + data/Bravura/E883.xml | 1 + data/Bravura/E884.xml | 1 + data/Bravura/E885.xml | 1 + data/Bravura/E886.xml | 1 + data/Bravura/E887.xml | 1 + data/Bravura/E888.xml | 1 + data/Bravura/E889.xml | 1 + data/Bravura/E88A.xml | 1 + data/Bravura/E901.xml | 1 + data/Bravura/E902.xml | 1 + data/Bravura/E904.xml | 1 + data/Bravura/E906.xml | 1 + data/Bravura/E907.xml | 1 + data/Bravura/E908.xml | 1 + data/Bravura/E909.xml | 1 + data/Bravura/E90A.xml | 1 + data/Bravura/E90B.xml | 1 + data/Bravura/E910.xml | 1 + data/Bravura/E911.xml | 1 + data/Bravura/E912.xml | 1 + data/Bravura/E913.xml | 1 + data/Bravura/E914.xml | 1 + data/Bravura/E915.xml | 1 + data/Bravura/E916.xml | 1 + data/Bravura/E917.xml | 1 + data/Bravura/E918.xml | 1 + data/Bravura/E919.xml | 1 + data/Bravura/E91A.xml | 1 + data/Bravura/E91B.xml | 1 + data/Bravura/E91C.xml | 1 + data/Bravura/E91D.xml | 1 + data/Bravura/E91E.xml | 1 + data/Bravura/E91F.xml | 1 + data/Bravura/E920.xml | 1 + data/Bravura/E921.xml | 1 + data/Bravura/E922.xml | 1 + data/Bravura/E923.xml | 1 + data/Bravura/E924.xml | 1 + data/Bravura/E925.xml | 1 + data/Bravura/E938.xml | 1 + data/Bravura/E939.xml | 1 + data/Bravura/E93C.xml | 1 + data/Bravura/E93D.xml | 1 + data/Bravura/E93E.xml | 1 + data/Bravura/E93F.xml | 1 + data/Bravura/E949.xml | 1 + data/Bravura/E94A.xml | 1 + data/Bravura/E94B.xml | 1 + data/Bravura/E94C.xml | 1 + data/Bravura/E990.xml | 1 + data/Bravura/E991.xml | 1 + data/Bravura/E996.xml | 1 + data/Bravura/E99B.xml | 1 + data/Bravura/E99E.xml | 1 + data/Bravura/E99F.xml | 1 + data/Bravura/E9B4.xml | 1 + data/Bravura/E9B5.xml | 1 + data/Bravura/E9B6.xml | 1 + data/Bravura/E9B7.xml | 1 + data/Bravura/E9B9.xml | 1 + data/Bravura/E9BA.xml | 1 + data/Bravura/E9BB.xml | 1 + data/Bravura/E9BC.xml | 1 + data/Bravura/E9E0.xml | 1 + data/Bravura/E9E1.xml | 1 + data/Bravura/E9E2.xml | 1 + data/Bravura/E9E3.xml | 1 + data/Bravura/E9F0.xml | 1 + data/Bravura/E9F1.xml | 1 + data/Bravura/E9F2.xml | 1 + data/Bravura/E9F3.xml | 1 + data/Bravura/E9F4.xml | 1 + data/Bravura/E9F5.xml | 1 + data/Bravura/E9F6.xml | 1 + data/Bravura/E9F7.xml | 1 + data/Bravura/E9F8.xml | 1 + data/Bravura/EA02.xml | 1 + data/Bravura/EA06.xml | 1 + data/Bravura/EAA4.xml | 1 + data/Bravura/EAA9.xml | 1 + data/Bravura/EAAA.xml | 1 + data/Bravura/EAAD.xml | 1 + data/Bravura/EAAE.xml | 1 + data/Bravura/EAAF.xml | 1 + data/Bravura/EBA7.xml | 1 + data/Bravura/EBA8.xml | 1 + data/Bravura/EBA9.xml | 1 + data/Bravura/EBAA.xml | 1 + data/Bravura/EBAB.xml | 1 + data/Bravura/EBAC.xml | 1 + data/Bravura/EBC0.xml | 1 + data/Bravura/EBC1.xml | 1 + data/Bravura/EBC2.xml | 1 + data/Bravura/EBC3.xml | 1 + data/Bravura/EBC4.xml | 1 + data/Bravura/EBC5.xml | 1 + data/Bravura/EBC6.xml | 1 + data/Bravura/EBC7.xml | 1 + data/Bravura/EBC8.xml | 1 + data/Bravura/EBC9.xml | 1 + data/Bravura/EBCA.xml | 1 + data/Bravura/EBCB.xml | 1 + data/Bravura/EBCC.xml | 1 + data/Bravura/EBE0.xml | 1 + data/Bravura/EBE1.xml | 1 + data/Bravura/EBE2.xml | 1 + data/Bravura/EBE3.xml | 1 + data/Bravura/EBE4.xml | 1 + data/Bravura/EBE5.xml | 1 + data/Bravura/EBE6.xml | 1 + data/Bravura/EBE7.xml | 1 + data/Bravura/EBE8.xml | 1 + data/Bravura/EBE9.xml | 1 + data/Bravura/ED40.xml | 1 + data/Bravura/ED41.xml | 1 + data/Gootville.xml | 416 ++++++++++++++++++++++++ data/Gootville/E003.xml | 1 + data/Gootville/E004.xml | 1 + data/Gootville/E043.xml | 1 + data/Gootville/E044.xml | 1 + data/Gootville/E047.xml | 1 + data/Gootville/E048.xml | 1 + data/Gootville/E049.xml | 1 + data/Gootville/E050.xml | 1 + data/Gootville/E051.xml | 1 + data/Gootville/E052.xml | 1 + data/Gootville/E053.xml | 1 + data/Gootville/E054.xml | 1 + data/Gootville/E05C.xml | 1 + data/Gootville/E05D.xml | 1 + data/Gootville/E062.xml | 1 + data/Gootville/E063.xml | 1 + data/Gootville/E064.xml | 1 + data/Gootville/E065.xml | 1 + data/Gootville/E066.xml | 1 + data/Gootville/E069.xml | 1 + data/Gootville/E06A.xml | 1 + data/Gootville/E080.xml | 1 + data/Gootville/E081.xml | 1 + data/Gootville/E082.xml | 1 + data/Gootville/E083.xml | 1 + data/Gootville/E084.xml | 1 + data/Gootville/E085.xml | 1 + data/Gootville/E086.xml | 1 + data/Gootville/E087.xml | 1 + data/Gootville/E088.xml | 1 + data/Gootville/E089.xml | 1 + data/Gootville/E08A.xml | 1 + data/Gootville/E08B.xml | 1 + data/Gootville/E092.xml | 1 + data/Gootville/E093.xml | 1 + data/Gootville/E094.xml | 1 + data/Gootville/E095.xml | 1 + data/Gootville/E0A0.xml | 1 + data/Gootville/E0A1.xml | 1 + data/Gootville/E0A2.xml | 1 + data/Gootville/E0A3.xml | 1 + data/Gootville/E0A4.xml | 1 + data/Gootville/E0A9.xml | 1 + data/Gootville/E0D9.xml | 1 + data/Gootville/E0DA.xml | 1 + data/Gootville/E0DB.xml | 1 + data/Gootville/E0DC.xml | 1 + data/Gootville/E0DD.xml | 1 + data/Gootville/E0DE.xml | 1 + data/Gootville/E0F5.xml | 1 + data/Gootville/E0F6.xml | 1 + data/Gootville/E101.xml | 1 + data/Gootville/E102.xml | 1 + data/Gootville/E103.xml | 1 + data/Gootville/E240.xml | 1 + data/Gootville/E241.xml | 1 + data/Gootville/E242.xml | 1 + data/Gootville/E243.xml | 1 + data/Gootville/E244.xml | 1 + data/Gootville/E245.xml | 1 + data/Gootville/E246.xml | 1 + data/Gootville/E247.xml | 1 + data/Gootville/E248.xml | 1 + data/Gootville/E249.xml | 1 + data/Gootville/E260.xml | 1 + data/Gootville/E261.xml | 1 + data/Gootville/E262.xml | 1 + data/Gootville/E263.xml | 1 + data/Gootville/E264.xml | 1 + data/Gootville/E26A.xml | 1 + data/Gootville/E26B.xml | 1 + data/Gootville/E270.xml | 1 + data/Gootville/E271.xml | 1 + data/Gootville/E272.xml | 1 + data/Gootville/E273.xml | 1 + data/Gootville/E274.xml | 1 + data/Gootville/E275.xml | 1 + data/Gootville/E280.xml | 1 + data/Gootville/E281.xml | 1 + data/Gootville/E282.xml | 1 + data/Gootville/E283.xml | 1 + data/Gootville/E440.xml | 1 + data/Gootville/E441.xml | 1 + data/Gootville/E442.xml | 1 + data/Gootville/E443.xml | 1 + data/Gootville/E444.xml | 1 + data/Gootville/E445.xml | 1 + data/Gootville/E446.xml | 1 + data/Gootville/E447.xml | 1 + data/Gootville/E4A0.xml | 1 + data/Gootville/E4A1.xml | 1 + data/Gootville/E4A2.xml | 1 + data/Gootville/E4A3.xml | 1 + data/Gootville/E4A4.xml | 1 + data/Gootville/E4A5.xml | 1 + data/Gootville/E4A6.xml | 1 + data/Gootville/E4A7.xml | 1 + data/Gootville/E4A8.xml | 1 + data/Gootville/E4A9.xml | 1 + data/Gootville/E4AC.xml | 1 + data/Gootville/E4AD.xml | 1 + data/Gootville/E4B2.xml | 1 + data/Gootville/E4B3.xml | 1 + data/Gootville/E4B6.xml | 1 + data/Gootville/E4B7.xml | 1 + data/Gootville/E4C0.xml | 1 + data/Gootville/E4C1.xml | 1 + data/Gootville/E4C4.xml | 1 + data/Gootville/E4C5.xml | 1 + data/Gootville/E4C6.xml | 1 + data/Gootville/E4C7.xml | 1 + data/Gootville/E4C8.xml | 1 + data/Gootville/E4C9.xml | 1 + data/Gootville/E4CE.xml | 1 + data/Gootville/E4E1.xml | 1 + data/Gootville/E4E2.xml | 1 + data/Gootville/E4E3.xml | 1 + data/Gootville/E4E4.xml | 1 + data/Gootville/E4E5.xml | 1 + data/Gootville/E4E6.xml | 1 + data/Gootville/E4E7.xml | 1 + data/Gootville/E4E8.xml | 1 + data/Gootville/E4E9.xml | 1 + data/Gootville/E4EA.xml | 1 + data/Gootville/E4F2.xml | 1 + data/Gootville/E510.xml | 1 + data/Gootville/E514.xml | 1 + data/Gootville/E517.xml | 1 + data/Gootville/E51A.xml | 1 + data/Gootville/E51B.xml | 1 + data/Gootville/E520.xml | 1 + data/Gootville/E521.xml | 1 + data/Gootville/E522.xml | 1 + data/Gootville/E523.xml | 1 + data/Gootville/E524.xml | 1 + data/Gootville/E525.xml | 1 + data/Gootville/E526.xml | 1 + data/Gootville/E527.xml | 1 + data/Gootville/E528.xml | 1 + data/Gootville/E529.xml | 1 + data/Gootville/E52A.xml | 1 + data/Gootville/E52B.xml | 1 + data/Gootville/E52C.xml | 1 + data/Gootville/E52D.xml | 1 + data/Gootville/E52E.xml | 1 + data/Gootville/E52F.xml | 1 + data/Gootville/E530.xml | 1 + data/Gootville/E531.xml | 1 + data/Gootville/E532.xml | 1 + data/Gootville/E533.xml | 1 + data/Gootville/E534.xml | 1 + data/Gootville/E535.xml | 1 + data/Gootville/E536.xml | 1 + data/Gootville/E537.xml | 1 + data/Gootville/E538.xml | 1 + data/Gootville/E539.xml | 1 + data/Gootville/E53A.xml | 1 + data/Gootville/E53B.xml | 1 + data/Gootville/E53C.xml | 1 + data/Gootville/E53D.xml | 1 + data/Gootville/E566.xml | 1 + data/Gootville/E567.xml | 1 + data/Gootville/E568.xml | 1 + data/Gootville/E569.xml | 1 + data/Gootville/E56C.xml | 1 + data/Gootville/E56D.xml | 1 + data/Gootville/E56E.xml | 1 + data/Gootville/E59D.xml | 1 + data/Gootville/E59E.xml | 1 + data/Gootville/E5B0.xml | 1 + data/Gootville/E5E5.xml | 1 + data/Gootville/E5E7.xml | 1 + data/Gootville/E610.xml | 1 + data/Gootville/E611.xml | 1 + data/Gootville/E612.xml | 1 + data/Gootville/E613.xml | 1 + data/Gootville/E630.xml | 1 + data/Gootville/E631.xml | 1 + data/Gootville/E650.xml | 1 + data/Gootville/E651.xml | 1 + data/Gootville/E655.xml | 1 + data/Gootville/EAA4.xml | 1 + data/Gootville/EAA9.xml | 1 + data/Gootville/EAAA.xml | 1 + data/Gootville/EAAD.xml | 1 + data/Gootville/EAAE.xml | 1 + data/Gootville/EAAF.xml | 1 + data/Leipzig.xml | 520 ++++++++++++++++++++++++++++++ data/Leipzig/E000.xml | 1 + data/Leipzig/E003.xml | 1 + data/Leipzig/E004.xml | 1 + data/Leipzig/E043.xml | 1 + data/Leipzig/E044.xml | 1 + data/Leipzig/E045.xml | 1 + data/Leipzig/E046.xml | 1 + data/Leipzig/E047.xml | 1 + data/Leipzig/E048.xml | 1 + data/Leipzig/E049.xml | 1 + data/Leipzig/E04B.xml | 1 + data/Leipzig/E050.xml | 1 + data/Leipzig/E051.xml | 1 + data/Leipzig/E052.xml | 1 + data/Leipzig/E053.xml | 1 + data/Leipzig/E054.xml | 1 + data/Leipzig/E055.xml | 1 + data/Leipzig/E056.xml | 1 + data/Leipzig/E05C.xml | 1 + data/Leipzig/E05D.xml | 1 + data/Leipzig/E062.xml | 1 + data/Leipzig/E063.xml | 1 + data/Leipzig/E064.xml | 1 + data/Leipzig/E065.xml | 1 + data/Leipzig/E066.xml | 1 + data/Leipzig/E069.xml | 1 + data/Leipzig/E06A.xml | 1 + data/Leipzig/E073.xml | 1 + data/Leipzig/E074.xml | 1 + data/Leipzig/E075.xml | 1 + data/Leipzig/E076.xml | 1 + data/Leipzig/E077.xml | 1 + data/Leipzig/E080.xml | 1 + data/Leipzig/E081.xml | 1 + data/Leipzig/E082.xml | 1 + data/Leipzig/E083.xml | 1 + data/Leipzig/E084.xml | 1 + data/Leipzig/E085.xml | 1 + data/Leipzig/E086.xml | 1 + data/Leipzig/E087.xml | 1 + data/Leipzig/E088.xml | 1 + data/Leipzig/E089.xml | 1 + data/Leipzig/E08A.xml | 1 + data/Leipzig/E08B.xml | 1 + data/Leipzig/E08C.xml | 1 + data/Leipzig/E08D.xml | 1 + data/Leipzig/E08E.xml | 1 + data/Leipzig/E08F.xml | 1 + data/Leipzig/E090.xml | 1 + data/Leipzig/E091.xml | 1 + data/Leipzig/E092.xml | 1 + data/Leipzig/E093.xml | 1 + data/Leipzig/E094.xml | 1 + data/Leipzig/E095.xml | 1 + data/Leipzig/E0A0.xml | 1 + data/Leipzig/E0A1.xml | 1 + data/Leipzig/E0A2.xml | 1 + data/Leipzig/E0A3.xml | 1 + data/Leipzig/E0A4.xml | 1 + data/Leipzig/E0A5.xml | 1 + data/Leipzig/E0A9.xml | 1 + data/Leipzig/E0AF.xml | 1 + data/Leipzig/E0B5.xml | 1 + data/Leipzig/E0B6.xml | 1 + data/Leipzig/E0B7.xml | 1 + data/Leipzig/E0D9.xml | 1 + data/Leipzig/E0DA.xml | 1 + data/Leipzig/E0DB.xml | 1 + data/Leipzig/E0DC.xml | 1 + data/Leipzig/E0DD.xml | 1 + data/Leipzig/E0DE.xml | 1 + data/Leipzig/E0F5.xml | 1 + data/Leipzig/E0F6.xml | 1 + data/Leipzig/E0FA.xml | 1 + data/Leipzig/E101.xml | 1 + data/Leipzig/E102.xml | 1 + data/Leipzig/E103.xml | 1 + data/Leipzig/E220.xml | 1 + data/Leipzig/E221.xml | 1 + data/Leipzig/E222.xml | 1 + data/Leipzig/E223.xml | 1 + data/Leipzig/E224.xml | 1 + data/Leipzig/E22A.xml | 1 + data/Leipzig/E240.xml | 1 + data/Leipzig/E241.xml | 1 + data/Leipzig/E242.xml | 1 + data/Leipzig/E243.xml | 1 + data/Leipzig/E244.xml | 1 + data/Leipzig/E245.xml | 1 + data/Leipzig/E246.xml | 1 + data/Leipzig/E247.xml | 1 + data/Leipzig/E248.xml | 1 + data/Leipzig/E249.xml | 1 + data/Leipzig/E24A.xml | 1 + data/Leipzig/E24B.xml | 1 + data/Leipzig/E24C.xml | 1 + data/Leipzig/E24D.xml | 1 + data/Leipzig/E24E.xml | 1 + data/Leipzig/E24F.xml | 1 + data/Leipzig/E260.xml | 1 + data/Leipzig/E261.xml | 1 + data/Leipzig/E262.xml | 1 + data/Leipzig/E263.xml | 1 + data/Leipzig/E264.xml | 1 + data/Leipzig/E265.xml | 1 + data/Leipzig/E266.xml | 1 + data/Leipzig/E267.xml | 1 + data/Leipzig/E268.xml | 1 + data/Leipzig/E269.xml | 1 + data/Leipzig/E26A.xml | 1 + data/Leipzig/E26B.xml | 1 + data/Leipzig/E26C.xml | 1 + data/Leipzig/E26D.xml | 1 + data/Leipzig/E270.xml | 1 + data/Leipzig/E271.xml | 1 + data/Leipzig/E272.xml | 1 + data/Leipzig/E273.xml | 1 + data/Leipzig/E274.xml | 1 + data/Leipzig/E275.xml | 1 + data/Leipzig/E280.xml | 1 + data/Leipzig/E281.xml | 1 + data/Leipzig/E282.xml | 1 + data/Leipzig/E283.xml | 1 + data/Leipzig/E440.xml | 1 + data/Leipzig/E441.xml | 1 + data/Leipzig/E442.xml | 1 + data/Leipzig/E443.xml | 1 + data/Leipzig/E444.xml | 1 + data/Leipzig/E445.xml | 1 + data/Leipzig/E446.xml | 1 + data/Leipzig/E447.xml | 1 + data/Leipzig/E4A0.xml | 1 + data/Leipzig/E4A1.xml | 1 + data/Leipzig/E4A2.xml | 1 + data/Leipzig/E4A3.xml | 1 + data/Leipzig/E4A4.xml | 1 + data/Leipzig/E4A5.xml | 1 + data/Leipzig/E4A6.xml | 1 + data/Leipzig/E4A7.xml | 1 + data/Leipzig/E4A8.xml | 1 + data/Leipzig/E4A9.xml | 1 + data/Leipzig/E4AA.xml | 1 + data/Leipzig/E4AB.xml | 1 + data/Leipzig/E4AC.xml | 1 + data/Leipzig/E4AD.xml | 1 + data/Leipzig/E4AE.xml | 1 + data/Leipzig/E4AF.xml | 1 + data/Leipzig/E4B0.xml | 1 + data/Leipzig/E4B1.xml | 1 + data/Leipzig/E4B2.xml | 1 + data/Leipzig/E4B3.xml | 1 + data/Leipzig/E4B4.xml | 1 + data/Leipzig/E4B5.xml | 1 + data/Leipzig/E4B6.xml | 1 + data/Leipzig/E4B7.xml | 1 + data/Leipzig/E4B8.xml | 1 + data/Leipzig/E4B9.xml | 1 + data/Leipzig/E4BA.xml | 1 + data/Leipzig/E4BB.xml | 1 + data/Leipzig/E4BC.xml | 1 + data/Leipzig/E4BD.xml | 1 + data/Leipzig/E4C0.xml | 1 + data/Leipzig/E4C1.xml | 1 + data/Leipzig/E4C2.xml | 1 + data/Leipzig/E4C3.xml | 1 + data/Leipzig/E4C4.xml | 1 + data/Leipzig/E4C5.xml | 1 + data/Leipzig/E4C6.xml | 1 + data/Leipzig/E4C7.xml | 1 + data/Leipzig/E4C8.xml | 1 + data/Leipzig/E4C9.xml | 1 + data/Leipzig/E4CE.xml | 1 + data/Leipzig/E4E0.xml | 1 + data/Leipzig/E4E1.xml | 1 + data/Leipzig/E4E2.xml | 1 + data/Leipzig/E4E3.xml | 1 + data/Leipzig/E4E4.xml | 1 + data/Leipzig/E4E5.xml | 1 + data/Leipzig/E4E6.xml | 1 + data/Leipzig/E4E7.xml | 1 + data/Leipzig/E4E8.xml | 1 + data/Leipzig/E4E9.xml | 1 + data/Leipzig/E4EA.xml | 1 + data/Leipzig/E4EB.xml | 1 + data/Leipzig/E4EC.xml | 1 + data/Leipzig/E4ED.xml | 1 + data/Leipzig/E4F2.xml | 1 + data/Leipzig/E4F6.xml | 1 + data/Leipzig/E500.xml | 1 + data/Leipzig/E501.xml | 1 + data/Leipzig/E502.xml | 1 + data/Leipzig/E503.xml | 1 + data/Leipzig/E504.xml | 1 + data/Leipzig/E505.xml | 1 + data/Leipzig/E510.xml | 1 + data/Leipzig/E511.xml | 1 + data/Leipzig/E512.xml | 1 + data/Leipzig/E513.xml | 1 + data/Leipzig/E514.xml | 1 + data/Leipzig/E515.xml | 1 + data/Leipzig/E516.xml | 1 + data/Leipzig/E517.xml | 1 + data/Leipzig/E518.xml | 1 + data/Leipzig/E519.xml | 1 + data/Leipzig/E51A.xml | 1 + data/Leipzig/E51B.xml | 1 + data/Leipzig/E51C.xml | 1 + data/Leipzig/E51D.xml | 1 + data/Leipzig/E51E.xml | 1 + data/Leipzig/E520.xml | 1 + data/Leipzig/E521.xml | 1 + data/Leipzig/E522.xml | 1 + data/Leipzig/E523.xml | 1 + data/Leipzig/E524.xml | 1 + data/Leipzig/E525.xml | 1 + data/Leipzig/E526.xml | 1 + data/Leipzig/E527.xml | 1 + data/Leipzig/E528.xml | 1 + data/Leipzig/E529.xml | 1 + data/Leipzig/E52A.xml | 1 + data/Leipzig/E52B.xml | 1 + data/Leipzig/E52C.xml | 1 + data/Leipzig/E52D.xml | 1 + data/Leipzig/E52E.xml | 1 + data/Leipzig/E52F.xml | 1 + data/Leipzig/E530.xml | 1 + data/Leipzig/E531.xml | 1 + data/Leipzig/E532.xml | 1 + data/Leipzig/E533.xml | 1 + data/Leipzig/E534.xml | 1 + data/Leipzig/E535.xml | 1 + data/Leipzig/E536.xml | 1 + data/Leipzig/E537.xml | 1 + data/Leipzig/E538.xml | 1 + data/Leipzig/E539.xml | 1 + data/Leipzig/E53A.xml | 1 + data/Leipzig/E53B.xml | 1 + data/Leipzig/E53C.xml | 1 + data/Leipzig/E53D.xml | 1 + data/Leipzig/E566.xml | 1 + data/Leipzig/E567.xml | 1 + data/Leipzig/E568.xml | 1 + data/Leipzig/E569.xml | 1 + data/Leipzig/E56A.xml | 1 + data/Leipzig/E56B.xml | 1 + data/Leipzig/E56C.xml | 1 + data/Leipzig/E56D.xml | 1 + data/Leipzig/E56E.xml | 1 + data/Leipzig/E56F.xml | 1 + data/Leipzig/E583.xml | 1 + data/Leipzig/E587.xml | 1 + data/Leipzig/E59D.xml | 1 + data/Leipzig/E59E.xml | 1 + data/Leipzig/E5B0.xml | 1 + data/Leipzig/E5B1.xml | 1 + data/Leipzig/E5B2.xml | 1 + data/Leipzig/E5B3.xml | 1 + data/Leipzig/E5B4.xml | 1 + data/Leipzig/E5B5.xml | 1 + data/Leipzig/E5B6.xml | 1 + data/Leipzig/E5B7.xml | 1 + data/Leipzig/E5B8.xml | 1 + data/Leipzig/E5B9.xml | 1 + data/Leipzig/E5BA.xml | 1 + data/Leipzig/E5BB.xml | 1 + data/Leipzig/E5BC.xml | 1 + data/Leipzig/E5BD.xml | 1 + data/Leipzig/E5BE.xml | 1 + data/Leipzig/E5BF.xml | 1 + data/Leipzig/E5C0.xml | 1 + data/Leipzig/E5C1.xml | 1 + data/Leipzig/E5C2.xml | 1 + data/Leipzig/E5C3.xml | 1 + data/Leipzig/E5C4.xml | 1 + data/Leipzig/E5C5.xml | 1 + data/Leipzig/E5C6.xml | 1 + data/Leipzig/E5C7.xml | 1 + data/Leipzig/E5C8.xml | 1 + data/Leipzig/E5E5.xml | 1 + data/Leipzig/E5E6.xml | 1 + data/Leipzig/E5E7.xml | 1 + data/Leipzig/E610.xml | 1 + data/Leipzig/E611.xml | 1 + data/Leipzig/E612.xml | 1 + data/Leipzig/E613.xml | 1 + data/Leipzig/E614.xml | 1 + data/Leipzig/E630.xml | 1 + data/Leipzig/E631.xml | 1 + data/Leipzig/E632.xml | 1 + data/Leipzig/E633.xml | 1 + data/Leipzig/E638.xml | 1 + data/Leipzig/E645.xml | 1 + data/Leipzig/E650.xml | 1 + data/Leipzig/E651.xml | 1 + data/Leipzig/E655.xml | 1 + data/Leipzig/E659.xml | 1 + data/Leipzig/E65A.xml | 1 + data/Leipzig/E880.xml | 1 + data/Leipzig/E881.xml | 1 + data/Leipzig/E882.xml | 1 + data/Leipzig/E883.xml | 1 + data/Leipzig/E884.xml | 1 + data/Leipzig/E885.xml | 1 + data/Leipzig/E886.xml | 1 + data/Leipzig/E887.xml | 1 + data/Leipzig/E888.xml | 1 + data/Leipzig/E889.xml | 1 + data/Leipzig/E88A.xml | 1 + data/Leipzig/E901.xml | 1 + data/Leipzig/E902.xml | 1 + data/Leipzig/E904.xml | 1 + data/Leipzig/E906.xml | 1 + data/Leipzig/E907.xml | 1 + data/Leipzig/E908.xml | 1 + data/Leipzig/E909.xml | 1 + data/Leipzig/E90A.xml | 1 + data/Leipzig/E90B.xml | 1 + data/Leipzig/E910.xml | 1 + data/Leipzig/E911.xml | 1 + data/Leipzig/E912.xml | 1 + data/Leipzig/E913.xml | 1 + data/Leipzig/E914.xml | 1 + data/Leipzig/E915.xml | 1 + data/Leipzig/E916.xml | 1 + data/Leipzig/E917.xml | 1 + data/Leipzig/E918.xml | 1 + data/Leipzig/E919.xml | 1 + data/Leipzig/E91A.xml | 1 + data/Leipzig/E91B.xml | 1 + data/Leipzig/E91C.xml | 1 + data/Leipzig/E91D.xml | 1 + data/Leipzig/E91E.xml | 1 + data/Leipzig/E91F.xml | 1 + data/Leipzig/E920.xml | 1 + data/Leipzig/E921.xml | 1 + data/Leipzig/E922.xml | 1 + data/Leipzig/E923.xml | 1 + data/Leipzig/E924.xml | 1 + data/Leipzig/E925.xml | 1 + data/Leipzig/E938.xml | 1 + data/Leipzig/E939.xml | 1 + data/Leipzig/E93C.xml | 1 + data/Leipzig/E93D.xml | 1 + data/Leipzig/E93E.xml | 1 + data/Leipzig/E93F.xml | 1 + data/Leipzig/E949.xml | 1 + data/Leipzig/E94A.xml | 1 + data/Leipzig/E94B.xml | 1 + data/Leipzig/E94C.xml | 1 + data/Leipzig/E9E0.xml | 1 + data/Leipzig/E9E1.xml | 1 + data/Leipzig/E9E2.xml | 1 + data/Leipzig/E9E3.xml | 1 + data/Leipzig/E9F0.xml | 1 + data/Leipzig/E9F1.xml | 1 + data/Leipzig/E9F2.xml | 1 + data/Leipzig/E9F3.xml | 1 + data/Leipzig/E9F4.xml | 1 + data/Leipzig/E9F5.xml | 1 + data/Leipzig/E9F6.xml | 1 + data/Leipzig/E9F7.xml | 1 + data/Leipzig/E9F8.xml | 1 + data/Leipzig/EA02.xml | 1 + data/Leipzig/EA06.xml | 1 + data/Leipzig/EAA4.xml | 1 + data/Leipzig/EAA9.xml | 1 + data/Leipzig/EAAA.xml | 1 + data/Leipzig/EAAD.xml | 1 + data/Leipzig/EAAE.xml | 1 + data/Leipzig/EAAF.xml | 1 + data/Leipzig/EBA7.xml | 1 + data/Leipzig/EBA8.xml | 1 + data/Leipzig/EBA9.xml | 1 + data/Leipzig/EBAA.xml | 1 + data/Leipzig/EBAB.xml | 1 + data/Leipzig/EBAC.xml | 1 + data/Leipzig/EBC0.xml | 1 + data/Leipzig/EBC1.xml | 1 + data/Leipzig/EBC2.xml | 1 + data/Leipzig/EBC3.xml | 1 + data/Leipzig/EBC4.xml | 1 + data/Leipzig/EBC5.xml | 1 + data/Leipzig/EBC6.xml | 1 + data/Leipzig/EBC7.xml | 1 + data/Leipzig/EBC8.xml | 1 + data/Leipzig/EBC9.xml | 1 + data/Leipzig/EBCA.xml | 1 + data/Leipzig/EBCB.xml | 1 + data/Leipzig/EBCC.xml | 1 + data/Leipzig/EBE0.xml | 1 + data/Leipzig/EBE1.xml | 1 + data/Leipzig/EBE2.xml | 1 + data/Leipzig/EBE3.xml | 1 + data/Leipzig/EBE4.xml | 1 + data/Leipzig/EBE5.xml | 1 + data/Leipzig/EBE6.xml | 1 + data/Leipzig/EBE7.xml | 1 + data/Leipzig/EBE8.xml | 1 + data/Leipzig/EBE9.xml | 1 + data/Leipzig/ED40.xml | 1 + data/Leipzig/ED41.xml | 1 + data/Leland.xml | 500 +++++++++++++++++++++++++++++ data/Leland/E000.xml | 1 + data/Leland/E003.xml | 1 + data/Leland/E004.xml | 1 + data/Leland/E043.xml | 1 + data/Leland/E044.xml | 1 + data/Leland/E047.xml | 1 + data/Leland/E048.xml | 1 + data/Leland/E049.xml | 1 + data/Leland/E04B.xml | 1 + data/Leland/E050.xml | 1 + data/Leland/E051.xml | 1 + data/Leland/E052.xml | 1 + data/Leland/E053.xml | 1 + data/Leland/E054.xml | 1 + data/Leland/E055.xml | 1 + data/Leland/E05C.xml | 1 + data/Leland/E05D.xml | 1 + data/Leland/E062.xml | 1 + data/Leland/E063.xml | 1 + data/Leland/E064.xml | 1 + data/Leland/E065.xml | 1 + data/Leland/E066.xml | 1 + data/Leland/E069.xml | 1 + data/Leland/E06A.xml | 1 + data/Leland/E080.xml | 1 + data/Leland/E081.xml | 1 + data/Leland/E082.xml | 1 + data/Leland/E083.xml | 1 + data/Leland/E084.xml | 1 + data/Leland/E085.xml | 1 + data/Leland/E086.xml | 1 + data/Leland/E087.xml | 1 + data/Leland/E088.xml | 1 + data/Leland/E089.xml | 1 + data/Leland/E08A.xml | 1 + data/Leland/E08B.xml | 1 + data/Leland/E08C.xml | 1 + data/Leland/E0A0.xml | 1 + data/Leland/E0A1.xml | 1 + data/Leland/E0A2.xml | 1 + data/Leland/E0A3.xml | 1 + data/Leland/E0A4.xml | 1 + data/Leland/E0A5.xml | 1 + data/Leland/E0A9.xml | 1 + data/Leland/E0AF.xml | 1 + data/Leland/E0D9.xml | 1 + data/Leland/E0DB.xml | 1 + data/Leland/E0F5.xml | 1 + data/Leland/E0F6.xml | 1 + data/Leland/E220.xml | 1 + data/Leland/E221.xml | 1 + data/Leland/E222.xml | 1 + data/Leland/E223.xml | 1 + data/Leland/E224.xml | 1 + data/Leland/E22A.xml | 1 + data/Leland/E240.xml | 1 + data/Leland/E241.xml | 1 + data/Leland/E242.xml | 1 + data/Leland/E243.xml | 1 + data/Leland/E244.xml | 1 + data/Leland/E245.xml | 1 + data/Leland/E246.xml | 1 + data/Leland/E247.xml | 1 + data/Leland/E248.xml | 1 + data/Leland/E249.xml | 1 + data/Leland/E24A.xml | 1 + data/Leland/E24B.xml | 1 + data/Leland/E24C.xml | 1 + data/Leland/E24D.xml | 1 + data/Leland/E24E.xml | 1 + data/Leland/E24F.xml | 1 + data/Leland/E260.xml | 1 + data/Leland/E261.xml | 1 + data/Leland/E262.xml | 1 + data/Leland/E263.xml | 1 + data/Leland/E264.xml | 1 + data/Leland/E265.xml | 1 + data/Leland/E266.xml | 1 + data/Leland/E267.xml | 1 + data/Leland/E268.xml | 1 + data/Leland/E269.xml | 1 + data/Leland/E26A.xml | 1 + data/Leland/E26B.xml | 1 + data/Leland/E26C.xml | 1 + data/Leland/E26D.xml | 1 + data/Leland/E270.xml | 1 + data/Leland/E271.xml | 1 + data/Leland/E272.xml | 1 + data/Leland/E273.xml | 1 + data/Leland/E274.xml | 1 + data/Leland/E275.xml | 1 + data/Leland/E280.xml | 1 + data/Leland/E281.xml | 1 + data/Leland/E282.xml | 1 + data/Leland/E283.xml | 1 + data/Leland/E440.xml | 1 + data/Leland/E442.xml | 1 + data/Leland/E446.xml | 1 + data/Leland/E447.xml | 1 + data/Leland/E4A0.xml | 1 + data/Leland/E4A1.xml | 1 + data/Leland/E4A2.xml | 1 + data/Leland/E4A3.xml | 1 + data/Leland/E4A4.xml | 1 + data/Leland/E4A5.xml | 1 + data/Leland/E4A6.xml | 1 + data/Leland/E4A7.xml | 1 + data/Leland/E4A8.xml | 1 + data/Leland/E4A9.xml | 1 + data/Leland/E4AC.xml | 1 + data/Leland/E4AD.xml | 1 + data/Leland/E4AE.xml | 1 + data/Leland/E4AF.xml | 1 + data/Leland/E4B0.xml | 1 + data/Leland/E4B1.xml | 1 + data/Leland/E4B2.xml | 1 + data/Leland/E4B3.xml | 1 + data/Leland/E4B4.xml | 1 + data/Leland/E4B5.xml | 1 + data/Leland/E4B6.xml | 1 + data/Leland/E4B7.xml | 1 + data/Leland/E4B8.xml | 1 + data/Leland/E4B9.xml | 1 + data/Leland/E4BA.xml | 1 + data/Leland/E4BB.xml | 1 + data/Leland/E4BC.xml | 1 + data/Leland/E4BD.xml | 1 + data/Leland/E4C0.xml | 1 + data/Leland/E4C1.xml | 1 + data/Leland/E4C4.xml | 1 + data/Leland/E4C5.xml | 1 + data/Leland/E4C6.xml | 1 + data/Leland/E4C7.xml | 1 + data/Leland/E4C8.xml | 1 + data/Leland/E4C9.xml | 1 + data/Leland/E4CE.xml | 1 + data/Leland/E4E0.xml | 1 + data/Leland/E4E1.xml | 1 + data/Leland/E4E2.xml | 1 + data/Leland/E4E3.xml | 1 + data/Leland/E4E4.xml | 1 + data/Leland/E4E5.xml | 1 + data/Leland/E4E6.xml | 1 + data/Leland/E4E7.xml | 1 + data/Leland/E4E8.xml | 1 + data/Leland/E4E9.xml | 1 + data/Leland/E4EA.xml | 1 + data/Leland/E4EB.xml | 1 + data/Leland/E4EC.xml | 1 + data/Leland/E4ED.xml | 1 + data/Leland/E4F2.xml | 1 + data/Leland/E4F6.xml | 1 + data/Leland/E500.xml | 1 + data/Leland/E501.xml | 1 + data/Leland/E502.xml | 1 + data/Leland/E503.xml | 1 + data/Leland/E504.xml | 1 + data/Leland/E505.xml | 1 + data/Leland/E510.xml | 1 + data/Leland/E511.xml | 1 + data/Leland/E512.xml | 1 + data/Leland/E513.xml | 1 + data/Leland/E514.xml | 1 + data/Leland/E515.xml | 1 + data/Leland/E516.xml | 1 + data/Leland/E517.xml | 1 + data/Leland/E518.xml | 1 + data/Leland/E519.xml | 1 + data/Leland/E51A.xml | 1 + data/Leland/E51B.xml | 1 + data/Leland/E51C.xml | 1 + data/Leland/E51D.xml | 1 + data/Leland/E51E.xml | 1 + data/Leland/E520.xml | 1 + data/Leland/E521.xml | 1 + data/Leland/E522.xml | 1 + data/Leland/E523.xml | 1 + data/Leland/E524.xml | 1 + data/Leland/E525.xml | 1 + data/Leland/E526.xml | 1 + data/Leland/E527.xml | 1 + data/Leland/E528.xml | 1 + data/Leland/E529.xml | 1 + data/Leland/E52A.xml | 1 + data/Leland/E52B.xml | 1 + data/Leland/E52C.xml | 1 + data/Leland/E52D.xml | 1 + data/Leland/E52E.xml | 1 + data/Leland/E52F.xml | 1 + data/Leland/E530.xml | 1 + data/Leland/E531.xml | 1 + data/Leland/E532.xml | 1 + data/Leland/E533.xml | 1 + data/Leland/E534.xml | 1 + data/Leland/E535.xml | 1 + data/Leland/E536.xml | 1 + data/Leland/E537.xml | 1 + data/Leland/E538.xml | 1 + data/Leland/E539.xml | 1 + data/Leland/E53A.xml | 1 + data/Leland/E53B.xml | 1 + data/Leland/E53C.xml | 1 + data/Leland/E53D.xml | 1 + data/Leland/E566.xml | 1 + data/Leland/E567.xml | 1 + data/Leland/E568.xml | 1 + data/Leland/E569.xml | 1 + data/Leland/E56A.xml | 1 + data/Leland/E56B.xml | 1 + data/Leland/E56C.xml | 1 + data/Leland/E56D.xml | 1 + data/Leland/E56E.xml | 1 + data/Leland/E56F.xml | 1 + data/Leland/E583.xml | 1 + data/Leland/E587.xml | 1 + data/Leland/E59D.xml | 1 + data/Leland/E59E.xml | 1 + data/Leland/E5B2.xml | 1 + data/Leland/E5B5.xml | 1 + data/Leland/E5B8.xml | 1 + data/Leland/E5BB.xml | 1 + data/Leland/E5BC.xml | 1 + data/Leland/E5BD.xml | 1 + data/Leland/E5BE.xml | 1 + data/Leland/E5C0.xml | 1 + data/Leland/E5C3.xml | 1 + data/Leland/E5C6.xml | 1 + data/Leland/E5C7.xml | 1 + data/Leland/E5C8.xml | 1 + data/Leland/E5E5.xml | 1 + data/Leland/E5E6.xml | 1 + data/Leland/E5E7.xml | 1 + data/Leland/E610.xml | 1 + data/Leland/E611.xml | 1 + data/Leland/E612.xml | 1 + data/Leland/E613.xml | 1 + data/Leland/E614.xml | 1 + data/Leland/E630.xml | 1 + data/Leland/E631.xml | 1 + data/Leland/E632.xml | 1 + data/Leland/E650.xml | 1 + data/Leland/E651.xml | 1 + data/Leland/E655.xml | 1 + data/Leland/E880.xml | 1 + data/Leland/E881.xml | 1 + data/Leland/E882.xml | 1 + data/Leland/E883.xml | 1 + data/Leland/E884.xml | 1 + data/Leland/E885.xml | 1 + data/Leland/E886.xml | 1 + data/Leland/E887.xml | 1 + data/Leland/E888.xml | 1 + data/Leland/E889.xml | 1 + data/Leland/E88A.xml | 1 + data/Leland/E93C.xml | 1 + data/Leland/E93D.xml | 1 + data/Leland/EAA4.xml | 1 + data/Leland/EAA9.xml | 1 + data/Leland/EAAA.xml | 1 + data/Leland/EAAD.xml | 1 + data/Leland/EAAE.xml | 1 + data/Petaluma.xml | 599 ++++++++++++++++++++++++++++++++++ data/Petaluma/E000.xml | 1 + data/Petaluma/E003.xml | 1 + data/Petaluma/E004.xml | 1 + data/Petaluma/E043.xml | 1 + data/Petaluma/E044.xml | 1 + data/Petaluma/E045.xml | 1 + data/Petaluma/E046.xml | 1 + data/Petaluma/E047.xml | 1 + data/Petaluma/E048.xml | 1 + data/Petaluma/E049.xml | 1 + data/Petaluma/E04B.xml | 1 + data/Petaluma/E050.xml | 1 + data/Petaluma/E051.xml | 1 + data/Petaluma/E052.xml | 1 + data/Petaluma/E053.xml | 1 + data/Petaluma/E054.xml | 1 + data/Petaluma/E055.xml | 1 + data/Petaluma/E056.xml | 1 + data/Petaluma/E05C.xml | 1 + data/Petaluma/E05D.xml | 1 + data/Petaluma/E062.xml | 1 + data/Petaluma/E063.xml | 1 + data/Petaluma/E064.xml | 1 + data/Petaluma/E065.xml | 1 + data/Petaluma/E066.xml | 1 + data/Petaluma/E069.xml | 1 + data/Petaluma/E06A.xml | 1 + data/Petaluma/E073.xml | 1 + data/Petaluma/E074.xml | 1 + data/Petaluma/E075.xml | 1 + data/Petaluma/E076.xml | 1 + data/Petaluma/E077.xml | 1 + data/Petaluma/E080.xml | 1 + data/Petaluma/E081.xml | 1 + data/Petaluma/E082.xml | 1 + data/Petaluma/E083.xml | 1 + data/Petaluma/E084.xml | 1 + data/Petaluma/E085.xml | 1 + data/Petaluma/E086.xml | 1 + data/Petaluma/E087.xml | 1 + data/Petaluma/E088.xml | 1 + data/Petaluma/E089.xml | 1 + data/Petaluma/E08A.xml | 1 + data/Petaluma/E08B.xml | 1 + data/Petaluma/E08C.xml | 1 + data/Petaluma/E08D.xml | 1 + data/Petaluma/E08E.xml | 1 + data/Petaluma/E08F.xml | 1 + data/Petaluma/E090.xml | 1 + data/Petaluma/E091.xml | 1 + data/Petaluma/E092.xml | 1 + data/Petaluma/E093.xml | 1 + data/Petaluma/E094.xml | 1 + data/Petaluma/E095.xml | 1 + data/Petaluma/E0A0.xml | 1 + data/Petaluma/E0A1.xml | 1 + data/Petaluma/E0A2.xml | 1 + data/Petaluma/E0A3.xml | 1 + data/Petaluma/E0A4.xml | 1 + data/Petaluma/E0A5.xml | 1 + data/Petaluma/E0A9.xml | 1 + data/Petaluma/E0AF.xml | 1 + data/Petaluma/E0B5.xml | 1 + data/Petaluma/E0B6.xml | 1 + data/Petaluma/E0B7.xml | 1 + data/Petaluma/E0D9.xml | 1 + data/Petaluma/E0DA.xml | 1 + data/Petaluma/E0DB.xml | 1 + data/Petaluma/E0DC.xml | 1 + data/Petaluma/E0DD.xml | 1 + data/Petaluma/E0DE.xml | 1 + data/Petaluma/E0F5.xml | 1 + data/Petaluma/E0F6.xml | 1 + data/Petaluma/E0FA.xml | 1 + data/Petaluma/E101.xml | 1 + data/Petaluma/E102.xml | 1 + data/Petaluma/E103.xml | 1 + data/Petaluma/E220.xml | 1 + data/Petaluma/E221.xml | 1 + data/Petaluma/E222.xml | 1 + data/Petaluma/E223.xml | 1 + data/Petaluma/E224.xml | 1 + data/Petaluma/E22A.xml | 1 + data/Petaluma/E240.xml | 1 + data/Petaluma/E241.xml | 1 + data/Petaluma/E242.xml | 1 + data/Petaluma/E243.xml | 1 + data/Petaluma/E244.xml | 1 + data/Petaluma/E245.xml | 1 + data/Petaluma/E246.xml | 1 + data/Petaluma/E247.xml | 1 + data/Petaluma/E248.xml | 1 + data/Petaluma/E249.xml | 1 + data/Petaluma/E24A.xml | 1 + data/Petaluma/E24B.xml | 1 + data/Petaluma/E24C.xml | 1 + data/Petaluma/E24D.xml | 1 + data/Petaluma/E24E.xml | 1 + data/Petaluma/E24F.xml | 1 + data/Petaluma/E260.xml | 1 + data/Petaluma/E261.xml | 1 + data/Petaluma/E262.xml | 1 + data/Petaluma/E263.xml | 1 + data/Petaluma/E264.xml | 1 + data/Petaluma/E265.xml | 1 + data/Petaluma/E266.xml | 1 + data/Petaluma/E267.xml | 1 + data/Petaluma/E268.xml | 1 + data/Petaluma/E269.xml | 1 + data/Petaluma/E26A.xml | 1 + data/Petaluma/E26B.xml | 1 + data/Petaluma/E26C.xml | 1 + data/Petaluma/E26D.xml | 1 + data/Petaluma/E270.xml | 1 + data/Petaluma/E271.xml | 1 + data/Petaluma/E272.xml | 1 + data/Petaluma/E273.xml | 1 + data/Petaluma/E274.xml | 1 + data/Petaluma/E275.xml | 1 + data/Petaluma/E280.xml | 1 + data/Petaluma/E281.xml | 1 + data/Petaluma/E282.xml | 1 + data/Petaluma/E283.xml | 1 + data/Petaluma/E440.xml | 1 + data/Petaluma/E441.xml | 1 + data/Petaluma/E442.xml | 1 + data/Petaluma/E443.xml | 1 + data/Petaluma/E444.xml | 1 + data/Petaluma/E445.xml | 1 + data/Petaluma/E446.xml | 1 + data/Petaluma/E447.xml | 1 + data/Petaluma/E4A0.xml | 1 + data/Petaluma/E4A1.xml | 1 + data/Petaluma/E4A2.xml | 1 + data/Petaluma/E4A3.xml | 1 + data/Petaluma/E4A4.xml | 1 + data/Petaluma/E4A5.xml | 1 + data/Petaluma/E4A6.xml | 1 + data/Petaluma/E4A7.xml | 1 + data/Petaluma/E4A8.xml | 1 + data/Petaluma/E4A9.xml | 1 + data/Petaluma/E4AA.xml | 1 + data/Petaluma/E4AB.xml | 1 + data/Petaluma/E4AC.xml | 1 + data/Petaluma/E4AD.xml | 1 + data/Petaluma/E4AE.xml | 1 + data/Petaluma/E4AF.xml | 1 + data/Petaluma/E4B0.xml | 1 + data/Petaluma/E4B1.xml | 1 + data/Petaluma/E4B2.xml | 1 + data/Petaluma/E4B3.xml | 1 + data/Petaluma/E4B4.xml | 1 + data/Petaluma/E4B5.xml | 1 + data/Petaluma/E4B6.xml | 1 + data/Petaluma/E4B7.xml | 1 + data/Petaluma/E4B8.xml | 1 + data/Petaluma/E4B9.xml | 1 + data/Petaluma/E4BA.xml | 1 + data/Petaluma/E4BB.xml | 1 + data/Petaluma/E4BC.xml | 1 + data/Petaluma/E4BD.xml | 1 + data/Petaluma/E4C0.xml | 1 + data/Petaluma/E4C1.xml | 1 + data/Petaluma/E4C2.xml | 1 + data/Petaluma/E4C3.xml | 1 + data/Petaluma/E4C4.xml | 1 + data/Petaluma/E4C5.xml | 1 + data/Petaluma/E4C6.xml | 1 + data/Petaluma/E4C7.xml | 1 + data/Petaluma/E4C8.xml | 1 + data/Petaluma/E4C9.xml | 1 + data/Petaluma/E4CE.xml | 1 + data/Petaluma/E4E0.xml | 1 + data/Petaluma/E4E1.xml | 1 + data/Petaluma/E4E2.xml | 1 + data/Petaluma/E4E3.xml | 1 + data/Petaluma/E4E4.xml | 1 + data/Petaluma/E4E5.xml | 1 + data/Petaluma/E4E6.xml | 1 + data/Petaluma/E4E7.xml | 1 + data/Petaluma/E4E8.xml | 1 + data/Petaluma/E4E9.xml | 1 + data/Petaluma/E4EA.xml | 1 + data/Petaluma/E4EB.xml | 1 + data/Petaluma/E4EC.xml | 1 + data/Petaluma/E4ED.xml | 1 + data/Petaluma/E4F2.xml | 1 + data/Petaluma/E4F6.xml | 1 + data/Petaluma/E500.xml | 1 + data/Petaluma/E501.xml | 1 + data/Petaluma/E502.xml | 1 + data/Petaluma/E503.xml | 1 + data/Petaluma/E504.xml | 1 + data/Petaluma/E505.xml | 1 + data/Petaluma/E510.xml | 1 + data/Petaluma/E511.xml | 1 + data/Petaluma/E512.xml | 1 + data/Petaluma/E513.xml | 1 + data/Petaluma/E514.xml | 1 + data/Petaluma/E515.xml | 1 + data/Petaluma/E516.xml | 1 + data/Petaluma/E517.xml | 1 + data/Petaluma/E518.xml | 1 + data/Petaluma/E519.xml | 1 + data/Petaluma/E51A.xml | 1 + data/Petaluma/E51B.xml | 1 + data/Petaluma/E51C.xml | 1 + data/Petaluma/E51D.xml | 1 + data/Petaluma/E51E.xml | 1 + data/Petaluma/E520.xml | 1 + data/Petaluma/E521.xml | 1 + data/Petaluma/E522.xml | 1 + data/Petaluma/E523.xml | 1 + data/Petaluma/E524.xml | 1 + data/Petaluma/E525.xml | 1 + data/Petaluma/E526.xml | 1 + data/Petaluma/E527.xml | 1 + data/Petaluma/E528.xml | 1 + data/Petaluma/E529.xml | 1 + data/Petaluma/E52A.xml | 1 + data/Petaluma/E52B.xml | 1 + data/Petaluma/E52C.xml | 1 + data/Petaluma/E52D.xml | 1 + data/Petaluma/E52E.xml | 1 + data/Petaluma/E52F.xml | 1 + data/Petaluma/E530.xml | 1 + data/Petaluma/E531.xml | 1 + data/Petaluma/E532.xml | 1 + data/Petaluma/E533.xml | 1 + data/Petaluma/E534.xml | 1 + data/Petaluma/E535.xml | 1 + data/Petaluma/E536.xml | 1 + data/Petaluma/E537.xml | 1 + data/Petaluma/E538.xml | 1 + data/Petaluma/E539.xml | 1 + data/Petaluma/E53A.xml | 1 + data/Petaluma/E53B.xml | 1 + data/Petaluma/E53C.xml | 1 + data/Petaluma/E53D.xml | 1 + data/Petaluma/E566.xml | 1 + data/Petaluma/E567.xml | 1 + data/Petaluma/E568.xml | 1 + data/Petaluma/E569.xml | 1 + data/Petaluma/E56A.xml | 1 + data/Petaluma/E56B.xml | 1 + data/Petaluma/E56C.xml | 1 + data/Petaluma/E56D.xml | 1 + data/Petaluma/E56E.xml | 1 + data/Petaluma/E56F.xml | 1 + data/Petaluma/E583.xml | 1 + data/Petaluma/E587.xml | 1 + data/Petaluma/E5B0.xml | 1 + data/Petaluma/E5B1.xml | 1 + data/Petaluma/E5B2.xml | 1 + data/Petaluma/E5B3.xml | 1 + data/Petaluma/E5B4.xml | 1 + data/Petaluma/E5B5.xml | 1 + data/Petaluma/E5B6.xml | 1 + data/Petaluma/E5B7.xml | 1 + data/Petaluma/E5B8.xml | 1 + data/Petaluma/E5B9.xml | 1 + data/Petaluma/E5BA.xml | 1 + data/Petaluma/E5BB.xml | 1 + data/Petaluma/E5BC.xml | 1 + data/Petaluma/E5BD.xml | 1 + data/Petaluma/E5BE.xml | 1 + data/Petaluma/E5BF.xml | 1 + data/Petaluma/E5C0.xml | 1 + data/Petaluma/E5C1.xml | 1 + data/Petaluma/E5C2.xml | 1 + data/Petaluma/E5C3.xml | 1 + data/Petaluma/E5C4.xml | 1 + data/Petaluma/E5C5.xml | 1 + data/Petaluma/E5C6.xml | 1 + data/Petaluma/E5C7.xml | 1 + data/Petaluma/E5C8.xml | 1 + data/Petaluma/E5E5.xml | 1 + data/Petaluma/E5E6.xml | 1 + data/Petaluma/E5E7.xml | 1 + data/Petaluma/E610.xml | 1 + data/Petaluma/E611.xml | 1 + data/Petaluma/E612.xml | 1 + data/Petaluma/E613.xml | 1 + data/Petaluma/E614.xml | 1 + data/Petaluma/E630.xml | 1 + data/Petaluma/E631.xml | 1 + data/Petaluma/E632.xml | 1 + data/Petaluma/E633.xml | 1 + data/Petaluma/E638.xml | 1 + data/Petaluma/E645.xml | 1 + data/Petaluma/E650.xml | 1 + data/Petaluma/E651.xml | 1 + data/Petaluma/E655.xml | 1 + data/Petaluma/E659.xml | 1 + data/Petaluma/E65A.xml | 1 + data/Petaluma/E880.xml | 1 + data/Petaluma/E881.xml | 1 + data/Petaluma/E882.xml | 1 + data/Petaluma/E883.xml | 1 + data/Petaluma/E884.xml | 1 + data/Petaluma/E885.xml | 1 + data/Petaluma/E886.xml | 1 + data/Petaluma/E887.xml | 1 + data/Petaluma/E888.xml | 1 + data/Petaluma/E889.xml | 1 + data/Petaluma/E88A.xml | 1 + data/Petaluma/E938.xml | 1 + data/Petaluma/E939.xml | 1 + data/Petaluma/E93C.xml | 1 + data/Petaluma/E93D.xml | 1 + data/Petaluma/E93E.xml | 1 + data/Petaluma/E93F.xml | 1 + data/Petaluma/E949.xml | 1 + data/Petaluma/E94A.xml | 1 + data/Petaluma/E94B.xml | 1 + data/Petaluma/E94C.xml | 1 + data/Petaluma/EAA4.xml | 1 + data/Petaluma/EAA9.xml | 1 + data/Petaluma/EAAA.xml | 1 + data/Petaluma/EAAD.xml | 1 + data/Petaluma/EAAE.xml | 1 + data/Petaluma/EAAF.xml | 1 + 1591 files changed, 4317 insertions(+) create mode 100644 data/Bravura.xml create mode 100644 data/Bravura/E000.xml create mode 100644 data/Bravura/E003.xml create mode 100644 data/Bravura/E004.xml create mode 100644 data/Bravura/E043.xml create mode 100644 data/Bravura/E044.xml create mode 100644 data/Bravura/E045.xml create mode 100644 data/Bravura/E046.xml create mode 100644 data/Bravura/E047.xml create mode 100644 data/Bravura/E048.xml create mode 100644 data/Bravura/E049.xml create mode 100644 data/Bravura/E04B.xml create mode 100644 data/Bravura/E050.xml create mode 100644 data/Bravura/E051.xml create mode 100644 data/Bravura/E052.xml create mode 100644 data/Bravura/E053.xml create mode 100644 data/Bravura/E054.xml create mode 100644 data/Bravura/E055.xml create mode 100644 data/Bravura/E056.xml create mode 100644 data/Bravura/E05C.xml create mode 100644 data/Bravura/E05D.xml create mode 100644 data/Bravura/E062.xml create mode 100644 data/Bravura/E063.xml create mode 100644 data/Bravura/E064.xml create mode 100644 data/Bravura/E065.xml create mode 100644 data/Bravura/E066.xml create mode 100644 data/Bravura/E069.xml create mode 100644 data/Bravura/E06A.xml create mode 100644 data/Bravura/E073.xml create mode 100644 data/Bravura/E074.xml create mode 100644 data/Bravura/E075.xml create mode 100644 data/Bravura/E076.xml create mode 100644 data/Bravura/E077.xml create mode 100644 data/Bravura/E080.xml create mode 100644 data/Bravura/E081.xml create mode 100644 data/Bravura/E082.xml create mode 100644 data/Bravura/E083.xml create mode 100644 data/Bravura/E084.xml create mode 100644 data/Bravura/E085.xml create mode 100644 data/Bravura/E086.xml create mode 100644 data/Bravura/E087.xml create mode 100644 data/Bravura/E088.xml create mode 100644 data/Bravura/E089.xml create mode 100644 data/Bravura/E08A.xml create mode 100644 data/Bravura/E08B.xml create mode 100644 data/Bravura/E08C.xml create mode 100644 data/Bravura/E08D.xml create mode 100644 data/Bravura/E08E.xml create mode 100644 data/Bravura/E08F.xml create mode 100644 data/Bravura/E090.xml create mode 100644 data/Bravura/E091.xml create mode 100644 data/Bravura/E092.xml create mode 100644 data/Bravura/E093.xml create mode 100644 data/Bravura/E094.xml create mode 100644 data/Bravura/E095.xml create mode 100644 data/Bravura/E0A0.xml create mode 100644 data/Bravura/E0A1.xml create mode 100644 data/Bravura/E0A2.xml create mode 100644 data/Bravura/E0A3.xml create mode 100644 data/Bravura/E0A4.xml create mode 100644 data/Bravura/E0A5.xml create mode 100644 data/Bravura/E0A9.xml create mode 100644 data/Bravura/E0AF.xml create mode 100644 data/Bravura/E0B5.xml create mode 100644 data/Bravura/E0B6.xml create mode 100644 data/Bravura/E0B7.xml create mode 100644 data/Bravura/E0D9.xml create mode 100644 data/Bravura/E0DA.xml create mode 100644 data/Bravura/E0DB.xml create mode 100644 data/Bravura/E0DC.xml create mode 100644 data/Bravura/E0DD.xml create mode 100644 data/Bravura/E0DE.xml create mode 100644 data/Bravura/E0F5.xml create mode 100644 data/Bravura/E0F6.xml create mode 100644 data/Bravura/E0FA.xml create mode 100644 data/Bravura/E101.xml create mode 100644 data/Bravura/E102.xml create mode 100644 data/Bravura/E103.xml create mode 100644 data/Bravura/E220.xml create mode 100644 data/Bravura/E221.xml create mode 100644 data/Bravura/E222.xml create mode 100644 data/Bravura/E223.xml create mode 100644 data/Bravura/E224.xml create mode 100644 data/Bravura/E22A.xml create mode 100644 data/Bravura/E240.xml create mode 100644 data/Bravura/E241.xml create mode 100644 data/Bravura/E242.xml create mode 100644 data/Bravura/E243.xml create mode 100644 data/Bravura/E244.xml create mode 100644 data/Bravura/E245.xml create mode 100644 data/Bravura/E246.xml create mode 100644 data/Bravura/E247.xml create mode 100644 data/Bravura/E248.xml create mode 100644 data/Bravura/E249.xml create mode 100644 data/Bravura/E24A.xml create mode 100644 data/Bravura/E24B.xml create mode 100644 data/Bravura/E24C.xml create mode 100644 data/Bravura/E24D.xml create mode 100644 data/Bravura/E24E.xml create mode 100644 data/Bravura/E24F.xml create mode 100644 data/Bravura/E260.xml create mode 100644 data/Bravura/E261.xml create mode 100644 data/Bravura/E262.xml create mode 100644 data/Bravura/E263.xml create mode 100644 data/Bravura/E264.xml create mode 100644 data/Bravura/E265.xml create mode 100644 data/Bravura/E266.xml create mode 100644 data/Bravura/E267.xml create mode 100644 data/Bravura/E268.xml create mode 100644 data/Bravura/E269.xml create mode 100644 data/Bravura/E26A.xml create mode 100644 data/Bravura/E26B.xml create mode 100644 data/Bravura/E26C.xml create mode 100644 data/Bravura/E26D.xml create mode 100644 data/Bravura/E270.xml create mode 100644 data/Bravura/E271.xml create mode 100644 data/Bravura/E272.xml create mode 100644 data/Bravura/E273.xml create mode 100644 data/Bravura/E274.xml create mode 100644 data/Bravura/E275.xml create mode 100644 data/Bravura/E280.xml create mode 100644 data/Bravura/E281.xml create mode 100644 data/Bravura/E282.xml create mode 100644 data/Bravura/E283.xml create mode 100644 data/Bravura/E440.xml create mode 100644 data/Bravura/E441.xml create mode 100644 data/Bravura/E442.xml create mode 100644 data/Bravura/E443.xml create mode 100644 data/Bravura/E444.xml create mode 100644 data/Bravura/E445.xml create mode 100644 data/Bravura/E446.xml create mode 100644 data/Bravura/E447.xml create mode 100644 data/Bravura/E4A0.xml create mode 100644 data/Bravura/E4A1.xml create mode 100644 data/Bravura/E4A2.xml create mode 100644 data/Bravura/E4A3.xml create mode 100644 data/Bravura/E4A4.xml create mode 100644 data/Bravura/E4A5.xml create mode 100644 data/Bravura/E4A6.xml create mode 100644 data/Bravura/E4A7.xml create mode 100644 data/Bravura/E4A8.xml create mode 100644 data/Bravura/E4A9.xml create mode 100644 data/Bravura/E4AA.xml create mode 100644 data/Bravura/E4AB.xml create mode 100644 data/Bravura/E4AC.xml create mode 100644 data/Bravura/E4AD.xml create mode 100644 data/Bravura/E4AE.xml create mode 100644 data/Bravura/E4AF.xml create mode 100644 data/Bravura/E4B0.xml create mode 100644 data/Bravura/E4B1.xml create mode 100644 data/Bravura/E4B2.xml create mode 100644 data/Bravura/E4B3.xml create mode 100644 data/Bravura/E4B4.xml create mode 100644 data/Bravura/E4B5.xml create mode 100644 data/Bravura/E4B6.xml create mode 100644 data/Bravura/E4B7.xml create mode 100644 data/Bravura/E4B8.xml create mode 100644 data/Bravura/E4B9.xml create mode 100644 data/Bravura/E4BA.xml create mode 100644 data/Bravura/E4BB.xml create mode 100644 data/Bravura/E4BC.xml create mode 100644 data/Bravura/E4BD.xml create mode 100644 data/Bravura/E4C0.xml create mode 100644 data/Bravura/E4C1.xml create mode 100644 data/Bravura/E4C2.xml create mode 100644 data/Bravura/E4C3.xml create mode 100644 data/Bravura/E4C4.xml create mode 100644 data/Bravura/E4C5.xml create mode 100644 data/Bravura/E4C6.xml create mode 100644 data/Bravura/E4C7.xml create mode 100644 data/Bravura/E4C8.xml create mode 100644 data/Bravura/E4C9.xml create mode 100644 data/Bravura/E4CE.xml create mode 100644 data/Bravura/E4E0.xml create mode 100644 data/Bravura/E4E1.xml create mode 100644 data/Bravura/E4E2.xml create mode 100644 data/Bravura/E4E3.xml create mode 100644 data/Bravura/E4E4.xml create mode 100644 data/Bravura/E4E5.xml create mode 100644 data/Bravura/E4E6.xml create mode 100644 data/Bravura/E4E7.xml create mode 100644 data/Bravura/E4E8.xml create mode 100644 data/Bravura/E4E9.xml create mode 100644 data/Bravura/E4EA.xml create mode 100644 data/Bravura/E4EB.xml create mode 100644 data/Bravura/E4EC.xml create mode 100644 data/Bravura/E4ED.xml create mode 100644 data/Bravura/E4F2.xml create mode 100644 data/Bravura/E4F6.xml create mode 100644 data/Bravura/E500.xml create mode 100644 data/Bravura/E501.xml create mode 100644 data/Bravura/E502.xml create mode 100644 data/Bravura/E503.xml create mode 100644 data/Bravura/E504.xml create mode 100644 data/Bravura/E505.xml create mode 100644 data/Bravura/E510.xml create mode 100644 data/Bravura/E511.xml create mode 100644 data/Bravura/E512.xml create mode 100644 data/Bravura/E513.xml create mode 100644 data/Bravura/E514.xml create mode 100644 data/Bravura/E515.xml create mode 100644 data/Bravura/E516.xml create mode 100644 data/Bravura/E517.xml create mode 100644 data/Bravura/E518.xml create mode 100644 data/Bravura/E519.xml create mode 100644 data/Bravura/E51A.xml create mode 100644 data/Bravura/E51B.xml create mode 100644 data/Bravura/E51C.xml create mode 100644 data/Bravura/E51D.xml create mode 100644 data/Bravura/E51E.xml create mode 100644 data/Bravura/E520.xml create mode 100644 data/Bravura/E521.xml create mode 100644 data/Bravura/E522.xml create mode 100644 data/Bravura/E523.xml create mode 100644 data/Bravura/E524.xml create mode 100644 data/Bravura/E525.xml create mode 100644 data/Bravura/E526.xml create mode 100644 data/Bravura/E527.xml create mode 100644 data/Bravura/E528.xml create mode 100644 data/Bravura/E529.xml create mode 100644 data/Bravura/E52A.xml create mode 100644 data/Bravura/E52B.xml create mode 100644 data/Bravura/E52C.xml create mode 100644 data/Bravura/E52D.xml create mode 100644 data/Bravura/E52E.xml create mode 100644 data/Bravura/E52F.xml create mode 100644 data/Bravura/E530.xml create mode 100644 data/Bravura/E531.xml create mode 100644 data/Bravura/E532.xml create mode 100644 data/Bravura/E533.xml create mode 100644 data/Bravura/E534.xml create mode 100644 data/Bravura/E535.xml create mode 100644 data/Bravura/E536.xml create mode 100644 data/Bravura/E537.xml create mode 100644 data/Bravura/E538.xml create mode 100644 data/Bravura/E539.xml create mode 100644 data/Bravura/E53A.xml create mode 100644 data/Bravura/E53B.xml create mode 100644 data/Bravura/E53C.xml create mode 100644 data/Bravura/E53D.xml create mode 100644 data/Bravura/E566.xml create mode 100644 data/Bravura/E567.xml create mode 100644 data/Bravura/E568.xml create mode 100644 data/Bravura/E569.xml create mode 100644 data/Bravura/E56A.xml create mode 100644 data/Bravura/E56B.xml create mode 100644 data/Bravura/E56C.xml create mode 100644 data/Bravura/E56D.xml create mode 100644 data/Bravura/E56E.xml create mode 100644 data/Bravura/E56F.xml create mode 100644 data/Bravura/E583.xml create mode 100644 data/Bravura/E587.xml create mode 100644 data/Bravura/E59D.xml create mode 100644 data/Bravura/E59E.xml create mode 100644 data/Bravura/E5B0.xml create mode 100644 data/Bravura/E5B1.xml create mode 100644 data/Bravura/E5B2.xml create mode 100644 data/Bravura/E5B3.xml create mode 100644 data/Bravura/E5B4.xml create mode 100644 data/Bravura/E5B5.xml create mode 100644 data/Bravura/E5B6.xml create mode 100644 data/Bravura/E5B7.xml create mode 100644 data/Bravura/E5B8.xml create mode 100644 data/Bravura/E5B9.xml create mode 100644 data/Bravura/E5BA.xml create mode 100644 data/Bravura/E5BB.xml create mode 100644 data/Bravura/E5BC.xml create mode 100644 data/Bravura/E5BD.xml create mode 100644 data/Bravura/E5BE.xml create mode 100644 data/Bravura/E5BF.xml create mode 100644 data/Bravura/E5C0.xml create mode 100644 data/Bravura/E5C1.xml create mode 100644 data/Bravura/E5C2.xml create mode 100644 data/Bravura/E5C3.xml create mode 100644 data/Bravura/E5C4.xml create mode 100644 data/Bravura/E5C5.xml create mode 100644 data/Bravura/E5C6.xml create mode 100644 data/Bravura/E5C7.xml create mode 100644 data/Bravura/E5C8.xml create mode 100644 data/Bravura/E5E5.xml create mode 100644 data/Bravura/E5E6.xml create mode 100644 data/Bravura/E5E7.xml create mode 100644 data/Bravura/E610.xml create mode 100644 data/Bravura/E611.xml create mode 100644 data/Bravura/E612.xml create mode 100644 data/Bravura/E613.xml create mode 100644 data/Bravura/E614.xml create mode 100644 data/Bravura/E630.xml create mode 100644 data/Bravura/E631.xml create mode 100644 data/Bravura/E632.xml create mode 100644 data/Bravura/E633.xml create mode 100644 data/Bravura/E638.xml create mode 100644 data/Bravura/E645.xml create mode 100644 data/Bravura/E650.xml create mode 100644 data/Bravura/E651.xml create mode 100644 data/Bravura/E655.xml create mode 100644 data/Bravura/E659.xml create mode 100644 data/Bravura/E65A.xml create mode 100644 data/Bravura/E880.xml create mode 100644 data/Bravura/E881.xml create mode 100644 data/Bravura/E882.xml create mode 100644 data/Bravura/E883.xml create mode 100644 data/Bravura/E884.xml create mode 100644 data/Bravura/E885.xml create mode 100644 data/Bravura/E886.xml create mode 100644 data/Bravura/E887.xml create mode 100644 data/Bravura/E888.xml create mode 100644 data/Bravura/E889.xml create mode 100644 data/Bravura/E88A.xml create mode 100644 data/Bravura/E901.xml create mode 100644 data/Bravura/E902.xml create mode 100644 data/Bravura/E904.xml create mode 100644 data/Bravura/E906.xml create mode 100644 data/Bravura/E907.xml create mode 100644 data/Bravura/E908.xml create mode 100644 data/Bravura/E909.xml create mode 100644 data/Bravura/E90A.xml create mode 100644 data/Bravura/E90B.xml create mode 100644 data/Bravura/E910.xml create mode 100644 data/Bravura/E911.xml create mode 100644 data/Bravura/E912.xml create mode 100644 data/Bravura/E913.xml create mode 100644 data/Bravura/E914.xml create mode 100644 data/Bravura/E915.xml create mode 100644 data/Bravura/E916.xml create mode 100644 data/Bravura/E917.xml create mode 100644 data/Bravura/E918.xml create mode 100644 data/Bravura/E919.xml create mode 100644 data/Bravura/E91A.xml create mode 100644 data/Bravura/E91B.xml create mode 100644 data/Bravura/E91C.xml create mode 100644 data/Bravura/E91D.xml create mode 100644 data/Bravura/E91E.xml create mode 100644 data/Bravura/E91F.xml create mode 100644 data/Bravura/E920.xml create mode 100644 data/Bravura/E921.xml create mode 100644 data/Bravura/E922.xml create mode 100644 data/Bravura/E923.xml create mode 100644 data/Bravura/E924.xml create mode 100644 data/Bravura/E925.xml create mode 100644 data/Bravura/E938.xml create mode 100644 data/Bravura/E939.xml create mode 100644 data/Bravura/E93C.xml create mode 100644 data/Bravura/E93D.xml create mode 100644 data/Bravura/E93E.xml create mode 100644 data/Bravura/E93F.xml create mode 100644 data/Bravura/E949.xml create mode 100644 data/Bravura/E94A.xml create mode 100644 data/Bravura/E94B.xml create mode 100644 data/Bravura/E94C.xml create mode 100644 data/Bravura/E990.xml create mode 100644 data/Bravura/E991.xml create mode 100644 data/Bravura/E996.xml create mode 100644 data/Bravura/E99B.xml create mode 100644 data/Bravura/E99E.xml create mode 100644 data/Bravura/E99F.xml create mode 100644 data/Bravura/E9B4.xml create mode 100644 data/Bravura/E9B5.xml create mode 100644 data/Bravura/E9B6.xml create mode 100644 data/Bravura/E9B7.xml create mode 100644 data/Bravura/E9B9.xml create mode 100644 data/Bravura/E9BA.xml create mode 100644 data/Bravura/E9BB.xml create mode 100644 data/Bravura/E9BC.xml create mode 100644 data/Bravura/E9E0.xml create mode 100644 data/Bravura/E9E1.xml create mode 100644 data/Bravura/E9E2.xml create mode 100644 data/Bravura/E9E3.xml create mode 100644 data/Bravura/E9F0.xml create mode 100644 data/Bravura/E9F1.xml create mode 100644 data/Bravura/E9F2.xml create mode 100644 data/Bravura/E9F3.xml create mode 100644 data/Bravura/E9F4.xml create mode 100644 data/Bravura/E9F5.xml create mode 100644 data/Bravura/E9F6.xml create mode 100644 data/Bravura/E9F7.xml create mode 100644 data/Bravura/E9F8.xml create mode 100644 data/Bravura/EA02.xml create mode 100644 data/Bravura/EA06.xml create mode 100644 data/Bravura/EAA4.xml create mode 100644 data/Bravura/EAA9.xml create mode 100644 data/Bravura/EAAA.xml create mode 100644 data/Bravura/EAAD.xml create mode 100644 data/Bravura/EAAE.xml create mode 100644 data/Bravura/EAAF.xml create mode 100644 data/Bravura/EBA7.xml create mode 100644 data/Bravura/EBA8.xml create mode 100644 data/Bravura/EBA9.xml create mode 100644 data/Bravura/EBAA.xml create mode 100644 data/Bravura/EBAB.xml create mode 100644 data/Bravura/EBAC.xml create mode 100644 data/Bravura/EBC0.xml create mode 100644 data/Bravura/EBC1.xml create mode 100644 data/Bravura/EBC2.xml create mode 100644 data/Bravura/EBC3.xml create mode 100644 data/Bravura/EBC4.xml create mode 100644 data/Bravura/EBC5.xml create mode 100644 data/Bravura/EBC6.xml create mode 100644 data/Bravura/EBC7.xml create mode 100644 data/Bravura/EBC8.xml create mode 100644 data/Bravura/EBC9.xml create mode 100644 data/Bravura/EBCA.xml create mode 100644 data/Bravura/EBCB.xml create mode 100644 data/Bravura/EBCC.xml create mode 100644 data/Bravura/EBE0.xml create mode 100644 data/Bravura/EBE1.xml create mode 100644 data/Bravura/EBE2.xml create mode 100644 data/Bravura/EBE3.xml create mode 100644 data/Bravura/EBE4.xml create mode 100644 data/Bravura/EBE5.xml create mode 100644 data/Bravura/EBE6.xml create mode 100644 data/Bravura/EBE7.xml create mode 100644 data/Bravura/EBE8.xml create mode 100644 data/Bravura/EBE9.xml create mode 100644 data/Bravura/ED40.xml create mode 100644 data/Bravura/ED41.xml create mode 100644 data/Gootville.xml create mode 100644 data/Gootville/E003.xml create mode 100644 data/Gootville/E004.xml create mode 100644 data/Gootville/E043.xml create mode 100644 data/Gootville/E044.xml create mode 100644 data/Gootville/E047.xml create mode 100644 data/Gootville/E048.xml create mode 100644 data/Gootville/E049.xml create mode 100644 data/Gootville/E050.xml create mode 100644 data/Gootville/E051.xml create mode 100644 data/Gootville/E052.xml create mode 100644 data/Gootville/E053.xml create mode 100644 data/Gootville/E054.xml create mode 100644 data/Gootville/E05C.xml create mode 100644 data/Gootville/E05D.xml create mode 100644 data/Gootville/E062.xml create mode 100644 data/Gootville/E063.xml create mode 100644 data/Gootville/E064.xml create mode 100644 data/Gootville/E065.xml create mode 100644 data/Gootville/E066.xml create mode 100644 data/Gootville/E069.xml create mode 100644 data/Gootville/E06A.xml create mode 100644 data/Gootville/E080.xml create mode 100644 data/Gootville/E081.xml create mode 100644 data/Gootville/E082.xml create mode 100644 data/Gootville/E083.xml create mode 100644 data/Gootville/E084.xml create mode 100644 data/Gootville/E085.xml create mode 100644 data/Gootville/E086.xml create mode 100644 data/Gootville/E087.xml create mode 100644 data/Gootville/E088.xml create mode 100644 data/Gootville/E089.xml create mode 100644 data/Gootville/E08A.xml create mode 100644 data/Gootville/E08B.xml create mode 100644 data/Gootville/E092.xml create mode 100644 data/Gootville/E093.xml create mode 100644 data/Gootville/E094.xml create mode 100644 data/Gootville/E095.xml create mode 100644 data/Gootville/E0A0.xml create mode 100644 data/Gootville/E0A1.xml create mode 100644 data/Gootville/E0A2.xml create mode 100644 data/Gootville/E0A3.xml create mode 100644 data/Gootville/E0A4.xml create mode 100644 data/Gootville/E0A9.xml create mode 100644 data/Gootville/E0D9.xml create mode 100644 data/Gootville/E0DA.xml create mode 100644 data/Gootville/E0DB.xml create mode 100644 data/Gootville/E0DC.xml create mode 100644 data/Gootville/E0DD.xml create mode 100644 data/Gootville/E0DE.xml create mode 100644 data/Gootville/E0F5.xml create mode 100644 data/Gootville/E0F6.xml create mode 100644 data/Gootville/E101.xml create mode 100644 data/Gootville/E102.xml create mode 100644 data/Gootville/E103.xml create mode 100644 data/Gootville/E240.xml create mode 100644 data/Gootville/E241.xml create mode 100644 data/Gootville/E242.xml create mode 100644 data/Gootville/E243.xml create mode 100644 data/Gootville/E244.xml create mode 100644 data/Gootville/E245.xml create mode 100644 data/Gootville/E246.xml create mode 100644 data/Gootville/E247.xml create mode 100644 data/Gootville/E248.xml create mode 100644 data/Gootville/E249.xml create mode 100644 data/Gootville/E260.xml create mode 100644 data/Gootville/E261.xml create mode 100644 data/Gootville/E262.xml create mode 100644 data/Gootville/E263.xml create mode 100644 data/Gootville/E264.xml create mode 100644 data/Gootville/E26A.xml create mode 100644 data/Gootville/E26B.xml create mode 100644 data/Gootville/E270.xml create mode 100644 data/Gootville/E271.xml create mode 100644 data/Gootville/E272.xml create mode 100644 data/Gootville/E273.xml create mode 100644 data/Gootville/E274.xml create mode 100644 data/Gootville/E275.xml create mode 100644 data/Gootville/E280.xml create mode 100644 data/Gootville/E281.xml create mode 100644 data/Gootville/E282.xml create mode 100644 data/Gootville/E283.xml create mode 100644 data/Gootville/E440.xml create mode 100644 data/Gootville/E441.xml create mode 100644 data/Gootville/E442.xml create mode 100644 data/Gootville/E443.xml create mode 100644 data/Gootville/E444.xml create mode 100644 data/Gootville/E445.xml create mode 100644 data/Gootville/E446.xml create mode 100644 data/Gootville/E447.xml create mode 100644 data/Gootville/E4A0.xml create mode 100644 data/Gootville/E4A1.xml create mode 100644 data/Gootville/E4A2.xml create mode 100644 data/Gootville/E4A3.xml create mode 100644 data/Gootville/E4A4.xml create mode 100644 data/Gootville/E4A5.xml create mode 100644 data/Gootville/E4A6.xml create mode 100644 data/Gootville/E4A7.xml create mode 100644 data/Gootville/E4A8.xml create mode 100644 data/Gootville/E4A9.xml create mode 100644 data/Gootville/E4AC.xml create mode 100644 data/Gootville/E4AD.xml create mode 100644 data/Gootville/E4B2.xml create mode 100644 data/Gootville/E4B3.xml create mode 100644 data/Gootville/E4B6.xml create mode 100644 data/Gootville/E4B7.xml create mode 100644 data/Gootville/E4C0.xml create mode 100644 data/Gootville/E4C1.xml create mode 100644 data/Gootville/E4C4.xml create mode 100644 data/Gootville/E4C5.xml create mode 100644 data/Gootville/E4C6.xml create mode 100644 data/Gootville/E4C7.xml create mode 100644 data/Gootville/E4C8.xml create mode 100644 data/Gootville/E4C9.xml create mode 100644 data/Gootville/E4CE.xml create mode 100644 data/Gootville/E4E1.xml create mode 100644 data/Gootville/E4E2.xml create mode 100644 data/Gootville/E4E3.xml create mode 100644 data/Gootville/E4E4.xml create mode 100644 data/Gootville/E4E5.xml create mode 100644 data/Gootville/E4E6.xml create mode 100644 data/Gootville/E4E7.xml create mode 100644 data/Gootville/E4E8.xml create mode 100644 data/Gootville/E4E9.xml create mode 100644 data/Gootville/E4EA.xml create mode 100644 data/Gootville/E4F2.xml create mode 100644 data/Gootville/E510.xml create mode 100644 data/Gootville/E514.xml create mode 100644 data/Gootville/E517.xml create mode 100644 data/Gootville/E51A.xml create mode 100644 data/Gootville/E51B.xml create mode 100644 data/Gootville/E520.xml create mode 100644 data/Gootville/E521.xml create mode 100644 data/Gootville/E522.xml create mode 100644 data/Gootville/E523.xml create mode 100644 data/Gootville/E524.xml create mode 100644 data/Gootville/E525.xml create mode 100644 data/Gootville/E526.xml create mode 100644 data/Gootville/E527.xml create mode 100644 data/Gootville/E528.xml create mode 100644 data/Gootville/E529.xml create mode 100644 data/Gootville/E52A.xml create mode 100644 data/Gootville/E52B.xml create mode 100644 data/Gootville/E52C.xml create mode 100644 data/Gootville/E52D.xml create mode 100644 data/Gootville/E52E.xml create mode 100644 data/Gootville/E52F.xml create mode 100644 data/Gootville/E530.xml create mode 100644 data/Gootville/E531.xml create mode 100644 data/Gootville/E532.xml create mode 100644 data/Gootville/E533.xml create mode 100644 data/Gootville/E534.xml create mode 100644 data/Gootville/E535.xml create mode 100644 data/Gootville/E536.xml create mode 100644 data/Gootville/E537.xml create mode 100644 data/Gootville/E538.xml create mode 100644 data/Gootville/E539.xml create mode 100644 data/Gootville/E53A.xml create mode 100644 data/Gootville/E53B.xml create mode 100644 data/Gootville/E53C.xml create mode 100644 data/Gootville/E53D.xml create mode 100644 data/Gootville/E566.xml create mode 100644 data/Gootville/E567.xml create mode 100644 data/Gootville/E568.xml create mode 100644 data/Gootville/E569.xml create mode 100644 data/Gootville/E56C.xml create mode 100644 data/Gootville/E56D.xml create mode 100644 data/Gootville/E56E.xml create mode 100644 data/Gootville/E59D.xml create mode 100644 data/Gootville/E59E.xml create mode 100644 data/Gootville/E5B0.xml create mode 100644 data/Gootville/E5E5.xml create mode 100644 data/Gootville/E5E7.xml create mode 100644 data/Gootville/E610.xml create mode 100644 data/Gootville/E611.xml create mode 100644 data/Gootville/E612.xml create mode 100644 data/Gootville/E613.xml create mode 100644 data/Gootville/E630.xml create mode 100644 data/Gootville/E631.xml create mode 100644 data/Gootville/E650.xml create mode 100644 data/Gootville/E651.xml create mode 100644 data/Gootville/E655.xml create mode 100644 data/Gootville/EAA4.xml create mode 100644 data/Gootville/EAA9.xml create mode 100644 data/Gootville/EAAA.xml create mode 100644 data/Gootville/EAAD.xml create mode 100644 data/Gootville/EAAE.xml create mode 100644 data/Gootville/EAAF.xml create mode 100644 data/Leipzig.xml create mode 100644 data/Leipzig/E000.xml create mode 100644 data/Leipzig/E003.xml create mode 100644 data/Leipzig/E004.xml create mode 100644 data/Leipzig/E043.xml create mode 100644 data/Leipzig/E044.xml create mode 100644 data/Leipzig/E045.xml create mode 100644 data/Leipzig/E046.xml create mode 100644 data/Leipzig/E047.xml create mode 100644 data/Leipzig/E048.xml create mode 100644 data/Leipzig/E049.xml create mode 100644 data/Leipzig/E04B.xml create mode 100644 data/Leipzig/E050.xml create mode 100644 data/Leipzig/E051.xml create mode 100644 data/Leipzig/E052.xml create mode 100644 data/Leipzig/E053.xml create mode 100644 data/Leipzig/E054.xml create mode 100644 data/Leipzig/E055.xml create mode 100644 data/Leipzig/E056.xml create mode 100644 data/Leipzig/E05C.xml create mode 100644 data/Leipzig/E05D.xml create mode 100644 data/Leipzig/E062.xml create mode 100644 data/Leipzig/E063.xml create mode 100644 data/Leipzig/E064.xml create mode 100644 data/Leipzig/E065.xml create mode 100644 data/Leipzig/E066.xml create mode 100644 data/Leipzig/E069.xml create mode 100644 data/Leipzig/E06A.xml create mode 100644 data/Leipzig/E073.xml create mode 100644 data/Leipzig/E074.xml create mode 100644 data/Leipzig/E075.xml create mode 100644 data/Leipzig/E076.xml create mode 100644 data/Leipzig/E077.xml create mode 100644 data/Leipzig/E080.xml create mode 100644 data/Leipzig/E081.xml create mode 100644 data/Leipzig/E082.xml create mode 100644 data/Leipzig/E083.xml create mode 100644 data/Leipzig/E084.xml create mode 100644 data/Leipzig/E085.xml create mode 100644 data/Leipzig/E086.xml create mode 100644 data/Leipzig/E087.xml create mode 100644 data/Leipzig/E088.xml create mode 100644 data/Leipzig/E089.xml create mode 100644 data/Leipzig/E08A.xml create mode 100644 data/Leipzig/E08B.xml create mode 100644 data/Leipzig/E08C.xml create mode 100644 data/Leipzig/E08D.xml create mode 100644 data/Leipzig/E08E.xml create mode 100644 data/Leipzig/E08F.xml create mode 100644 data/Leipzig/E090.xml create mode 100644 data/Leipzig/E091.xml create mode 100644 data/Leipzig/E092.xml create mode 100644 data/Leipzig/E093.xml create mode 100644 data/Leipzig/E094.xml create mode 100644 data/Leipzig/E095.xml create mode 100644 data/Leipzig/E0A0.xml create mode 100644 data/Leipzig/E0A1.xml create mode 100644 data/Leipzig/E0A2.xml create mode 100644 data/Leipzig/E0A3.xml create mode 100644 data/Leipzig/E0A4.xml create mode 100644 data/Leipzig/E0A5.xml create mode 100644 data/Leipzig/E0A9.xml create mode 100644 data/Leipzig/E0AF.xml create mode 100644 data/Leipzig/E0B5.xml create mode 100644 data/Leipzig/E0B6.xml create mode 100644 data/Leipzig/E0B7.xml create mode 100644 data/Leipzig/E0D9.xml create mode 100644 data/Leipzig/E0DA.xml create mode 100644 data/Leipzig/E0DB.xml create mode 100644 data/Leipzig/E0DC.xml create mode 100644 data/Leipzig/E0DD.xml create mode 100644 data/Leipzig/E0DE.xml create mode 100644 data/Leipzig/E0F5.xml create mode 100644 data/Leipzig/E0F6.xml create mode 100644 data/Leipzig/E0FA.xml create mode 100644 data/Leipzig/E101.xml create mode 100644 data/Leipzig/E102.xml create mode 100644 data/Leipzig/E103.xml create mode 100644 data/Leipzig/E220.xml create mode 100644 data/Leipzig/E221.xml create mode 100644 data/Leipzig/E222.xml create mode 100644 data/Leipzig/E223.xml create mode 100644 data/Leipzig/E224.xml create mode 100644 data/Leipzig/E22A.xml create mode 100644 data/Leipzig/E240.xml create mode 100644 data/Leipzig/E241.xml create mode 100644 data/Leipzig/E242.xml create mode 100644 data/Leipzig/E243.xml create mode 100644 data/Leipzig/E244.xml create mode 100644 data/Leipzig/E245.xml create mode 100644 data/Leipzig/E246.xml create mode 100644 data/Leipzig/E247.xml create mode 100644 data/Leipzig/E248.xml create mode 100644 data/Leipzig/E249.xml create mode 100644 data/Leipzig/E24A.xml create mode 100644 data/Leipzig/E24B.xml create mode 100644 data/Leipzig/E24C.xml create mode 100644 data/Leipzig/E24D.xml create mode 100644 data/Leipzig/E24E.xml create mode 100644 data/Leipzig/E24F.xml create mode 100644 data/Leipzig/E260.xml create mode 100644 data/Leipzig/E261.xml create mode 100644 data/Leipzig/E262.xml create mode 100644 data/Leipzig/E263.xml create mode 100644 data/Leipzig/E264.xml create mode 100644 data/Leipzig/E265.xml create mode 100644 data/Leipzig/E266.xml create mode 100644 data/Leipzig/E267.xml create mode 100644 data/Leipzig/E268.xml create mode 100644 data/Leipzig/E269.xml create mode 100644 data/Leipzig/E26A.xml create mode 100644 data/Leipzig/E26B.xml create mode 100644 data/Leipzig/E26C.xml create mode 100644 data/Leipzig/E26D.xml create mode 100644 data/Leipzig/E270.xml create mode 100644 data/Leipzig/E271.xml create mode 100644 data/Leipzig/E272.xml create mode 100644 data/Leipzig/E273.xml create mode 100644 data/Leipzig/E274.xml create mode 100644 data/Leipzig/E275.xml create mode 100644 data/Leipzig/E280.xml create mode 100644 data/Leipzig/E281.xml create mode 100644 data/Leipzig/E282.xml create mode 100644 data/Leipzig/E283.xml create mode 100644 data/Leipzig/E440.xml create mode 100644 data/Leipzig/E441.xml create mode 100644 data/Leipzig/E442.xml create mode 100644 data/Leipzig/E443.xml create mode 100644 data/Leipzig/E444.xml create mode 100644 data/Leipzig/E445.xml create mode 100644 data/Leipzig/E446.xml create mode 100644 data/Leipzig/E447.xml create mode 100644 data/Leipzig/E4A0.xml create mode 100644 data/Leipzig/E4A1.xml create mode 100644 data/Leipzig/E4A2.xml create mode 100644 data/Leipzig/E4A3.xml create mode 100644 data/Leipzig/E4A4.xml create mode 100644 data/Leipzig/E4A5.xml create mode 100644 data/Leipzig/E4A6.xml create mode 100644 data/Leipzig/E4A7.xml create mode 100644 data/Leipzig/E4A8.xml create mode 100644 data/Leipzig/E4A9.xml create mode 100644 data/Leipzig/E4AA.xml create mode 100644 data/Leipzig/E4AB.xml create mode 100644 data/Leipzig/E4AC.xml create mode 100644 data/Leipzig/E4AD.xml create mode 100644 data/Leipzig/E4AE.xml create mode 100644 data/Leipzig/E4AF.xml create mode 100644 data/Leipzig/E4B0.xml create mode 100644 data/Leipzig/E4B1.xml create mode 100644 data/Leipzig/E4B2.xml create mode 100644 data/Leipzig/E4B3.xml create mode 100644 data/Leipzig/E4B4.xml create mode 100644 data/Leipzig/E4B5.xml create mode 100644 data/Leipzig/E4B6.xml create mode 100644 data/Leipzig/E4B7.xml create mode 100644 data/Leipzig/E4B8.xml create mode 100644 data/Leipzig/E4B9.xml create mode 100644 data/Leipzig/E4BA.xml create mode 100644 data/Leipzig/E4BB.xml create mode 100644 data/Leipzig/E4BC.xml create mode 100644 data/Leipzig/E4BD.xml create mode 100644 data/Leipzig/E4C0.xml create mode 100644 data/Leipzig/E4C1.xml create mode 100644 data/Leipzig/E4C2.xml create mode 100644 data/Leipzig/E4C3.xml create mode 100644 data/Leipzig/E4C4.xml create mode 100644 data/Leipzig/E4C5.xml create mode 100644 data/Leipzig/E4C6.xml create mode 100644 data/Leipzig/E4C7.xml create mode 100644 data/Leipzig/E4C8.xml create mode 100644 data/Leipzig/E4C9.xml create mode 100644 data/Leipzig/E4CE.xml create mode 100644 data/Leipzig/E4E0.xml create mode 100644 data/Leipzig/E4E1.xml create mode 100644 data/Leipzig/E4E2.xml create mode 100644 data/Leipzig/E4E3.xml create mode 100644 data/Leipzig/E4E4.xml create mode 100644 data/Leipzig/E4E5.xml create mode 100644 data/Leipzig/E4E6.xml create mode 100644 data/Leipzig/E4E7.xml create mode 100644 data/Leipzig/E4E8.xml create mode 100644 data/Leipzig/E4E9.xml create mode 100644 data/Leipzig/E4EA.xml create mode 100644 data/Leipzig/E4EB.xml create mode 100644 data/Leipzig/E4EC.xml create mode 100644 data/Leipzig/E4ED.xml create mode 100644 data/Leipzig/E4F2.xml create mode 100644 data/Leipzig/E4F6.xml create mode 100644 data/Leipzig/E500.xml create mode 100644 data/Leipzig/E501.xml create mode 100644 data/Leipzig/E502.xml create mode 100644 data/Leipzig/E503.xml create mode 100644 data/Leipzig/E504.xml create mode 100644 data/Leipzig/E505.xml create mode 100644 data/Leipzig/E510.xml create mode 100644 data/Leipzig/E511.xml create mode 100644 data/Leipzig/E512.xml create mode 100644 data/Leipzig/E513.xml create mode 100644 data/Leipzig/E514.xml create mode 100644 data/Leipzig/E515.xml create mode 100644 data/Leipzig/E516.xml create mode 100644 data/Leipzig/E517.xml create mode 100644 data/Leipzig/E518.xml create mode 100644 data/Leipzig/E519.xml create mode 100644 data/Leipzig/E51A.xml create mode 100644 data/Leipzig/E51B.xml create mode 100644 data/Leipzig/E51C.xml create mode 100644 data/Leipzig/E51D.xml create mode 100644 data/Leipzig/E51E.xml create mode 100644 data/Leipzig/E520.xml create mode 100644 data/Leipzig/E521.xml create mode 100644 data/Leipzig/E522.xml create mode 100644 data/Leipzig/E523.xml create mode 100644 data/Leipzig/E524.xml create mode 100644 data/Leipzig/E525.xml create mode 100644 data/Leipzig/E526.xml create mode 100644 data/Leipzig/E527.xml create mode 100644 data/Leipzig/E528.xml create mode 100644 data/Leipzig/E529.xml create mode 100644 data/Leipzig/E52A.xml create mode 100644 data/Leipzig/E52B.xml create mode 100644 data/Leipzig/E52C.xml create mode 100644 data/Leipzig/E52D.xml create mode 100644 data/Leipzig/E52E.xml create mode 100644 data/Leipzig/E52F.xml create mode 100644 data/Leipzig/E530.xml create mode 100644 data/Leipzig/E531.xml create mode 100644 data/Leipzig/E532.xml create mode 100644 data/Leipzig/E533.xml create mode 100644 data/Leipzig/E534.xml create mode 100644 data/Leipzig/E535.xml create mode 100644 data/Leipzig/E536.xml create mode 100644 data/Leipzig/E537.xml create mode 100644 data/Leipzig/E538.xml create mode 100644 data/Leipzig/E539.xml create mode 100644 data/Leipzig/E53A.xml create mode 100644 data/Leipzig/E53B.xml create mode 100644 data/Leipzig/E53C.xml create mode 100644 data/Leipzig/E53D.xml create mode 100644 data/Leipzig/E566.xml create mode 100644 data/Leipzig/E567.xml create mode 100644 data/Leipzig/E568.xml create mode 100644 data/Leipzig/E569.xml create mode 100644 data/Leipzig/E56A.xml create mode 100644 data/Leipzig/E56B.xml create mode 100644 data/Leipzig/E56C.xml create mode 100644 data/Leipzig/E56D.xml create mode 100644 data/Leipzig/E56E.xml create mode 100644 data/Leipzig/E56F.xml create mode 100644 data/Leipzig/E583.xml create mode 100644 data/Leipzig/E587.xml create mode 100644 data/Leipzig/E59D.xml create mode 100644 data/Leipzig/E59E.xml create mode 100644 data/Leipzig/E5B0.xml create mode 100644 data/Leipzig/E5B1.xml create mode 100644 data/Leipzig/E5B2.xml create mode 100644 data/Leipzig/E5B3.xml create mode 100644 data/Leipzig/E5B4.xml create mode 100644 data/Leipzig/E5B5.xml create mode 100644 data/Leipzig/E5B6.xml create mode 100644 data/Leipzig/E5B7.xml create mode 100644 data/Leipzig/E5B8.xml create mode 100644 data/Leipzig/E5B9.xml create mode 100644 data/Leipzig/E5BA.xml create mode 100644 data/Leipzig/E5BB.xml create mode 100644 data/Leipzig/E5BC.xml create mode 100644 data/Leipzig/E5BD.xml create mode 100644 data/Leipzig/E5BE.xml create mode 100644 data/Leipzig/E5BF.xml create mode 100644 data/Leipzig/E5C0.xml create mode 100644 data/Leipzig/E5C1.xml create mode 100644 data/Leipzig/E5C2.xml create mode 100644 data/Leipzig/E5C3.xml create mode 100644 data/Leipzig/E5C4.xml create mode 100644 data/Leipzig/E5C5.xml create mode 100644 data/Leipzig/E5C6.xml create mode 100644 data/Leipzig/E5C7.xml create mode 100644 data/Leipzig/E5C8.xml create mode 100644 data/Leipzig/E5E5.xml create mode 100644 data/Leipzig/E5E6.xml create mode 100644 data/Leipzig/E5E7.xml create mode 100644 data/Leipzig/E610.xml create mode 100644 data/Leipzig/E611.xml create mode 100644 data/Leipzig/E612.xml create mode 100644 data/Leipzig/E613.xml create mode 100644 data/Leipzig/E614.xml create mode 100644 data/Leipzig/E630.xml create mode 100644 data/Leipzig/E631.xml create mode 100644 data/Leipzig/E632.xml create mode 100644 data/Leipzig/E633.xml create mode 100644 data/Leipzig/E638.xml create mode 100644 data/Leipzig/E645.xml create mode 100644 data/Leipzig/E650.xml create mode 100644 data/Leipzig/E651.xml create mode 100644 data/Leipzig/E655.xml create mode 100644 data/Leipzig/E659.xml create mode 100644 data/Leipzig/E65A.xml create mode 100644 data/Leipzig/E880.xml create mode 100644 data/Leipzig/E881.xml create mode 100644 data/Leipzig/E882.xml create mode 100644 data/Leipzig/E883.xml create mode 100644 data/Leipzig/E884.xml create mode 100644 data/Leipzig/E885.xml create mode 100644 data/Leipzig/E886.xml create mode 100644 data/Leipzig/E887.xml create mode 100644 data/Leipzig/E888.xml create mode 100644 data/Leipzig/E889.xml create mode 100644 data/Leipzig/E88A.xml create mode 100644 data/Leipzig/E901.xml create mode 100644 data/Leipzig/E902.xml create mode 100644 data/Leipzig/E904.xml create mode 100644 data/Leipzig/E906.xml create mode 100644 data/Leipzig/E907.xml create mode 100644 data/Leipzig/E908.xml create mode 100644 data/Leipzig/E909.xml create mode 100644 data/Leipzig/E90A.xml create mode 100644 data/Leipzig/E90B.xml create mode 100644 data/Leipzig/E910.xml create mode 100644 data/Leipzig/E911.xml create mode 100644 data/Leipzig/E912.xml create mode 100644 data/Leipzig/E913.xml create mode 100644 data/Leipzig/E914.xml create mode 100644 data/Leipzig/E915.xml create mode 100644 data/Leipzig/E916.xml create mode 100644 data/Leipzig/E917.xml create mode 100644 data/Leipzig/E918.xml create mode 100644 data/Leipzig/E919.xml create mode 100644 data/Leipzig/E91A.xml create mode 100644 data/Leipzig/E91B.xml create mode 100644 data/Leipzig/E91C.xml create mode 100644 data/Leipzig/E91D.xml create mode 100644 data/Leipzig/E91E.xml create mode 100644 data/Leipzig/E91F.xml create mode 100644 data/Leipzig/E920.xml create mode 100644 data/Leipzig/E921.xml create mode 100644 data/Leipzig/E922.xml create mode 100644 data/Leipzig/E923.xml create mode 100644 data/Leipzig/E924.xml create mode 100644 data/Leipzig/E925.xml create mode 100644 data/Leipzig/E938.xml create mode 100644 data/Leipzig/E939.xml create mode 100644 data/Leipzig/E93C.xml create mode 100644 data/Leipzig/E93D.xml create mode 100644 data/Leipzig/E93E.xml create mode 100644 data/Leipzig/E93F.xml create mode 100644 data/Leipzig/E949.xml create mode 100644 data/Leipzig/E94A.xml create mode 100644 data/Leipzig/E94B.xml create mode 100644 data/Leipzig/E94C.xml create mode 100644 data/Leipzig/E9E0.xml create mode 100644 data/Leipzig/E9E1.xml create mode 100644 data/Leipzig/E9E2.xml create mode 100644 data/Leipzig/E9E3.xml create mode 100644 data/Leipzig/E9F0.xml create mode 100644 data/Leipzig/E9F1.xml create mode 100644 data/Leipzig/E9F2.xml create mode 100644 data/Leipzig/E9F3.xml create mode 100644 data/Leipzig/E9F4.xml create mode 100644 data/Leipzig/E9F5.xml create mode 100644 data/Leipzig/E9F6.xml create mode 100644 data/Leipzig/E9F7.xml create mode 100644 data/Leipzig/E9F8.xml create mode 100644 data/Leipzig/EA02.xml create mode 100644 data/Leipzig/EA06.xml create mode 100644 data/Leipzig/EAA4.xml create mode 100644 data/Leipzig/EAA9.xml create mode 100644 data/Leipzig/EAAA.xml create mode 100644 data/Leipzig/EAAD.xml create mode 100644 data/Leipzig/EAAE.xml create mode 100644 data/Leipzig/EAAF.xml create mode 100644 data/Leipzig/EBA7.xml create mode 100644 data/Leipzig/EBA8.xml create mode 100644 data/Leipzig/EBA9.xml create mode 100644 data/Leipzig/EBAA.xml create mode 100644 data/Leipzig/EBAB.xml create mode 100644 data/Leipzig/EBAC.xml create mode 100644 data/Leipzig/EBC0.xml create mode 100644 data/Leipzig/EBC1.xml create mode 100644 data/Leipzig/EBC2.xml create mode 100644 data/Leipzig/EBC3.xml create mode 100644 data/Leipzig/EBC4.xml create mode 100644 data/Leipzig/EBC5.xml create mode 100644 data/Leipzig/EBC6.xml create mode 100644 data/Leipzig/EBC7.xml create mode 100644 data/Leipzig/EBC8.xml create mode 100644 data/Leipzig/EBC9.xml create mode 100644 data/Leipzig/EBCA.xml create mode 100644 data/Leipzig/EBCB.xml create mode 100644 data/Leipzig/EBCC.xml create mode 100644 data/Leipzig/EBE0.xml create mode 100644 data/Leipzig/EBE1.xml create mode 100644 data/Leipzig/EBE2.xml create mode 100644 data/Leipzig/EBE3.xml create mode 100644 data/Leipzig/EBE4.xml create mode 100644 data/Leipzig/EBE5.xml create mode 100644 data/Leipzig/EBE6.xml create mode 100644 data/Leipzig/EBE7.xml create mode 100644 data/Leipzig/EBE8.xml create mode 100644 data/Leipzig/EBE9.xml create mode 100644 data/Leipzig/ED40.xml create mode 100644 data/Leipzig/ED41.xml create mode 100644 data/Leland.xml create mode 100644 data/Leland/E000.xml create mode 100644 data/Leland/E003.xml create mode 100644 data/Leland/E004.xml create mode 100644 data/Leland/E043.xml create mode 100644 data/Leland/E044.xml create mode 100644 data/Leland/E047.xml create mode 100644 data/Leland/E048.xml create mode 100644 data/Leland/E049.xml create mode 100644 data/Leland/E04B.xml create mode 100644 data/Leland/E050.xml create mode 100644 data/Leland/E051.xml create mode 100644 data/Leland/E052.xml create mode 100644 data/Leland/E053.xml create mode 100644 data/Leland/E054.xml create mode 100644 data/Leland/E055.xml create mode 100644 data/Leland/E05C.xml create mode 100644 data/Leland/E05D.xml create mode 100644 data/Leland/E062.xml create mode 100644 data/Leland/E063.xml create mode 100644 data/Leland/E064.xml create mode 100644 data/Leland/E065.xml create mode 100644 data/Leland/E066.xml create mode 100644 data/Leland/E069.xml create mode 100644 data/Leland/E06A.xml create mode 100644 data/Leland/E080.xml create mode 100644 data/Leland/E081.xml create mode 100644 data/Leland/E082.xml create mode 100644 data/Leland/E083.xml create mode 100644 data/Leland/E084.xml create mode 100644 data/Leland/E085.xml create mode 100644 data/Leland/E086.xml create mode 100644 data/Leland/E087.xml create mode 100644 data/Leland/E088.xml create mode 100644 data/Leland/E089.xml create mode 100644 data/Leland/E08A.xml create mode 100644 data/Leland/E08B.xml create mode 100644 data/Leland/E08C.xml create mode 100644 data/Leland/E0A0.xml create mode 100644 data/Leland/E0A1.xml create mode 100644 data/Leland/E0A2.xml create mode 100644 data/Leland/E0A3.xml create mode 100644 data/Leland/E0A4.xml create mode 100644 data/Leland/E0A5.xml create mode 100644 data/Leland/E0A9.xml create mode 100644 data/Leland/E0AF.xml create mode 100644 data/Leland/E0D9.xml create mode 100644 data/Leland/E0DB.xml create mode 100644 data/Leland/E0F5.xml create mode 100644 data/Leland/E0F6.xml create mode 100644 data/Leland/E220.xml create mode 100644 data/Leland/E221.xml create mode 100644 data/Leland/E222.xml create mode 100644 data/Leland/E223.xml create mode 100644 data/Leland/E224.xml create mode 100644 data/Leland/E22A.xml create mode 100644 data/Leland/E240.xml create mode 100644 data/Leland/E241.xml create mode 100644 data/Leland/E242.xml create mode 100644 data/Leland/E243.xml create mode 100644 data/Leland/E244.xml create mode 100644 data/Leland/E245.xml create mode 100644 data/Leland/E246.xml create mode 100644 data/Leland/E247.xml create mode 100644 data/Leland/E248.xml create mode 100644 data/Leland/E249.xml create mode 100644 data/Leland/E24A.xml create mode 100644 data/Leland/E24B.xml create mode 100644 data/Leland/E24C.xml create mode 100644 data/Leland/E24D.xml create mode 100644 data/Leland/E24E.xml create mode 100644 data/Leland/E24F.xml create mode 100644 data/Leland/E260.xml create mode 100644 data/Leland/E261.xml create mode 100644 data/Leland/E262.xml create mode 100644 data/Leland/E263.xml create mode 100644 data/Leland/E264.xml create mode 100644 data/Leland/E265.xml create mode 100644 data/Leland/E266.xml create mode 100644 data/Leland/E267.xml create mode 100644 data/Leland/E268.xml create mode 100644 data/Leland/E269.xml create mode 100644 data/Leland/E26A.xml create mode 100644 data/Leland/E26B.xml create mode 100644 data/Leland/E26C.xml create mode 100644 data/Leland/E26D.xml create mode 100644 data/Leland/E270.xml create mode 100644 data/Leland/E271.xml create mode 100644 data/Leland/E272.xml create mode 100644 data/Leland/E273.xml create mode 100644 data/Leland/E274.xml create mode 100644 data/Leland/E275.xml create mode 100644 data/Leland/E280.xml create mode 100644 data/Leland/E281.xml create mode 100644 data/Leland/E282.xml create mode 100644 data/Leland/E283.xml create mode 100644 data/Leland/E440.xml create mode 100644 data/Leland/E442.xml create mode 100644 data/Leland/E446.xml create mode 100644 data/Leland/E447.xml create mode 100644 data/Leland/E4A0.xml create mode 100644 data/Leland/E4A1.xml create mode 100644 data/Leland/E4A2.xml create mode 100644 data/Leland/E4A3.xml create mode 100644 data/Leland/E4A4.xml create mode 100644 data/Leland/E4A5.xml create mode 100644 data/Leland/E4A6.xml create mode 100644 data/Leland/E4A7.xml create mode 100644 data/Leland/E4A8.xml create mode 100644 data/Leland/E4A9.xml create mode 100644 data/Leland/E4AC.xml create mode 100644 data/Leland/E4AD.xml create mode 100644 data/Leland/E4AE.xml create mode 100644 data/Leland/E4AF.xml create mode 100644 data/Leland/E4B0.xml create mode 100644 data/Leland/E4B1.xml create mode 100644 data/Leland/E4B2.xml create mode 100644 data/Leland/E4B3.xml create mode 100644 data/Leland/E4B4.xml create mode 100644 data/Leland/E4B5.xml create mode 100644 data/Leland/E4B6.xml create mode 100644 data/Leland/E4B7.xml create mode 100644 data/Leland/E4B8.xml create mode 100644 data/Leland/E4B9.xml create mode 100644 data/Leland/E4BA.xml create mode 100644 data/Leland/E4BB.xml create mode 100644 data/Leland/E4BC.xml create mode 100644 data/Leland/E4BD.xml create mode 100644 data/Leland/E4C0.xml create mode 100644 data/Leland/E4C1.xml create mode 100644 data/Leland/E4C4.xml create mode 100644 data/Leland/E4C5.xml create mode 100644 data/Leland/E4C6.xml create mode 100644 data/Leland/E4C7.xml create mode 100644 data/Leland/E4C8.xml create mode 100644 data/Leland/E4C9.xml create mode 100644 data/Leland/E4CE.xml create mode 100644 data/Leland/E4E0.xml create mode 100644 data/Leland/E4E1.xml create mode 100644 data/Leland/E4E2.xml create mode 100644 data/Leland/E4E3.xml create mode 100644 data/Leland/E4E4.xml create mode 100644 data/Leland/E4E5.xml create mode 100644 data/Leland/E4E6.xml create mode 100644 data/Leland/E4E7.xml create mode 100644 data/Leland/E4E8.xml create mode 100644 data/Leland/E4E9.xml create mode 100644 data/Leland/E4EA.xml create mode 100644 data/Leland/E4EB.xml create mode 100644 data/Leland/E4EC.xml create mode 100644 data/Leland/E4ED.xml create mode 100644 data/Leland/E4F2.xml create mode 100644 data/Leland/E4F6.xml create mode 100644 data/Leland/E500.xml create mode 100644 data/Leland/E501.xml create mode 100644 data/Leland/E502.xml create mode 100644 data/Leland/E503.xml create mode 100644 data/Leland/E504.xml create mode 100644 data/Leland/E505.xml create mode 100644 data/Leland/E510.xml create mode 100644 data/Leland/E511.xml create mode 100644 data/Leland/E512.xml create mode 100644 data/Leland/E513.xml create mode 100644 data/Leland/E514.xml create mode 100644 data/Leland/E515.xml create mode 100644 data/Leland/E516.xml create mode 100644 data/Leland/E517.xml create mode 100644 data/Leland/E518.xml create mode 100644 data/Leland/E519.xml create mode 100644 data/Leland/E51A.xml create mode 100644 data/Leland/E51B.xml create mode 100644 data/Leland/E51C.xml create mode 100644 data/Leland/E51D.xml create mode 100644 data/Leland/E51E.xml create mode 100644 data/Leland/E520.xml create mode 100644 data/Leland/E521.xml create mode 100644 data/Leland/E522.xml create mode 100644 data/Leland/E523.xml create mode 100644 data/Leland/E524.xml create mode 100644 data/Leland/E525.xml create mode 100644 data/Leland/E526.xml create mode 100644 data/Leland/E527.xml create mode 100644 data/Leland/E528.xml create mode 100644 data/Leland/E529.xml create mode 100644 data/Leland/E52A.xml create mode 100644 data/Leland/E52B.xml create mode 100644 data/Leland/E52C.xml create mode 100644 data/Leland/E52D.xml create mode 100644 data/Leland/E52E.xml create mode 100644 data/Leland/E52F.xml create mode 100644 data/Leland/E530.xml create mode 100644 data/Leland/E531.xml create mode 100644 data/Leland/E532.xml create mode 100644 data/Leland/E533.xml create mode 100644 data/Leland/E534.xml create mode 100644 data/Leland/E535.xml create mode 100644 data/Leland/E536.xml create mode 100644 data/Leland/E537.xml create mode 100644 data/Leland/E538.xml create mode 100644 data/Leland/E539.xml create mode 100644 data/Leland/E53A.xml create mode 100644 data/Leland/E53B.xml create mode 100644 data/Leland/E53C.xml create mode 100644 data/Leland/E53D.xml create mode 100644 data/Leland/E566.xml create mode 100644 data/Leland/E567.xml create mode 100644 data/Leland/E568.xml create mode 100644 data/Leland/E569.xml create mode 100644 data/Leland/E56A.xml create mode 100644 data/Leland/E56B.xml create mode 100644 data/Leland/E56C.xml create mode 100644 data/Leland/E56D.xml create mode 100644 data/Leland/E56E.xml create mode 100644 data/Leland/E56F.xml create mode 100644 data/Leland/E583.xml create mode 100644 data/Leland/E587.xml create mode 100644 data/Leland/E59D.xml create mode 100644 data/Leland/E59E.xml create mode 100644 data/Leland/E5B2.xml create mode 100644 data/Leland/E5B5.xml create mode 100644 data/Leland/E5B8.xml create mode 100644 data/Leland/E5BB.xml create mode 100644 data/Leland/E5BC.xml create mode 100644 data/Leland/E5BD.xml create mode 100644 data/Leland/E5BE.xml create mode 100644 data/Leland/E5C0.xml create mode 100644 data/Leland/E5C3.xml create mode 100644 data/Leland/E5C6.xml create mode 100644 data/Leland/E5C7.xml create mode 100644 data/Leland/E5C8.xml create mode 100644 data/Leland/E5E5.xml create mode 100644 data/Leland/E5E6.xml create mode 100644 data/Leland/E5E7.xml create mode 100644 data/Leland/E610.xml create mode 100644 data/Leland/E611.xml create mode 100644 data/Leland/E612.xml create mode 100644 data/Leland/E613.xml create mode 100644 data/Leland/E614.xml create mode 100644 data/Leland/E630.xml create mode 100644 data/Leland/E631.xml create mode 100644 data/Leland/E632.xml create mode 100644 data/Leland/E650.xml create mode 100644 data/Leland/E651.xml create mode 100644 data/Leland/E655.xml create mode 100644 data/Leland/E880.xml create mode 100644 data/Leland/E881.xml create mode 100644 data/Leland/E882.xml create mode 100644 data/Leland/E883.xml create mode 100644 data/Leland/E884.xml create mode 100644 data/Leland/E885.xml create mode 100644 data/Leland/E886.xml create mode 100644 data/Leland/E887.xml create mode 100644 data/Leland/E888.xml create mode 100644 data/Leland/E889.xml create mode 100644 data/Leland/E88A.xml create mode 100644 data/Leland/E93C.xml create mode 100644 data/Leland/E93D.xml create mode 100644 data/Leland/EAA4.xml create mode 100644 data/Leland/EAA9.xml create mode 100644 data/Leland/EAAA.xml create mode 100644 data/Leland/EAAD.xml create mode 100644 data/Leland/EAAE.xml create mode 100644 data/Petaluma.xml create mode 100644 data/Petaluma/E000.xml create mode 100644 data/Petaluma/E003.xml create mode 100644 data/Petaluma/E004.xml create mode 100644 data/Petaluma/E043.xml create mode 100644 data/Petaluma/E044.xml create mode 100644 data/Petaluma/E045.xml create mode 100644 data/Petaluma/E046.xml create mode 100644 data/Petaluma/E047.xml create mode 100644 data/Petaluma/E048.xml create mode 100644 data/Petaluma/E049.xml create mode 100644 data/Petaluma/E04B.xml create mode 100644 data/Petaluma/E050.xml create mode 100644 data/Petaluma/E051.xml create mode 100644 data/Petaluma/E052.xml create mode 100644 data/Petaluma/E053.xml create mode 100644 data/Petaluma/E054.xml create mode 100644 data/Petaluma/E055.xml create mode 100644 data/Petaluma/E056.xml create mode 100644 data/Petaluma/E05C.xml create mode 100644 data/Petaluma/E05D.xml create mode 100644 data/Petaluma/E062.xml create mode 100644 data/Petaluma/E063.xml create mode 100644 data/Petaluma/E064.xml create mode 100644 data/Petaluma/E065.xml create mode 100644 data/Petaluma/E066.xml create mode 100644 data/Petaluma/E069.xml create mode 100644 data/Petaluma/E06A.xml create mode 100644 data/Petaluma/E073.xml create mode 100644 data/Petaluma/E074.xml create mode 100644 data/Petaluma/E075.xml create mode 100644 data/Petaluma/E076.xml create mode 100644 data/Petaluma/E077.xml create mode 100644 data/Petaluma/E080.xml create mode 100644 data/Petaluma/E081.xml create mode 100644 data/Petaluma/E082.xml create mode 100644 data/Petaluma/E083.xml create mode 100644 data/Petaluma/E084.xml create mode 100644 data/Petaluma/E085.xml create mode 100644 data/Petaluma/E086.xml create mode 100644 data/Petaluma/E087.xml create mode 100644 data/Petaluma/E088.xml create mode 100644 data/Petaluma/E089.xml create mode 100644 data/Petaluma/E08A.xml create mode 100644 data/Petaluma/E08B.xml create mode 100644 data/Petaluma/E08C.xml create mode 100644 data/Petaluma/E08D.xml create mode 100644 data/Petaluma/E08E.xml create mode 100644 data/Petaluma/E08F.xml create mode 100644 data/Petaluma/E090.xml create mode 100644 data/Petaluma/E091.xml create mode 100644 data/Petaluma/E092.xml create mode 100644 data/Petaluma/E093.xml create mode 100644 data/Petaluma/E094.xml create mode 100644 data/Petaluma/E095.xml create mode 100644 data/Petaluma/E0A0.xml create mode 100644 data/Petaluma/E0A1.xml create mode 100644 data/Petaluma/E0A2.xml create mode 100644 data/Petaluma/E0A3.xml create mode 100644 data/Petaluma/E0A4.xml create mode 100644 data/Petaluma/E0A5.xml create mode 100644 data/Petaluma/E0A9.xml create mode 100644 data/Petaluma/E0AF.xml create mode 100644 data/Petaluma/E0B5.xml create mode 100644 data/Petaluma/E0B6.xml create mode 100644 data/Petaluma/E0B7.xml create mode 100644 data/Petaluma/E0D9.xml create mode 100644 data/Petaluma/E0DA.xml create mode 100644 data/Petaluma/E0DB.xml create mode 100644 data/Petaluma/E0DC.xml create mode 100644 data/Petaluma/E0DD.xml create mode 100644 data/Petaluma/E0DE.xml create mode 100644 data/Petaluma/E0F5.xml create mode 100644 data/Petaluma/E0F6.xml create mode 100644 data/Petaluma/E0FA.xml create mode 100644 data/Petaluma/E101.xml create mode 100644 data/Petaluma/E102.xml create mode 100644 data/Petaluma/E103.xml create mode 100644 data/Petaluma/E220.xml create mode 100644 data/Petaluma/E221.xml create mode 100644 data/Petaluma/E222.xml create mode 100644 data/Petaluma/E223.xml create mode 100644 data/Petaluma/E224.xml create mode 100644 data/Petaluma/E22A.xml create mode 100644 data/Petaluma/E240.xml create mode 100644 data/Petaluma/E241.xml create mode 100644 data/Petaluma/E242.xml create mode 100644 data/Petaluma/E243.xml create mode 100644 data/Petaluma/E244.xml create mode 100644 data/Petaluma/E245.xml create mode 100644 data/Petaluma/E246.xml create mode 100644 data/Petaluma/E247.xml create mode 100644 data/Petaluma/E248.xml create mode 100644 data/Petaluma/E249.xml create mode 100644 data/Petaluma/E24A.xml create mode 100644 data/Petaluma/E24B.xml create mode 100644 data/Petaluma/E24C.xml create mode 100644 data/Petaluma/E24D.xml create mode 100644 data/Petaluma/E24E.xml create mode 100644 data/Petaluma/E24F.xml create mode 100644 data/Petaluma/E260.xml create mode 100644 data/Petaluma/E261.xml create mode 100644 data/Petaluma/E262.xml create mode 100644 data/Petaluma/E263.xml create mode 100644 data/Petaluma/E264.xml create mode 100644 data/Petaluma/E265.xml create mode 100644 data/Petaluma/E266.xml create mode 100644 data/Petaluma/E267.xml create mode 100644 data/Petaluma/E268.xml create mode 100644 data/Petaluma/E269.xml create mode 100644 data/Petaluma/E26A.xml create mode 100644 data/Petaluma/E26B.xml create mode 100644 data/Petaluma/E26C.xml create mode 100644 data/Petaluma/E26D.xml create mode 100644 data/Petaluma/E270.xml create mode 100644 data/Petaluma/E271.xml create mode 100644 data/Petaluma/E272.xml create mode 100644 data/Petaluma/E273.xml create mode 100644 data/Petaluma/E274.xml create mode 100644 data/Petaluma/E275.xml create mode 100644 data/Petaluma/E280.xml create mode 100644 data/Petaluma/E281.xml create mode 100644 data/Petaluma/E282.xml create mode 100644 data/Petaluma/E283.xml create mode 100644 data/Petaluma/E440.xml create mode 100644 data/Petaluma/E441.xml create mode 100644 data/Petaluma/E442.xml create mode 100644 data/Petaluma/E443.xml create mode 100644 data/Petaluma/E444.xml create mode 100644 data/Petaluma/E445.xml create mode 100644 data/Petaluma/E446.xml create mode 100644 data/Petaluma/E447.xml create mode 100644 data/Petaluma/E4A0.xml create mode 100644 data/Petaluma/E4A1.xml create mode 100644 data/Petaluma/E4A2.xml create mode 100644 data/Petaluma/E4A3.xml create mode 100644 data/Petaluma/E4A4.xml create mode 100644 data/Petaluma/E4A5.xml create mode 100644 data/Petaluma/E4A6.xml create mode 100644 data/Petaluma/E4A7.xml create mode 100644 data/Petaluma/E4A8.xml create mode 100644 data/Petaluma/E4A9.xml create mode 100644 data/Petaluma/E4AA.xml create mode 100644 data/Petaluma/E4AB.xml create mode 100644 data/Petaluma/E4AC.xml create mode 100644 data/Petaluma/E4AD.xml create mode 100644 data/Petaluma/E4AE.xml create mode 100644 data/Petaluma/E4AF.xml create mode 100644 data/Petaluma/E4B0.xml create mode 100644 data/Petaluma/E4B1.xml create mode 100644 data/Petaluma/E4B2.xml create mode 100644 data/Petaluma/E4B3.xml create mode 100644 data/Petaluma/E4B4.xml create mode 100644 data/Petaluma/E4B5.xml create mode 100644 data/Petaluma/E4B6.xml create mode 100644 data/Petaluma/E4B7.xml create mode 100644 data/Petaluma/E4B8.xml create mode 100644 data/Petaluma/E4B9.xml create mode 100644 data/Petaluma/E4BA.xml create mode 100644 data/Petaluma/E4BB.xml create mode 100644 data/Petaluma/E4BC.xml create mode 100644 data/Petaluma/E4BD.xml create mode 100644 data/Petaluma/E4C0.xml create mode 100644 data/Petaluma/E4C1.xml create mode 100644 data/Petaluma/E4C2.xml create mode 100644 data/Petaluma/E4C3.xml create mode 100644 data/Petaluma/E4C4.xml create mode 100644 data/Petaluma/E4C5.xml create mode 100644 data/Petaluma/E4C6.xml create mode 100644 data/Petaluma/E4C7.xml create mode 100644 data/Petaluma/E4C8.xml create mode 100644 data/Petaluma/E4C9.xml create mode 100644 data/Petaluma/E4CE.xml create mode 100644 data/Petaluma/E4E0.xml create mode 100644 data/Petaluma/E4E1.xml create mode 100644 data/Petaluma/E4E2.xml create mode 100644 data/Petaluma/E4E3.xml create mode 100644 data/Petaluma/E4E4.xml create mode 100644 data/Petaluma/E4E5.xml create mode 100644 data/Petaluma/E4E6.xml create mode 100644 data/Petaluma/E4E7.xml create mode 100644 data/Petaluma/E4E8.xml create mode 100644 data/Petaluma/E4E9.xml create mode 100644 data/Petaluma/E4EA.xml create mode 100644 data/Petaluma/E4EB.xml create mode 100644 data/Petaluma/E4EC.xml create mode 100644 data/Petaluma/E4ED.xml create mode 100644 data/Petaluma/E4F2.xml create mode 100644 data/Petaluma/E4F6.xml create mode 100644 data/Petaluma/E500.xml create mode 100644 data/Petaluma/E501.xml create mode 100644 data/Petaluma/E502.xml create mode 100644 data/Petaluma/E503.xml create mode 100644 data/Petaluma/E504.xml create mode 100644 data/Petaluma/E505.xml create mode 100644 data/Petaluma/E510.xml create mode 100644 data/Petaluma/E511.xml create mode 100644 data/Petaluma/E512.xml create mode 100644 data/Petaluma/E513.xml create mode 100644 data/Petaluma/E514.xml create mode 100644 data/Petaluma/E515.xml create mode 100644 data/Petaluma/E516.xml create mode 100644 data/Petaluma/E517.xml create mode 100644 data/Petaluma/E518.xml create mode 100644 data/Petaluma/E519.xml create mode 100644 data/Petaluma/E51A.xml create mode 100644 data/Petaluma/E51B.xml create mode 100644 data/Petaluma/E51C.xml create mode 100644 data/Petaluma/E51D.xml create mode 100644 data/Petaluma/E51E.xml create mode 100644 data/Petaluma/E520.xml create mode 100644 data/Petaluma/E521.xml create mode 100644 data/Petaluma/E522.xml create mode 100644 data/Petaluma/E523.xml create mode 100644 data/Petaluma/E524.xml create mode 100644 data/Petaluma/E525.xml create mode 100644 data/Petaluma/E526.xml create mode 100644 data/Petaluma/E527.xml create mode 100644 data/Petaluma/E528.xml create mode 100644 data/Petaluma/E529.xml create mode 100644 data/Petaluma/E52A.xml create mode 100644 data/Petaluma/E52B.xml create mode 100644 data/Petaluma/E52C.xml create mode 100644 data/Petaluma/E52D.xml create mode 100644 data/Petaluma/E52E.xml create mode 100644 data/Petaluma/E52F.xml create mode 100644 data/Petaluma/E530.xml create mode 100644 data/Petaluma/E531.xml create mode 100644 data/Petaluma/E532.xml create mode 100644 data/Petaluma/E533.xml create mode 100644 data/Petaluma/E534.xml create mode 100644 data/Petaluma/E535.xml create mode 100644 data/Petaluma/E536.xml create mode 100644 data/Petaluma/E537.xml create mode 100644 data/Petaluma/E538.xml create mode 100644 data/Petaluma/E539.xml create mode 100644 data/Petaluma/E53A.xml create mode 100644 data/Petaluma/E53B.xml create mode 100644 data/Petaluma/E53C.xml create mode 100644 data/Petaluma/E53D.xml create mode 100644 data/Petaluma/E566.xml create mode 100644 data/Petaluma/E567.xml create mode 100644 data/Petaluma/E568.xml create mode 100644 data/Petaluma/E569.xml create mode 100644 data/Petaluma/E56A.xml create mode 100644 data/Petaluma/E56B.xml create mode 100644 data/Petaluma/E56C.xml create mode 100644 data/Petaluma/E56D.xml create mode 100644 data/Petaluma/E56E.xml create mode 100644 data/Petaluma/E56F.xml create mode 100644 data/Petaluma/E583.xml create mode 100644 data/Petaluma/E587.xml create mode 100644 data/Petaluma/E5B0.xml create mode 100644 data/Petaluma/E5B1.xml create mode 100644 data/Petaluma/E5B2.xml create mode 100644 data/Petaluma/E5B3.xml create mode 100644 data/Petaluma/E5B4.xml create mode 100644 data/Petaluma/E5B5.xml create mode 100644 data/Petaluma/E5B6.xml create mode 100644 data/Petaluma/E5B7.xml create mode 100644 data/Petaluma/E5B8.xml create mode 100644 data/Petaluma/E5B9.xml create mode 100644 data/Petaluma/E5BA.xml create mode 100644 data/Petaluma/E5BB.xml create mode 100644 data/Petaluma/E5BC.xml create mode 100644 data/Petaluma/E5BD.xml create mode 100644 data/Petaluma/E5BE.xml create mode 100644 data/Petaluma/E5BF.xml create mode 100644 data/Petaluma/E5C0.xml create mode 100644 data/Petaluma/E5C1.xml create mode 100644 data/Petaluma/E5C2.xml create mode 100644 data/Petaluma/E5C3.xml create mode 100644 data/Petaluma/E5C4.xml create mode 100644 data/Petaluma/E5C5.xml create mode 100644 data/Petaluma/E5C6.xml create mode 100644 data/Petaluma/E5C7.xml create mode 100644 data/Petaluma/E5C8.xml create mode 100644 data/Petaluma/E5E5.xml create mode 100644 data/Petaluma/E5E6.xml create mode 100644 data/Petaluma/E5E7.xml create mode 100644 data/Petaluma/E610.xml create mode 100644 data/Petaluma/E611.xml create mode 100644 data/Petaluma/E612.xml create mode 100644 data/Petaluma/E613.xml create mode 100644 data/Petaluma/E614.xml create mode 100644 data/Petaluma/E630.xml create mode 100644 data/Petaluma/E631.xml create mode 100644 data/Petaluma/E632.xml create mode 100644 data/Petaluma/E633.xml create mode 100644 data/Petaluma/E638.xml create mode 100644 data/Petaluma/E645.xml create mode 100644 data/Petaluma/E650.xml create mode 100644 data/Petaluma/E651.xml create mode 100644 data/Petaluma/E655.xml create mode 100644 data/Petaluma/E659.xml create mode 100644 data/Petaluma/E65A.xml create mode 100644 data/Petaluma/E880.xml create mode 100644 data/Petaluma/E881.xml create mode 100644 data/Petaluma/E882.xml create mode 100644 data/Petaluma/E883.xml create mode 100644 data/Petaluma/E884.xml create mode 100644 data/Petaluma/E885.xml create mode 100644 data/Petaluma/E886.xml create mode 100644 data/Petaluma/E887.xml create mode 100644 data/Petaluma/E888.xml create mode 100644 data/Petaluma/E889.xml create mode 100644 data/Petaluma/E88A.xml create mode 100644 data/Petaluma/E938.xml create mode 100644 data/Petaluma/E939.xml create mode 100644 data/Petaluma/E93C.xml create mode 100644 data/Petaluma/E93D.xml create mode 100644 data/Petaluma/E93E.xml create mode 100644 data/Petaluma/E93F.xml create mode 100644 data/Petaluma/E949.xml create mode 100644 data/Petaluma/E94A.xml create mode 100644 data/Petaluma/E94B.xml create mode 100644 data/Petaluma/E94C.xml create mode 100644 data/Petaluma/EAA4.xml create mode 100644 data/Petaluma/EAA9.xml create mode 100644 data/Petaluma/EAAA.xml create mode 100644 data/Petaluma/EAAD.xml create mode 100644 data/Petaluma/EAAE.xml create mode 100644 data/Petaluma/EAAF.xml diff --git a/data/Bravura.xml b/data/Bravura.xml new file mode 100644 index 00000000000..3eda0822bcc --- /dev/null +++ b/data/Bravura.xml @@ -0,0 +1,696 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/Bravura/E000.xml b/data/Bravura/E000.xml new file mode 100644 index 00000000000..af9ef14233a --- /dev/null +++ b/data/Bravura/E000.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E003.xml b/data/Bravura/E003.xml new file mode 100644 index 00000000000..56652afb5b0 --- /dev/null +++ b/data/Bravura/E003.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E004.xml b/data/Bravura/E004.xml new file mode 100644 index 00000000000..73212515614 --- /dev/null +++ b/data/Bravura/E004.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E043.xml b/data/Bravura/E043.xml new file mode 100644 index 00000000000..0d2a0ddc1c3 --- /dev/null +++ b/data/Bravura/E043.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E044.xml b/data/Bravura/E044.xml new file mode 100644 index 00000000000..07155874aa2 --- /dev/null +++ b/data/Bravura/E044.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E045.xml b/data/Bravura/E045.xml new file mode 100644 index 00000000000..040673e2f9a --- /dev/null +++ b/data/Bravura/E045.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E046.xml b/data/Bravura/E046.xml new file mode 100644 index 00000000000..9579df12be5 --- /dev/null +++ b/data/Bravura/E046.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E047.xml b/data/Bravura/E047.xml new file mode 100644 index 00000000000..b868edbb77b --- /dev/null +++ b/data/Bravura/E047.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E048.xml b/data/Bravura/E048.xml new file mode 100644 index 00000000000..67280bb3ef7 --- /dev/null +++ b/data/Bravura/E048.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E049.xml b/data/Bravura/E049.xml new file mode 100644 index 00000000000..420d9613289 --- /dev/null +++ b/data/Bravura/E049.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E04B.xml b/data/Bravura/E04B.xml new file mode 100644 index 00000000000..ead6658bec9 --- /dev/null +++ b/data/Bravura/E04B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E050.xml b/data/Bravura/E050.xml new file mode 100644 index 00000000000..ccfddd927b6 --- /dev/null +++ b/data/Bravura/E050.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E051.xml b/data/Bravura/E051.xml new file mode 100644 index 00000000000..c6655959414 --- /dev/null +++ b/data/Bravura/E051.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E052.xml b/data/Bravura/E052.xml new file mode 100644 index 00000000000..7658cd92b0a --- /dev/null +++ b/data/Bravura/E052.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E053.xml b/data/Bravura/E053.xml new file mode 100644 index 00000000000..6e297969e0d --- /dev/null +++ b/data/Bravura/E053.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E054.xml b/data/Bravura/E054.xml new file mode 100644 index 00000000000..5f30eff5670 --- /dev/null +++ b/data/Bravura/E054.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E055.xml b/data/Bravura/E055.xml new file mode 100644 index 00000000000..c6d4fd4bee7 --- /dev/null +++ b/data/Bravura/E055.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E056.xml b/data/Bravura/E056.xml new file mode 100644 index 00000000000..4b60286cd65 --- /dev/null +++ b/data/Bravura/E056.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E05C.xml b/data/Bravura/E05C.xml new file mode 100644 index 00000000000..f3f804ce95c --- /dev/null +++ b/data/Bravura/E05C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E05D.xml b/data/Bravura/E05D.xml new file mode 100644 index 00000000000..41ff54bbbaf --- /dev/null +++ b/data/Bravura/E05D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E062.xml b/data/Bravura/E062.xml new file mode 100644 index 00000000000..67df9d697cb --- /dev/null +++ b/data/Bravura/E062.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E063.xml b/data/Bravura/E063.xml new file mode 100644 index 00000000000..32f3833e003 --- /dev/null +++ b/data/Bravura/E063.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E064.xml b/data/Bravura/E064.xml new file mode 100644 index 00000000000..c951c3a9a6f --- /dev/null +++ b/data/Bravura/E064.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E065.xml b/data/Bravura/E065.xml new file mode 100644 index 00000000000..c3bb2a8b42b --- /dev/null +++ b/data/Bravura/E065.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E066.xml b/data/Bravura/E066.xml new file mode 100644 index 00000000000..7bb811271c9 --- /dev/null +++ b/data/Bravura/E066.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E069.xml b/data/Bravura/E069.xml new file mode 100644 index 00000000000..890982c0959 --- /dev/null +++ b/data/Bravura/E069.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E06A.xml b/data/Bravura/E06A.xml new file mode 100644 index 00000000000..f29c0e2d7a4 --- /dev/null +++ b/data/Bravura/E06A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E073.xml b/data/Bravura/E073.xml new file mode 100644 index 00000000000..1e1ce3533ee --- /dev/null +++ b/data/Bravura/E073.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E074.xml b/data/Bravura/E074.xml new file mode 100644 index 00000000000..ad2f016d62e --- /dev/null +++ b/data/Bravura/E074.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E075.xml b/data/Bravura/E075.xml new file mode 100644 index 00000000000..a2b77361468 --- /dev/null +++ b/data/Bravura/E075.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E076.xml b/data/Bravura/E076.xml new file mode 100644 index 00000000000..65624d81761 --- /dev/null +++ b/data/Bravura/E076.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E077.xml b/data/Bravura/E077.xml new file mode 100644 index 00000000000..7a9ebeba111 --- /dev/null +++ b/data/Bravura/E077.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E080.xml b/data/Bravura/E080.xml new file mode 100644 index 00000000000..6a1a20e08ec --- /dev/null +++ b/data/Bravura/E080.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E081.xml b/data/Bravura/E081.xml new file mode 100644 index 00000000000..0479059b91a --- /dev/null +++ b/data/Bravura/E081.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E082.xml b/data/Bravura/E082.xml new file mode 100644 index 00000000000..f98fce76cf7 --- /dev/null +++ b/data/Bravura/E082.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E083.xml b/data/Bravura/E083.xml new file mode 100644 index 00000000000..8c1a05cab4a --- /dev/null +++ b/data/Bravura/E083.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E084.xml b/data/Bravura/E084.xml new file mode 100644 index 00000000000..20aa2db5523 --- /dev/null +++ b/data/Bravura/E084.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E085.xml b/data/Bravura/E085.xml new file mode 100644 index 00000000000..b8f1995417e --- /dev/null +++ b/data/Bravura/E085.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E086.xml b/data/Bravura/E086.xml new file mode 100644 index 00000000000..f915e89514d --- /dev/null +++ b/data/Bravura/E086.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E087.xml b/data/Bravura/E087.xml new file mode 100644 index 00000000000..15af3653bcb --- /dev/null +++ b/data/Bravura/E087.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E088.xml b/data/Bravura/E088.xml new file mode 100644 index 00000000000..cb63489f735 --- /dev/null +++ b/data/Bravura/E088.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E089.xml b/data/Bravura/E089.xml new file mode 100644 index 00000000000..a7cac3baba5 --- /dev/null +++ b/data/Bravura/E089.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E08A.xml b/data/Bravura/E08A.xml new file mode 100644 index 00000000000..e1d54494648 --- /dev/null +++ b/data/Bravura/E08A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E08B.xml b/data/Bravura/E08B.xml new file mode 100644 index 00000000000..a7b1d28b1a8 --- /dev/null +++ b/data/Bravura/E08B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E08C.xml b/data/Bravura/E08C.xml new file mode 100644 index 00000000000..30ec2bc3e0c --- /dev/null +++ b/data/Bravura/E08C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E08D.xml b/data/Bravura/E08D.xml new file mode 100644 index 00000000000..acbd6889d29 --- /dev/null +++ b/data/Bravura/E08D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E08E.xml b/data/Bravura/E08E.xml new file mode 100644 index 00000000000..0ae7339fa45 --- /dev/null +++ b/data/Bravura/E08E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E08F.xml b/data/Bravura/E08F.xml new file mode 100644 index 00000000000..109161b45e1 --- /dev/null +++ b/data/Bravura/E08F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E090.xml b/data/Bravura/E090.xml new file mode 100644 index 00000000000..3c1734cd81b --- /dev/null +++ b/data/Bravura/E090.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E091.xml b/data/Bravura/E091.xml new file mode 100644 index 00000000000..66e1d6d7a5d --- /dev/null +++ b/data/Bravura/E091.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E092.xml b/data/Bravura/E092.xml new file mode 100644 index 00000000000..1537e653942 --- /dev/null +++ b/data/Bravura/E092.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E093.xml b/data/Bravura/E093.xml new file mode 100644 index 00000000000..45df32a3218 --- /dev/null +++ b/data/Bravura/E093.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E094.xml b/data/Bravura/E094.xml new file mode 100644 index 00000000000..524148c0549 --- /dev/null +++ b/data/Bravura/E094.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E095.xml b/data/Bravura/E095.xml new file mode 100644 index 00000000000..14d13173838 --- /dev/null +++ b/data/Bravura/E095.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0A0.xml b/data/Bravura/E0A0.xml new file mode 100644 index 00000000000..9ce35f126e2 --- /dev/null +++ b/data/Bravura/E0A0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0A1.xml b/data/Bravura/E0A1.xml new file mode 100644 index 00000000000..a9b054526f4 --- /dev/null +++ b/data/Bravura/E0A1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0A2.xml b/data/Bravura/E0A2.xml new file mode 100644 index 00000000000..5c4da6fce28 --- /dev/null +++ b/data/Bravura/E0A2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0A3.xml b/data/Bravura/E0A3.xml new file mode 100644 index 00000000000..a667856bd8b --- /dev/null +++ b/data/Bravura/E0A3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0A4.xml b/data/Bravura/E0A4.xml new file mode 100644 index 00000000000..6cffcc920af --- /dev/null +++ b/data/Bravura/E0A4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0A5.xml b/data/Bravura/E0A5.xml new file mode 100644 index 00000000000..d4eec1c1f60 --- /dev/null +++ b/data/Bravura/E0A5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0A9.xml b/data/Bravura/E0A9.xml new file mode 100644 index 00000000000..6ec70417a2f --- /dev/null +++ b/data/Bravura/E0A9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0AF.xml b/data/Bravura/E0AF.xml new file mode 100644 index 00000000000..c353b2855d2 --- /dev/null +++ b/data/Bravura/E0AF.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0B5.xml b/data/Bravura/E0B5.xml new file mode 100644 index 00000000000..b183401e5e2 --- /dev/null +++ b/data/Bravura/E0B5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0B6.xml b/data/Bravura/E0B6.xml new file mode 100644 index 00000000000..9d6121de6fa --- /dev/null +++ b/data/Bravura/E0B6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0B7.xml b/data/Bravura/E0B7.xml new file mode 100644 index 00000000000..ba9c7f9b058 --- /dev/null +++ b/data/Bravura/E0B7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0D9.xml b/data/Bravura/E0D9.xml new file mode 100644 index 00000000000..d48554a59d7 --- /dev/null +++ b/data/Bravura/E0D9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0DA.xml b/data/Bravura/E0DA.xml new file mode 100644 index 00000000000..5f3c6440114 --- /dev/null +++ b/data/Bravura/E0DA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0DB.xml b/data/Bravura/E0DB.xml new file mode 100644 index 00000000000..3ff2fe40a4f --- /dev/null +++ b/data/Bravura/E0DB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0DC.xml b/data/Bravura/E0DC.xml new file mode 100644 index 00000000000..dc917248c73 --- /dev/null +++ b/data/Bravura/E0DC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0DD.xml b/data/Bravura/E0DD.xml new file mode 100644 index 00000000000..20bc604d1e6 --- /dev/null +++ b/data/Bravura/E0DD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0DE.xml b/data/Bravura/E0DE.xml new file mode 100644 index 00000000000..f733e4f4ba3 --- /dev/null +++ b/data/Bravura/E0DE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0F5.xml b/data/Bravura/E0F5.xml new file mode 100644 index 00000000000..92449cd6086 --- /dev/null +++ b/data/Bravura/E0F5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0F6.xml b/data/Bravura/E0F6.xml new file mode 100644 index 00000000000..31823b6b69a --- /dev/null +++ b/data/Bravura/E0F6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E0FA.xml b/data/Bravura/E0FA.xml new file mode 100644 index 00000000000..dab725f66ab --- /dev/null +++ b/data/Bravura/E0FA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E101.xml b/data/Bravura/E101.xml new file mode 100644 index 00000000000..41fc2858ea9 --- /dev/null +++ b/data/Bravura/E101.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E102.xml b/data/Bravura/E102.xml new file mode 100644 index 00000000000..774c30eb6bb --- /dev/null +++ b/data/Bravura/E102.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E103.xml b/data/Bravura/E103.xml new file mode 100644 index 00000000000..9e5d42ebe2b --- /dev/null +++ b/data/Bravura/E103.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E220.xml b/data/Bravura/E220.xml new file mode 100644 index 00000000000..a90d1e3e120 --- /dev/null +++ b/data/Bravura/E220.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E221.xml b/data/Bravura/E221.xml new file mode 100644 index 00000000000..66c83c4ad49 --- /dev/null +++ b/data/Bravura/E221.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E222.xml b/data/Bravura/E222.xml new file mode 100644 index 00000000000..d0b591a6071 --- /dev/null +++ b/data/Bravura/E222.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E223.xml b/data/Bravura/E223.xml new file mode 100644 index 00000000000..aab4cd5f418 --- /dev/null +++ b/data/Bravura/E223.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E224.xml b/data/Bravura/E224.xml new file mode 100644 index 00000000000..6e0edd0953b --- /dev/null +++ b/data/Bravura/E224.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E22A.xml b/data/Bravura/E22A.xml new file mode 100644 index 00000000000..5be7d962bb0 --- /dev/null +++ b/data/Bravura/E22A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E240.xml b/data/Bravura/E240.xml new file mode 100644 index 00000000000..cf817688d65 --- /dev/null +++ b/data/Bravura/E240.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E241.xml b/data/Bravura/E241.xml new file mode 100644 index 00000000000..2aa4967dbec --- /dev/null +++ b/data/Bravura/E241.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E242.xml b/data/Bravura/E242.xml new file mode 100644 index 00000000000..fbc6f3a5ce8 --- /dev/null +++ b/data/Bravura/E242.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E243.xml b/data/Bravura/E243.xml new file mode 100644 index 00000000000..7bf7f3bf3c3 --- /dev/null +++ b/data/Bravura/E243.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E244.xml b/data/Bravura/E244.xml new file mode 100644 index 00000000000..2637f5b77ce --- /dev/null +++ b/data/Bravura/E244.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E245.xml b/data/Bravura/E245.xml new file mode 100644 index 00000000000..7cc156153a4 --- /dev/null +++ b/data/Bravura/E245.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E246.xml b/data/Bravura/E246.xml new file mode 100644 index 00000000000..8d090ee8a4b --- /dev/null +++ b/data/Bravura/E246.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E247.xml b/data/Bravura/E247.xml new file mode 100644 index 00000000000..e098a251b7d --- /dev/null +++ b/data/Bravura/E247.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E248.xml b/data/Bravura/E248.xml new file mode 100644 index 00000000000..7ef7aa4b738 --- /dev/null +++ b/data/Bravura/E248.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E249.xml b/data/Bravura/E249.xml new file mode 100644 index 00000000000..ff47fbefabf --- /dev/null +++ b/data/Bravura/E249.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E24A.xml b/data/Bravura/E24A.xml new file mode 100644 index 00000000000..116123fc385 --- /dev/null +++ b/data/Bravura/E24A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E24B.xml b/data/Bravura/E24B.xml new file mode 100644 index 00000000000..6042622cffd --- /dev/null +++ b/data/Bravura/E24B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E24C.xml b/data/Bravura/E24C.xml new file mode 100644 index 00000000000..20fa639cccb --- /dev/null +++ b/data/Bravura/E24C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E24D.xml b/data/Bravura/E24D.xml new file mode 100644 index 00000000000..88574c4f406 --- /dev/null +++ b/data/Bravura/E24D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E24E.xml b/data/Bravura/E24E.xml new file mode 100644 index 00000000000..f36bae7a638 --- /dev/null +++ b/data/Bravura/E24E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E24F.xml b/data/Bravura/E24F.xml new file mode 100644 index 00000000000..3b075461e04 --- /dev/null +++ b/data/Bravura/E24F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E260.xml b/data/Bravura/E260.xml new file mode 100644 index 00000000000..fb0200ab823 --- /dev/null +++ b/data/Bravura/E260.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E261.xml b/data/Bravura/E261.xml new file mode 100644 index 00000000000..1995a83789a --- /dev/null +++ b/data/Bravura/E261.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E262.xml b/data/Bravura/E262.xml new file mode 100644 index 00000000000..95bb9f1b2d0 --- /dev/null +++ b/data/Bravura/E262.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E263.xml b/data/Bravura/E263.xml new file mode 100644 index 00000000000..a065aa25d25 --- /dev/null +++ b/data/Bravura/E263.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E264.xml b/data/Bravura/E264.xml new file mode 100644 index 00000000000..6e8b6512bc4 --- /dev/null +++ b/data/Bravura/E264.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E265.xml b/data/Bravura/E265.xml new file mode 100644 index 00000000000..cfca0e3a0ce --- /dev/null +++ b/data/Bravura/E265.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E266.xml b/data/Bravura/E266.xml new file mode 100644 index 00000000000..105d5a48bed --- /dev/null +++ b/data/Bravura/E266.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E267.xml b/data/Bravura/E267.xml new file mode 100644 index 00000000000..4cd0049c5a6 --- /dev/null +++ b/data/Bravura/E267.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E268.xml b/data/Bravura/E268.xml new file mode 100644 index 00000000000..dcfd8ec246c --- /dev/null +++ b/data/Bravura/E268.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E269.xml b/data/Bravura/E269.xml new file mode 100644 index 00000000000..93489e36c81 --- /dev/null +++ b/data/Bravura/E269.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E26A.xml b/data/Bravura/E26A.xml new file mode 100644 index 00000000000..5fdc48f968e --- /dev/null +++ b/data/Bravura/E26A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E26B.xml b/data/Bravura/E26B.xml new file mode 100644 index 00000000000..ba21df9adc7 --- /dev/null +++ b/data/Bravura/E26B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E26C.xml b/data/Bravura/E26C.xml new file mode 100644 index 00000000000..11c3255d0f9 --- /dev/null +++ b/data/Bravura/E26C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E26D.xml b/data/Bravura/E26D.xml new file mode 100644 index 00000000000..b17eec2af98 --- /dev/null +++ b/data/Bravura/E26D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E270.xml b/data/Bravura/E270.xml new file mode 100644 index 00000000000..84960e562d7 --- /dev/null +++ b/data/Bravura/E270.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E271.xml b/data/Bravura/E271.xml new file mode 100644 index 00000000000..187d02bf2e6 --- /dev/null +++ b/data/Bravura/E271.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E272.xml b/data/Bravura/E272.xml new file mode 100644 index 00000000000..d4c99d6f066 --- /dev/null +++ b/data/Bravura/E272.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E273.xml b/data/Bravura/E273.xml new file mode 100644 index 00000000000..1524e27d141 --- /dev/null +++ b/data/Bravura/E273.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E274.xml b/data/Bravura/E274.xml new file mode 100644 index 00000000000..d95265d905b --- /dev/null +++ b/data/Bravura/E274.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E275.xml b/data/Bravura/E275.xml new file mode 100644 index 00000000000..04ad6ae645a --- /dev/null +++ b/data/Bravura/E275.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E280.xml b/data/Bravura/E280.xml new file mode 100644 index 00000000000..71e35bba405 --- /dev/null +++ b/data/Bravura/E280.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E281.xml b/data/Bravura/E281.xml new file mode 100644 index 00000000000..feb9dddb400 --- /dev/null +++ b/data/Bravura/E281.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E282.xml b/data/Bravura/E282.xml new file mode 100644 index 00000000000..bf1ae8a82cf --- /dev/null +++ b/data/Bravura/E282.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E283.xml b/data/Bravura/E283.xml new file mode 100644 index 00000000000..d47a066decf --- /dev/null +++ b/data/Bravura/E283.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E440.xml b/data/Bravura/E440.xml new file mode 100644 index 00000000000..9cb9245a91c --- /dev/null +++ b/data/Bravura/E440.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E441.xml b/data/Bravura/E441.xml new file mode 100644 index 00000000000..0e103eb2a0a --- /dev/null +++ b/data/Bravura/E441.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E442.xml b/data/Bravura/E442.xml new file mode 100644 index 00000000000..e65ebc48951 --- /dev/null +++ b/data/Bravura/E442.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E443.xml b/data/Bravura/E443.xml new file mode 100644 index 00000000000..0ba9d08c755 --- /dev/null +++ b/data/Bravura/E443.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E444.xml b/data/Bravura/E444.xml new file mode 100644 index 00000000000..9c240b5d028 --- /dev/null +++ b/data/Bravura/E444.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E445.xml b/data/Bravura/E445.xml new file mode 100644 index 00000000000..28cc00babd1 --- /dev/null +++ b/data/Bravura/E445.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E446.xml b/data/Bravura/E446.xml new file mode 100644 index 00000000000..3ff4c9c37b0 --- /dev/null +++ b/data/Bravura/E446.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E447.xml b/data/Bravura/E447.xml new file mode 100644 index 00000000000..8e1c521d568 --- /dev/null +++ b/data/Bravura/E447.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4A0.xml b/data/Bravura/E4A0.xml new file mode 100644 index 00000000000..fbddfea45f6 --- /dev/null +++ b/data/Bravura/E4A0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4A1.xml b/data/Bravura/E4A1.xml new file mode 100644 index 00000000000..5c92d74c9fb --- /dev/null +++ b/data/Bravura/E4A1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4A2.xml b/data/Bravura/E4A2.xml new file mode 100644 index 00000000000..93a243e4ce5 --- /dev/null +++ b/data/Bravura/E4A2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4A3.xml b/data/Bravura/E4A3.xml new file mode 100644 index 00000000000..631b916659d --- /dev/null +++ b/data/Bravura/E4A3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4A4.xml b/data/Bravura/E4A4.xml new file mode 100644 index 00000000000..ef41b08d1f6 --- /dev/null +++ b/data/Bravura/E4A4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4A5.xml b/data/Bravura/E4A5.xml new file mode 100644 index 00000000000..d2d48d212d6 --- /dev/null +++ b/data/Bravura/E4A5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4A6.xml b/data/Bravura/E4A6.xml new file mode 100644 index 00000000000..3c4b5698129 --- /dev/null +++ b/data/Bravura/E4A6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4A7.xml b/data/Bravura/E4A7.xml new file mode 100644 index 00000000000..d6949e92740 --- /dev/null +++ b/data/Bravura/E4A7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4A8.xml b/data/Bravura/E4A8.xml new file mode 100644 index 00000000000..a7cd9748811 --- /dev/null +++ b/data/Bravura/E4A8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4A9.xml b/data/Bravura/E4A9.xml new file mode 100644 index 00000000000..c705104974e --- /dev/null +++ b/data/Bravura/E4A9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4AA.xml b/data/Bravura/E4AA.xml new file mode 100644 index 00000000000..7f8a0241ac7 --- /dev/null +++ b/data/Bravura/E4AA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4AB.xml b/data/Bravura/E4AB.xml new file mode 100644 index 00000000000..f4173bef9bf --- /dev/null +++ b/data/Bravura/E4AB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4AC.xml b/data/Bravura/E4AC.xml new file mode 100644 index 00000000000..752cb5864df --- /dev/null +++ b/data/Bravura/E4AC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4AD.xml b/data/Bravura/E4AD.xml new file mode 100644 index 00000000000..76b90995038 --- /dev/null +++ b/data/Bravura/E4AD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4AE.xml b/data/Bravura/E4AE.xml new file mode 100644 index 00000000000..087921517b9 --- /dev/null +++ b/data/Bravura/E4AE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4AF.xml b/data/Bravura/E4AF.xml new file mode 100644 index 00000000000..4bc3c2582c1 --- /dev/null +++ b/data/Bravura/E4AF.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4B0.xml b/data/Bravura/E4B0.xml new file mode 100644 index 00000000000..af3973bc5de --- /dev/null +++ b/data/Bravura/E4B0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4B1.xml b/data/Bravura/E4B1.xml new file mode 100644 index 00000000000..c5f59135f9d --- /dev/null +++ b/data/Bravura/E4B1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4B2.xml b/data/Bravura/E4B2.xml new file mode 100644 index 00000000000..9af0c199517 --- /dev/null +++ b/data/Bravura/E4B2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4B3.xml b/data/Bravura/E4B3.xml new file mode 100644 index 00000000000..54136f73eb6 --- /dev/null +++ b/data/Bravura/E4B3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4B4.xml b/data/Bravura/E4B4.xml new file mode 100644 index 00000000000..8a62f3bfe7a --- /dev/null +++ b/data/Bravura/E4B4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4B5.xml b/data/Bravura/E4B5.xml new file mode 100644 index 00000000000..a61a2a9b0cc --- /dev/null +++ b/data/Bravura/E4B5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4B6.xml b/data/Bravura/E4B6.xml new file mode 100644 index 00000000000..908cda16b69 --- /dev/null +++ b/data/Bravura/E4B6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4B7.xml b/data/Bravura/E4B7.xml new file mode 100644 index 00000000000..0068e03b19c --- /dev/null +++ b/data/Bravura/E4B7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4B8.xml b/data/Bravura/E4B8.xml new file mode 100644 index 00000000000..0dd524674df --- /dev/null +++ b/data/Bravura/E4B8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4B9.xml b/data/Bravura/E4B9.xml new file mode 100644 index 00000000000..66858cb299d --- /dev/null +++ b/data/Bravura/E4B9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4BA.xml b/data/Bravura/E4BA.xml new file mode 100644 index 00000000000..b16370ab9fc --- /dev/null +++ b/data/Bravura/E4BA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4BB.xml b/data/Bravura/E4BB.xml new file mode 100644 index 00000000000..57f20c1d050 --- /dev/null +++ b/data/Bravura/E4BB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4BC.xml b/data/Bravura/E4BC.xml new file mode 100644 index 00000000000..4d3e3debd1f --- /dev/null +++ b/data/Bravura/E4BC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4BD.xml b/data/Bravura/E4BD.xml new file mode 100644 index 00000000000..e65edf006ab --- /dev/null +++ b/data/Bravura/E4BD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4C0.xml b/data/Bravura/E4C0.xml new file mode 100644 index 00000000000..aae6f3184cc --- /dev/null +++ b/data/Bravura/E4C0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4C1.xml b/data/Bravura/E4C1.xml new file mode 100644 index 00000000000..a78d255c783 --- /dev/null +++ b/data/Bravura/E4C1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4C2.xml b/data/Bravura/E4C2.xml new file mode 100644 index 00000000000..39c80df7850 --- /dev/null +++ b/data/Bravura/E4C2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4C3.xml b/data/Bravura/E4C3.xml new file mode 100644 index 00000000000..b81913fb196 --- /dev/null +++ b/data/Bravura/E4C3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4C4.xml b/data/Bravura/E4C4.xml new file mode 100644 index 00000000000..1954b290a3d --- /dev/null +++ b/data/Bravura/E4C4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4C5.xml b/data/Bravura/E4C5.xml new file mode 100644 index 00000000000..a7a20e43e39 --- /dev/null +++ b/data/Bravura/E4C5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4C6.xml b/data/Bravura/E4C6.xml new file mode 100644 index 00000000000..7ec4c8ed085 --- /dev/null +++ b/data/Bravura/E4C6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4C7.xml b/data/Bravura/E4C7.xml new file mode 100644 index 00000000000..35ea9f08464 --- /dev/null +++ b/data/Bravura/E4C7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4C8.xml b/data/Bravura/E4C8.xml new file mode 100644 index 00000000000..24dc8c894f9 --- /dev/null +++ b/data/Bravura/E4C8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4C9.xml b/data/Bravura/E4C9.xml new file mode 100644 index 00000000000..cddd389c759 --- /dev/null +++ b/data/Bravura/E4C9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4CE.xml b/data/Bravura/E4CE.xml new file mode 100644 index 00000000000..2e8b2199538 --- /dev/null +++ b/data/Bravura/E4CE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4E0.xml b/data/Bravura/E4E0.xml new file mode 100644 index 00000000000..d9c828db189 --- /dev/null +++ b/data/Bravura/E4E0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4E1.xml b/data/Bravura/E4E1.xml new file mode 100644 index 00000000000..f709217ee67 --- /dev/null +++ b/data/Bravura/E4E1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4E2.xml b/data/Bravura/E4E2.xml new file mode 100644 index 00000000000..e4c4376fa2a --- /dev/null +++ b/data/Bravura/E4E2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4E3.xml b/data/Bravura/E4E3.xml new file mode 100644 index 00000000000..26a83b682af --- /dev/null +++ b/data/Bravura/E4E3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4E4.xml b/data/Bravura/E4E4.xml new file mode 100644 index 00000000000..4dcc53d8d16 --- /dev/null +++ b/data/Bravura/E4E4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4E5.xml b/data/Bravura/E4E5.xml new file mode 100644 index 00000000000..d75a9195eec --- /dev/null +++ b/data/Bravura/E4E5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4E6.xml b/data/Bravura/E4E6.xml new file mode 100644 index 00000000000..6067d79e519 --- /dev/null +++ b/data/Bravura/E4E6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4E7.xml b/data/Bravura/E4E7.xml new file mode 100644 index 00000000000..68258f52078 --- /dev/null +++ b/data/Bravura/E4E7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4E8.xml b/data/Bravura/E4E8.xml new file mode 100644 index 00000000000..fd15d73a540 --- /dev/null +++ b/data/Bravura/E4E8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4E9.xml b/data/Bravura/E4E9.xml new file mode 100644 index 00000000000..8c72c5a9f17 --- /dev/null +++ b/data/Bravura/E4E9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4EA.xml b/data/Bravura/E4EA.xml new file mode 100644 index 00000000000..eae0c26784d --- /dev/null +++ b/data/Bravura/E4EA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4EB.xml b/data/Bravura/E4EB.xml new file mode 100644 index 00000000000..8b792a2a771 --- /dev/null +++ b/data/Bravura/E4EB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4EC.xml b/data/Bravura/E4EC.xml new file mode 100644 index 00000000000..d24a6200c87 --- /dev/null +++ b/data/Bravura/E4EC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4ED.xml b/data/Bravura/E4ED.xml new file mode 100644 index 00000000000..49f0bcb406b --- /dev/null +++ b/data/Bravura/E4ED.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4F2.xml b/data/Bravura/E4F2.xml new file mode 100644 index 00000000000..3736b6557ae --- /dev/null +++ b/data/Bravura/E4F2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E4F6.xml b/data/Bravura/E4F6.xml new file mode 100644 index 00000000000..ffe8bcfb731 --- /dev/null +++ b/data/Bravura/E4F6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E500.xml b/data/Bravura/E500.xml new file mode 100644 index 00000000000..69b2770b2e0 --- /dev/null +++ b/data/Bravura/E500.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E501.xml b/data/Bravura/E501.xml new file mode 100644 index 00000000000..1d4216055e4 --- /dev/null +++ b/data/Bravura/E501.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E502.xml b/data/Bravura/E502.xml new file mode 100644 index 00000000000..8011473b1d0 --- /dev/null +++ b/data/Bravura/E502.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E503.xml b/data/Bravura/E503.xml new file mode 100644 index 00000000000..306b9f0d6f1 --- /dev/null +++ b/data/Bravura/E503.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E504.xml b/data/Bravura/E504.xml new file mode 100644 index 00000000000..f6be7400a66 --- /dev/null +++ b/data/Bravura/E504.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E505.xml b/data/Bravura/E505.xml new file mode 100644 index 00000000000..ae3321916d6 --- /dev/null +++ b/data/Bravura/E505.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E510.xml b/data/Bravura/E510.xml new file mode 100644 index 00000000000..851de58a05e --- /dev/null +++ b/data/Bravura/E510.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E511.xml b/data/Bravura/E511.xml new file mode 100644 index 00000000000..d7e2825b011 --- /dev/null +++ b/data/Bravura/E511.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E512.xml b/data/Bravura/E512.xml new file mode 100644 index 00000000000..c6bf33fe976 --- /dev/null +++ b/data/Bravura/E512.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E513.xml b/data/Bravura/E513.xml new file mode 100644 index 00000000000..beea934b4d0 --- /dev/null +++ b/data/Bravura/E513.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E514.xml b/data/Bravura/E514.xml new file mode 100644 index 00000000000..de357e69262 --- /dev/null +++ b/data/Bravura/E514.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E515.xml b/data/Bravura/E515.xml new file mode 100644 index 00000000000..32000e465cc --- /dev/null +++ b/data/Bravura/E515.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E516.xml b/data/Bravura/E516.xml new file mode 100644 index 00000000000..d4346fb3bae --- /dev/null +++ b/data/Bravura/E516.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E517.xml b/data/Bravura/E517.xml new file mode 100644 index 00000000000..3d4afb407a3 --- /dev/null +++ b/data/Bravura/E517.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E518.xml b/data/Bravura/E518.xml new file mode 100644 index 00000000000..cf2cb685b56 --- /dev/null +++ b/data/Bravura/E518.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E519.xml b/data/Bravura/E519.xml new file mode 100644 index 00000000000..dd5875c7cda --- /dev/null +++ b/data/Bravura/E519.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E51A.xml b/data/Bravura/E51A.xml new file mode 100644 index 00000000000..fa0c771758f --- /dev/null +++ b/data/Bravura/E51A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E51B.xml b/data/Bravura/E51B.xml new file mode 100644 index 00000000000..5b7950fcec9 --- /dev/null +++ b/data/Bravura/E51B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E51C.xml b/data/Bravura/E51C.xml new file mode 100644 index 00000000000..01f4040a715 --- /dev/null +++ b/data/Bravura/E51C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E51D.xml b/data/Bravura/E51D.xml new file mode 100644 index 00000000000..9e8b64290cd --- /dev/null +++ b/data/Bravura/E51D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E51E.xml b/data/Bravura/E51E.xml new file mode 100644 index 00000000000..cd396189a7e --- /dev/null +++ b/data/Bravura/E51E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E520.xml b/data/Bravura/E520.xml new file mode 100644 index 00000000000..673fab55680 --- /dev/null +++ b/data/Bravura/E520.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E521.xml b/data/Bravura/E521.xml new file mode 100644 index 00000000000..204b975adc2 --- /dev/null +++ b/data/Bravura/E521.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E522.xml b/data/Bravura/E522.xml new file mode 100644 index 00000000000..08d7af7304f --- /dev/null +++ b/data/Bravura/E522.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E523.xml b/data/Bravura/E523.xml new file mode 100644 index 00000000000..266d653d823 --- /dev/null +++ b/data/Bravura/E523.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E524.xml b/data/Bravura/E524.xml new file mode 100644 index 00000000000..c003a424a16 --- /dev/null +++ b/data/Bravura/E524.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E525.xml b/data/Bravura/E525.xml new file mode 100644 index 00000000000..643d0623b3e --- /dev/null +++ b/data/Bravura/E525.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E526.xml b/data/Bravura/E526.xml new file mode 100644 index 00000000000..0edfb85a4c7 --- /dev/null +++ b/data/Bravura/E526.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E527.xml b/data/Bravura/E527.xml new file mode 100644 index 00000000000..22d362032a9 --- /dev/null +++ b/data/Bravura/E527.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E528.xml b/data/Bravura/E528.xml new file mode 100644 index 00000000000..ec28c2441c9 --- /dev/null +++ b/data/Bravura/E528.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E529.xml b/data/Bravura/E529.xml new file mode 100644 index 00000000000..ee7d85bec84 --- /dev/null +++ b/data/Bravura/E529.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E52A.xml b/data/Bravura/E52A.xml new file mode 100644 index 00000000000..7a7d4ad08f8 --- /dev/null +++ b/data/Bravura/E52A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E52B.xml b/data/Bravura/E52B.xml new file mode 100644 index 00000000000..25a77992a6b --- /dev/null +++ b/data/Bravura/E52B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E52C.xml b/data/Bravura/E52C.xml new file mode 100644 index 00000000000..ece74a74de4 --- /dev/null +++ b/data/Bravura/E52C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E52D.xml b/data/Bravura/E52D.xml new file mode 100644 index 00000000000..cd548201e0f --- /dev/null +++ b/data/Bravura/E52D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E52E.xml b/data/Bravura/E52E.xml new file mode 100644 index 00000000000..1f0b0e4b57a --- /dev/null +++ b/data/Bravura/E52E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E52F.xml b/data/Bravura/E52F.xml new file mode 100644 index 00000000000..f712e725f16 --- /dev/null +++ b/data/Bravura/E52F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E530.xml b/data/Bravura/E530.xml new file mode 100644 index 00000000000..10b7f4035ee --- /dev/null +++ b/data/Bravura/E530.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E531.xml b/data/Bravura/E531.xml new file mode 100644 index 00000000000..1ad5e9908a3 --- /dev/null +++ b/data/Bravura/E531.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E532.xml b/data/Bravura/E532.xml new file mode 100644 index 00000000000..7d570f2f3dc --- /dev/null +++ b/data/Bravura/E532.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E533.xml b/data/Bravura/E533.xml new file mode 100644 index 00000000000..d9d13d014c7 --- /dev/null +++ b/data/Bravura/E533.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E534.xml b/data/Bravura/E534.xml new file mode 100644 index 00000000000..aa702cf12ee --- /dev/null +++ b/data/Bravura/E534.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E535.xml b/data/Bravura/E535.xml new file mode 100644 index 00000000000..d7c509e138e --- /dev/null +++ b/data/Bravura/E535.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E536.xml b/data/Bravura/E536.xml new file mode 100644 index 00000000000..9b726460ad3 --- /dev/null +++ b/data/Bravura/E536.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E537.xml b/data/Bravura/E537.xml new file mode 100644 index 00000000000..f9ddf704e78 --- /dev/null +++ b/data/Bravura/E537.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E538.xml b/data/Bravura/E538.xml new file mode 100644 index 00000000000..87016694f24 --- /dev/null +++ b/data/Bravura/E538.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E539.xml b/data/Bravura/E539.xml new file mode 100644 index 00000000000..79893f39367 --- /dev/null +++ b/data/Bravura/E539.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E53A.xml b/data/Bravura/E53A.xml new file mode 100644 index 00000000000..0b0005d0387 --- /dev/null +++ b/data/Bravura/E53A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E53B.xml b/data/Bravura/E53B.xml new file mode 100644 index 00000000000..78639ea8bef --- /dev/null +++ b/data/Bravura/E53B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E53C.xml b/data/Bravura/E53C.xml new file mode 100644 index 00000000000..92da373345f --- /dev/null +++ b/data/Bravura/E53C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E53D.xml b/data/Bravura/E53D.xml new file mode 100644 index 00000000000..09ca8f9cc40 --- /dev/null +++ b/data/Bravura/E53D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E566.xml b/data/Bravura/E566.xml new file mode 100644 index 00000000000..0bd5013fb76 --- /dev/null +++ b/data/Bravura/E566.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E567.xml b/data/Bravura/E567.xml new file mode 100644 index 00000000000..3ab7c50ed58 --- /dev/null +++ b/data/Bravura/E567.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E568.xml b/data/Bravura/E568.xml new file mode 100644 index 00000000000..8fe035f9ed4 --- /dev/null +++ b/data/Bravura/E568.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E569.xml b/data/Bravura/E569.xml new file mode 100644 index 00000000000..a023c122b91 --- /dev/null +++ b/data/Bravura/E569.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E56A.xml b/data/Bravura/E56A.xml new file mode 100644 index 00000000000..48a46318a1d --- /dev/null +++ b/data/Bravura/E56A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E56B.xml b/data/Bravura/E56B.xml new file mode 100644 index 00000000000..e24ac5cc643 --- /dev/null +++ b/data/Bravura/E56B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E56C.xml b/data/Bravura/E56C.xml new file mode 100644 index 00000000000..fefc88f0b7a --- /dev/null +++ b/data/Bravura/E56C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E56D.xml b/data/Bravura/E56D.xml new file mode 100644 index 00000000000..57b7f580d0e --- /dev/null +++ b/data/Bravura/E56D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E56E.xml b/data/Bravura/E56E.xml new file mode 100644 index 00000000000..c74d7b3d287 --- /dev/null +++ b/data/Bravura/E56E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E56F.xml b/data/Bravura/E56F.xml new file mode 100644 index 00000000000..95c89045b1e --- /dev/null +++ b/data/Bravura/E56F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E583.xml b/data/Bravura/E583.xml new file mode 100644 index 00000000000..bc50a2ebcfc --- /dev/null +++ b/data/Bravura/E583.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E587.xml b/data/Bravura/E587.xml new file mode 100644 index 00000000000..1bcb325b4b6 --- /dev/null +++ b/data/Bravura/E587.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E59D.xml b/data/Bravura/E59D.xml new file mode 100644 index 00000000000..b9dd9a953cb --- /dev/null +++ b/data/Bravura/E59D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E59E.xml b/data/Bravura/E59E.xml new file mode 100644 index 00000000000..26d5719cba1 --- /dev/null +++ b/data/Bravura/E59E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5B0.xml b/data/Bravura/E5B0.xml new file mode 100644 index 00000000000..de61443d28a --- /dev/null +++ b/data/Bravura/E5B0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5B1.xml b/data/Bravura/E5B1.xml new file mode 100644 index 00000000000..ad0b557bb47 --- /dev/null +++ b/data/Bravura/E5B1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5B2.xml b/data/Bravura/E5B2.xml new file mode 100644 index 00000000000..30f287b8bb5 --- /dev/null +++ b/data/Bravura/E5B2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5B3.xml b/data/Bravura/E5B3.xml new file mode 100644 index 00000000000..17c2a847652 --- /dev/null +++ b/data/Bravura/E5B3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5B4.xml b/data/Bravura/E5B4.xml new file mode 100644 index 00000000000..b52dfb495e4 --- /dev/null +++ b/data/Bravura/E5B4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5B5.xml b/data/Bravura/E5B5.xml new file mode 100644 index 00000000000..9f4c9983fa7 --- /dev/null +++ b/data/Bravura/E5B5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5B6.xml b/data/Bravura/E5B6.xml new file mode 100644 index 00000000000..6f82867babc --- /dev/null +++ b/data/Bravura/E5B6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5B7.xml b/data/Bravura/E5B7.xml new file mode 100644 index 00000000000..f0220acde6b --- /dev/null +++ b/data/Bravura/E5B7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5B8.xml b/data/Bravura/E5B8.xml new file mode 100644 index 00000000000..7f7e51b7db3 --- /dev/null +++ b/data/Bravura/E5B8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5B9.xml b/data/Bravura/E5B9.xml new file mode 100644 index 00000000000..9f9c480f9b3 --- /dev/null +++ b/data/Bravura/E5B9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5BA.xml b/data/Bravura/E5BA.xml new file mode 100644 index 00000000000..b548f590eeb --- /dev/null +++ b/data/Bravura/E5BA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5BB.xml b/data/Bravura/E5BB.xml new file mode 100644 index 00000000000..391fabb5404 --- /dev/null +++ b/data/Bravura/E5BB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5BC.xml b/data/Bravura/E5BC.xml new file mode 100644 index 00000000000..d631645c86f --- /dev/null +++ b/data/Bravura/E5BC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5BD.xml b/data/Bravura/E5BD.xml new file mode 100644 index 00000000000..18032fe7e5c --- /dev/null +++ b/data/Bravura/E5BD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5BE.xml b/data/Bravura/E5BE.xml new file mode 100644 index 00000000000..4957c67fa5f --- /dev/null +++ b/data/Bravura/E5BE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5BF.xml b/data/Bravura/E5BF.xml new file mode 100644 index 00000000000..f9819d3815d --- /dev/null +++ b/data/Bravura/E5BF.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5C0.xml b/data/Bravura/E5C0.xml new file mode 100644 index 00000000000..bf0facc55e3 --- /dev/null +++ b/data/Bravura/E5C0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5C1.xml b/data/Bravura/E5C1.xml new file mode 100644 index 00000000000..40c50019a36 --- /dev/null +++ b/data/Bravura/E5C1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5C2.xml b/data/Bravura/E5C2.xml new file mode 100644 index 00000000000..e761e012ef0 --- /dev/null +++ b/data/Bravura/E5C2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5C3.xml b/data/Bravura/E5C3.xml new file mode 100644 index 00000000000..8e1441c4d87 --- /dev/null +++ b/data/Bravura/E5C3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5C4.xml b/data/Bravura/E5C4.xml new file mode 100644 index 00000000000..a6978a02131 --- /dev/null +++ b/data/Bravura/E5C4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5C5.xml b/data/Bravura/E5C5.xml new file mode 100644 index 00000000000..e8002f9528a --- /dev/null +++ b/data/Bravura/E5C5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5C6.xml b/data/Bravura/E5C6.xml new file mode 100644 index 00000000000..ae305f6ff6a --- /dev/null +++ b/data/Bravura/E5C6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5C7.xml b/data/Bravura/E5C7.xml new file mode 100644 index 00000000000..22dcad0d3c6 --- /dev/null +++ b/data/Bravura/E5C7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5C8.xml b/data/Bravura/E5C8.xml new file mode 100644 index 00000000000..bc653dff181 --- /dev/null +++ b/data/Bravura/E5C8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5E5.xml b/data/Bravura/E5E5.xml new file mode 100644 index 00000000000..bcb77d5973f --- /dev/null +++ b/data/Bravura/E5E5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5E6.xml b/data/Bravura/E5E6.xml new file mode 100644 index 00000000000..6b2c3eab355 --- /dev/null +++ b/data/Bravura/E5E6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E5E7.xml b/data/Bravura/E5E7.xml new file mode 100644 index 00000000000..a95e92256ec --- /dev/null +++ b/data/Bravura/E5E7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E610.xml b/data/Bravura/E610.xml new file mode 100644 index 00000000000..85c0170bcd9 --- /dev/null +++ b/data/Bravura/E610.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E611.xml b/data/Bravura/E611.xml new file mode 100644 index 00000000000..a6c833a8789 --- /dev/null +++ b/data/Bravura/E611.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E612.xml b/data/Bravura/E612.xml new file mode 100644 index 00000000000..6acdc8883ad --- /dev/null +++ b/data/Bravura/E612.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E613.xml b/data/Bravura/E613.xml new file mode 100644 index 00000000000..40a9cd9ab7e --- /dev/null +++ b/data/Bravura/E613.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E614.xml b/data/Bravura/E614.xml new file mode 100644 index 00000000000..ac139eea9e3 --- /dev/null +++ b/data/Bravura/E614.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E630.xml b/data/Bravura/E630.xml new file mode 100644 index 00000000000..c3d23a1778b --- /dev/null +++ b/data/Bravura/E630.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E631.xml b/data/Bravura/E631.xml new file mode 100644 index 00000000000..99cd58f5589 --- /dev/null +++ b/data/Bravura/E631.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E632.xml b/data/Bravura/E632.xml new file mode 100644 index 00000000000..3114b6ab2cd --- /dev/null +++ b/data/Bravura/E632.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E633.xml b/data/Bravura/E633.xml new file mode 100644 index 00000000000..3cf7e649409 --- /dev/null +++ b/data/Bravura/E633.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E638.xml b/data/Bravura/E638.xml new file mode 100644 index 00000000000..268e0dd85d7 --- /dev/null +++ b/data/Bravura/E638.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E645.xml b/data/Bravura/E645.xml new file mode 100644 index 00000000000..8ddc5970815 --- /dev/null +++ b/data/Bravura/E645.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E650.xml b/data/Bravura/E650.xml new file mode 100644 index 00000000000..1152383327b --- /dev/null +++ b/data/Bravura/E650.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E651.xml b/data/Bravura/E651.xml new file mode 100644 index 00000000000..85ea515ac1f --- /dev/null +++ b/data/Bravura/E651.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E655.xml b/data/Bravura/E655.xml new file mode 100644 index 00000000000..f016f3c8660 --- /dev/null +++ b/data/Bravura/E655.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E659.xml b/data/Bravura/E659.xml new file mode 100644 index 00000000000..5d3b0898ada --- /dev/null +++ b/data/Bravura/E659.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E65A.xml b/data/Bravura/E65A.xml new file mode 100644 index 00000000000..4794aea3bb4 --- /dev/null +++ b/data/Bravura/E65A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E880.xml b/data/Bravura/E880.xml new file mode 100644 index 00000000000..46bef43a9b2 --- /dev/null +++ b/data/Bravura/E880.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E881.xml b/data/Bravura/E881.xml new file mode 100644 index 00000000000..d3e304c3c73 --- /dev/null +++ b/data/Bravura/E881.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E882.xml b/data/Bravura/E882.xml new file mode 100644 index 00000000000..12aecc7c96b --- /dev/null +++ b/data/Bravura/E882.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E883.xml b/data/Bravura/E883.xml new file mode 100644 index 00000000000..28ce2e5b0ba --- /dev/null +++ b/data/Bravura/E883.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E884.xml b/data/Bravura/E884.xml new file mode 100644 index 00000000000..4701201deed --- /dev/null +++ b/data/Bravura/E884.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E885.xml b/data/Bravura/E885.xml new file mode 100644 index 00000000000..38e6c973ebe --- /dev/null +++ b/data/Bravura/E885.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E886.xml b/data/Bravura/E886.xml new file mode 100644 index 00000000000..ea7a6ee8e2c --- /dev/null +++ b/data/Bravura/E886.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E887.xml b/data/Bravura/E887.xml new file mode 100644 index 00000000000..d18b2e95896 --- /dev/null +++ b/data/Bravura/E887.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E888.xml b/data/Bravura/E888.xml new file mode 100644 index 00000000000..54c5019cdce --- /dev/null +++ b/data/Bravura/E888.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E889.xml b/data/Bravura/E889.xml new file mode 100644 index 00000000000..85a31758fa3 --- /dev/null +++ b/data/Bravura/E889.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E88A.xml b/data/Bravura/E88A.xml new file mode 100644 index 00000000000..e00e6608b70 --- /dev/null +++ b/data/Bravura/E88A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E901.xml b/data/Bravura/E901.xml new file mode 100644 index 00000000000..a9173e9ce8a --- /dev/null +++ b/data/Bravura/E901.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E902.xml b/data/Bravura/E902.xml new file mode 100644 index 00000000000..346c65e29ba --- /dev/null +++ b/data/Bravura/E902.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E904.xml b/data/Bravura/E904.xml new file mode 100644 index 00000000000..041f727ffea --- /dev/null +++ b/data/Bravura/E904.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E906.xml b/data/Bravura/E906.xml new file mode 100644 index 00000000000..4bae5c9c6e5 --- /dev/null +++ b/data/Bravura/E906.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E907.xml b/data/Bravura/E907.xml new file mode 100644 index 00000000000..bf913196491 --- /dev/null +++ b/data/Bravura/E907.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E908.xml b/data/Bravura/E908.xml new file mode 100644 index 00000000000..0f0ae313fb9 --- /dev/null +++ b/data/Bravura/E908.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E909.xml b/data/Bravura/E909.xml new file mode 100644 index 00000000000..7f26a939c0b --- /dev/null +++ b/data/Bravura/E909.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E90A.xml b/data/Bravura/E90A.xml new file mode 100644 index 00000000000..c77610a587d --- /dev/null +++ b/data/Bravura/E90A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E90B.xml b/data/Bravura/E90B.xml new file mode 100644 index 00000000000..c983703ed72 --- /dev/null +++ b/data/Bravura/E90B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E910.xml b/data/Bravura/E910.xml new file mode 100644 index 00000000000..36a91b7b525 --- /dev/null +++ b/data/Bravura/E910.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E911.xml b/data/Bravura/E911.xml new file mode 100644 index 00000000000..7905daaeb2b --- /dev/null +++ b/data/Bravura/E911.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E912.xml b/data/Bravura/E912.xml new file mode 100644 index 00000000000..afbf8e178f3 --- /dev/null +++ b/data/Bravura/E912.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E913.xml b/data/Bravura/E913.xml new file mode 100644 index 00000000000..0ca55fac83a --- /dev/null +++ b/data/Bravura/E913.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E914.xml b/data/Bravura/E914.xml new file mode 100644 index 00000000000..8ac5ce71715 --- /dev/null +++ b/data/Bravura/E914.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E915.xml b/data/Bravura/E915.xml new file mode 100644 index 00000000000..3eb9af22a8d --- /dev/null +++ b/data/Bravura/E915.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E916.xml b/data/Bravura/E916.xml new file mode 100644 index 00000000000..d8d64b0d65a --- /dev/null +++ b/data/Bravura/E916.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E917.xml b/data/Bravura/E917.xml new file mode 100644 index 00000000000..8ec9831f303 --- /dev/null +++ b/data/Bravura/E917.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E918.xml b/data/Bravura/E918.xml new file mode 100644 index 00000000000..92b068d7fa5 --- /dev/null +++ b/data/Bravura/E918.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E919.xml b/data/Bravura/E919.xml new file mode 100644 index 00000000000..63f1d3e6ea1 --- /dev/null +++ b/data/Bravura/E919.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E91A.xml b/data/Bravura/E91A.xml new file mode 100644 index 00000000000..3e889ce142c --- /dev/null +++ b/data/Bravura/E91A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E91B.xml b/data/Bravura/E91B.xml new file mode 100644 index 00000000000..acdb022e16f --- /dev/null +++ b/data/Bravura/E91B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E91C.xml b/data/Bravura/E91C.xml new file mode 100644 index 00000000000..a3684029e0f --- /dev/null +++ b/data/Bravura/E91C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E91D.xml b/data/Bravura/E91D.xml new file mode 100644 index 00000000000..e1974252169 --- /dev/null +++ b/data/Bravura/E91D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E91E.xml b/data/Bravura/E91E.xml new file mode 100644 index 00000000000..b7eaaf5de4d --- /dev/null +++ b/data/Bravura/E91E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E91F.xml b/data/Bravura/E91F.xml new file mode 100644 index 00000000000..8742de89c50 --- /dev/null +++ b/data/Bravura/E91F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E920.xml b/data/Bravura/E920.xml new file mode 100644 index 00000000000..cf66abdf0c4 --- /dev/null +++ b/data/Bravura/E920.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E921.xml b/data/Bravura/E921.xml new file mode 100644 index 00000000000..4c3768e2cf8 --- /dev/null +++ b/data/Bravura/E921.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E922.xml b/data/Bravura/E922.xml new file mode 100644 index 00000000000..cf6e00b779a --- /dev/null +++ b/data/Bravura/E922.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E923.xml b/data/Bravura/E923.xml new file mode 100644 index 00000000000..735024811c4 --- /dev/null +++ b/data/Bravura/E923.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E924.xml b/data/Bravura/E924.xml new file mode 100644 index 00000000000..17547882372 --- /dev/null +++ b/data/Bravura/E924.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E925.xml b/data/Bravura/E925.xml new file mode 100644 index 00000000000..1e7fcf2812e --- /dev/null +++ b/data/Bravura/E925.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E938.xml b/data/Bravura/E938.xml new file mode 100644 index 00000000000..fccceb49e53 --- /dev/null +++ b/data/Bravura/E938.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E939.xml b/data/Bravura/E939.xml new file mode 100644 index 00000000000..e670878eba0 --- /dev/null +++ b/data/Bravura/E939.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E93C.xml b/data/Bravura/E93C.xml new file mode 100644 index 00000000000..bc6e116735d --- /dev/null +++ b/data/Bravura/E93C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E93D.xml b/data/Bravura/E93D.xml new file mode 100644 index 00000000000..c339969d544 --- /dev/null +++ b/data/Bravura/E93D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E93E.xml b/data/Bravura/E93E.xml new file mode 100644 index 00000000000..69c1755e1f9 --- /dev/null +++ b/data/Bravura/E93E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E93F.xml b/data/Bravura/E93F.xml new file mode 100644 index 00000000000..991692bac21 --- /dev/null +++ b/data/Bravura/E93F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E949.xml b/data/Bravura/E949.xml new file mode 100644 index 00000000000..95ef6b06e04 --- /dev/null +++ b/data/Bravura/E949.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E94A.xml b/data/Bravura/E94A.xml new file mode 100644 index 00000000000..b01ec86ab27 --- /dev/null +++ b/data/Bravura/E94A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E94B.xml b/data/Bravura/E94B.xml new file mode 100644 index 00000000000..8e191de6f03 --- /dev/null +++ b/data/Bravura/E94B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E94C.xml b/data/Bravura/E94C.xml new file mode 100644 index 00000000000..5161b44f697 --- /dev/null +++ b/data/Bravura/E94C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E990.xml b/data/Bravura/E990.xml new file mode 100644 index 00000000000..09bd051d6b2 --- /dev/null +++ b/data/Bravura/E990.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E991.xml b/data/Bravura/E991.xml new file mode 100644 index 00000000000..72d5b7a96ae --- /dev/null +++ b/data/Bravura/E991.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E996.xml b/data/Bravura/E996.xml new file mode 100644 index 00000000000..650ed1628db --- /dev/null +++ b/data/Bravura/E996.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E99B.xml b/data/Bravura/E99B.xml new file mode 100644 index 00000000000..f1c98f73de7 --- /dev/null +++ b/data/Bravura/E99B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E99E.xml b/data/Bravura/E99E.xml new file mode 100644 index 00000000000..12aa9397af2 --- /dev/null +++ b/data/Bravura/E99E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E99F.xml b/data/Bravura/E99F.xml new file mode 100644 index 00000000000..1338616622f --- /dev/null +++ b/data/Bravura/E99F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9B4.xml b/data/Bravura/E9B4.xml new file mode 100644 index 00000000000..3cf09b7087f --- /dev/null +++ b/data/Bravura/E9B4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9B5.xml b/data/Bravura/E9B5.xml new file mode 100644 index 00000000000..5b66c5a9014 --- /dev/null +++ b/data/Bravura/E9B5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9B6.xml b/data/Bravura/E9B6.xml new file mode 100644 index 00000000000..8b93bc6bcf6 --- /dev/null +++ b/data/Bravura/E9B6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9B7.xml b/data/Bravura/E9B7.xml new file mode 100644 index 00000000000..03a98dc8afe --- /dev/null +++ b/data/Bravura/E9B7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9B9.xml b/data/Bravura/E9B9.xml new file mode 100644 index 00000000000..4ed5cf8e535 --- /dev/null +++ b/data/Bravura/E9B9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9BA.xml b/data/Bravura/E9BA.xml new file mode 100644 index 00000000000..c8e3df134e0 --- /dev/null +++ b/data/Bravura/E9BA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9BB.xml b/data/Bravura/E9BB.xml new file mode 100644 index 00000000000..bd2b09cf1b7 --- /dev/null +++ b/data/Bravura/E9BB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9BC.xml b/data/Bravura/E9BC.xml new file mode 100644 index 00000000000..59a5bf84988 --- /dev/null +++ b/data/Bravura/E9BC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9E0.xml b/data/Bravura/E9E0.xml new file mode 100644 index 00000000000..33da12ff288 --- /dev/null +++ b/data/Bravura/E9E0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9E1.xml b/data/Bravura/E9E1.xml new file mode 100644 index 00000000000..32c3bfd11e3 --- /dev/null +++ b/data/Bravura/E9E1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9E2.xml b/data/Bravura/E9E2.xml new file mode 100644 index 00000000000..dcd8b9f082e --- /dev/null +++ b/data/Bravura/E9E2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9E3.xml b/data/Bravura/E9E3.xml new file mode 100644 index 00000000000..fcdfa65ab66 --- /dev/null +++ b/data/Bravura/E9E3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9F0.xml b/data/Bravura/E9F0.xml new file mode 100644 index 00000000000..8d1a26decc3 --- /dev/null +++ b/data/Bravura/E9F0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9F1.xml b/data/Bravura/E9F1.xml new file mode 100644 index 00000000000..ae7affbf859 --- /dev/null +++ b/data/Bravura/E9F1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9F2.xml b/data/Bravura/E9F2.xml new file mode 100644 index 00000000000..343ee4b19bd --- /dev/null +++ b/data/Bravura/E9F2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9F3.xml b/data/Bravura/E9F3.xml new file mode 100644 index 00000000000..59b49479eca --- /dev/null +++ b/data/Bravura/E9F3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9F4.xml b/data/Bravura/E9F4.xml new file mode 100644 index 00000000000..49a50029193 --- /dev/null +++ b/data/Bravura/E9F4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9F5.xml b/data/Bravura/E9F5.xml new file mode 100644 index 00000000000..aea8de7a1ce --- /dev/null +++ b/data/Bravura/E9F5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9F6.xml b/data/Bravura/E9F6.xml new file mode 100644 index 00000000000..fe8eb6d0d8a --- /dev/null +++ b/data/Bravura/E9F6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9F7.xml b/data/Bravura/E9F7.xml new file mode 100644 index 00000000000..1c224feca8e --- /dev/null +++ b/data/Bravura/E9F7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E9F8.xml b/data/Bravura/E9F8.xml new file mode 100644 index 00000000000..97dfec82444 --- /dev/null +++ b/data/Bravura/E9F8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EA02.xml b/data/Bravura/EA02.xml new file mode 100644 index 00000000000..2e532245717 --- /dev/null +++ b/data/Bravura/EA02.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EA06.xml b/data/Bravura/EA06.xml new file mode 100644 index 00000000000..7c1c93ad2a0 --- /dev/null +++ b/data/Bravura/EA06.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EAA4.xml b/data/Bravura/EAA4.xml new file mode 100644 index 00000000000..401d133833c --- /dev/null +++ b/data/Bravura/EAA4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EAA9.xml b/data/Bravura/EAA9.xml new file mode 100644 index 00000000000..dde86a858a6 --- /dev/null +++ b/data/Bravura/EAA9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EAAA.xml b/data/Bravura/EAAA.xml new file mode 100644 index 00000000000..806a315e2c2 --- /dev/null +++ b/data/Bravura/EAAA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EAAD.xml b/data/Bravura/EAAD.xml new file mode 100644 index 00000000000..2395bde9d0e --- /dev/null +++ b/data/Bravura/EAAD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EAAE.xml b/data/Bravura/EAAE.xml new file mode 100644 index 00000000000..e47f620467f --- /dev/null +++ b/data/Bravura/EAAE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EAAF.xml b/data/Bravura/EAAF.xml new file mode 100644 index 00000000000..6c2c4dbb6c8 --- /dev/null +++ b/data/Bravura/EAAF.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBA7.xml b/data/Bravura/EBA7.xml new file mode 100644 index 00000000000..f56459f2ea3 --- /dev/null +++ b/data/Bravura/EBA7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBA8.xml b/data/Bravura/EBA8.xml new file mode 100644 index 00000000000..c914956ae07 --- /dev/null +++ b/data/Bravura/EBA8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBA9.xml b/data/Bravura/EBA9.xml new file mode 100644 index 00000000000..4d47c33917d --- /dev/null +++ b/data/Bravura/EBA9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBAA.xml b/data/Bravura/EBAA.xml new file mode 100644 index 00000000000..10976ccbc62 --- /dev/null +++ b/data/Bravura/EBAA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBAB.xml b/data/Bravura/EBAB.xml new file mode 100644 index 00000000000..1683003263c --- /dev/null +++ b/data/Bravura/EBAB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBAC.xml b/data/Bravura/EBAC.xml new file mode 100644 index 00000000000..b0cb42a8dec --- /dev/null +++ b/data/Bravura/EBAC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBC0.xml b/data/Bravura/EBC0.xml new file mode 100644 index 00000000000..8a73edac364 --- /dev/null +++ b/data/Bravura/EBC0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBC1.xml b/data/Bravura/EBC1.xml new file mode 100644 index 00000000000..c8e62bb4ce5 --- /dev/null +++ b/data/Bravura/EBC1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBC2.xml b/data/Bravura/EBC2.xml new file mode 100644 index 00000000000..28b65ba07a6 --- /dev/null +++ b/data/Bravura/EBC2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBC3.xml b/data/Bravura/EBC3.xml new file mode 100644 index 00000000000..bdbb65612f0 --- /dev/null +++ b/data/Bravura/EBC3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBC4.xml b/data/Bravura/EBC4.xml new file mode 100644 index 00000000000..11a63851ee2 --- /dev/null +++ b/data/Bravura/EBC4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBC5.xml b/data/Bravura/EBC5.xml new file mode 100644 index 00000000000..7c2ff76d5e4 --- /dev/null +++ b/data/Bravura/EBC5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBC6.xml b/data/Bravura/EBC6.xml new file mode 100644 index 00000000000..00c4813233d --- /dev/null +++ b/data/Bravura/EBC6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBC7.xml b/data/Bravura/EBC7.xml new file mode 100644 index 00000000000..a6da9dddbcd --- /dev/null +++ b/data/Bravura/EBC7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBC8.xml b/data/Bravura/EBC8.xml new file mode 100644 index 00000000000..3aae3c56a2b --- /dev/null +++ b/data/Bravura/EBC8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBC9.xml b/data/Bravura/EBC9.xml new file mode 100644 index 00000000000..57c5c686406 --- /dev/null +++ b/data/Bravura/EBC9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBCA.xml b/data/Bravura/EBCA.xml new file mode 100644 index 00000000000..241921fa8dc --- /dev/null +++ b/data/Bravura/EBCA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBCB.xml b/data/Bravura/EBCB.xml new file mode 100644 index 00000000000..b922ca2486b --- /dev/null +++ b/data/Bravura/EBCB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBCC.xml b/data/Bravura/EBCC.xml new file mode 100644 index 00000000000..bf7202ab6a3 --- /dev/null +++ b/data/Bravura/EBCC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBE0.xml b/data/Bravura/EBE0.xml new file mode 100644 index 00000000000..4fa12a87b88 --- /dev/null +++ b/data/Bravura/EBE0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBE1.xml b/data/Bravura/EBE1.xml new file mode 100644 index 00000000000..f03c7cf7636 --- /dev/null +++ b/data/Bravura/EBE1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBE2.xml b/data/Bravura/EBE2.xml new file mode 100644 index 00000000000..1d63fe16ba5 --- /dev/null +++ b/data/Bravura/EBE2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBE3.xml b/data/Bravura/EBE3.xml new file mode 100644 index 00000000000..ab0279dd575 --- /dev/null +++ b/data/Bravura/EBE3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBE4.xml b/data/Bravura/EBE4.xml new file mode 100644 index 00000000000..e539b28de1e --- /dev/null +++ b/data/Bravura/EBE4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBE5.xml b/data/Bravura/EBE5.xml new file mode 100644 index 00000000000..4f4f694ef45 --- /dev/null +++ b/data/Bravura/EBE5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBE6.xml b/data/Bravura/EBE6.xml new file mode 100644 index 00000000000..45de29fbf09 --- /dev/null +++ b/data/Bravura/EBE6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBE7.xml b/data/Bravura/EBE7.xml new file mode 100644 index 00000000000..c568897a8e0 --- /dev/null +++ b/data/Bravura/EBE7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBE8.xml b/data/Bravura/EBE8.xml new file mode 100644 index 00000000000..aac2b0f6f44 --- /dev/null +++ b/data/Bravura/EBE8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/EBE9.xml b/data/Bravura/EBE9.xml new file mode 100644 index 00000000000..4abb2079b7a --- /dev/null +++ b/data/Bravura/EBE9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/ED40.xml b/data/Bravura/ED40.xml new file mode 100644 index 00000000000..c52ad74ab08 --- /dev/null +++ b/data/Bravura/ED40.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/ED41.xml b/data/Bravura/ED41.xml new file mode 100644 index 00000000000..7d2ef6c2580 --- /dev/null +++ b/data/Bravura/ED41.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville.xml b/data/Gootville.xml new file mode 100644 index 00000000000..e3c4bce50ea --- /dev/null +++ b/data/Gootville.xml @@ -0,0 +1,416 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/Gootville/E003.xml b/data/Gootville/E003.xml new file mode 100644 index 00000000000..311ee5a5f30 --- /dev/null +++ b/data/Gootville/E003.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E004.xml b/data/Gootville/E004.xml new file mode 100644 index 00000000000..04f6dc2f289 --- /dev/null +++ b/data/Gootville/E004.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E043.xml b/data/Gootville/E043.xml new file mode 100644 index 00000000000..adccaf80c41 --- /dev/null +++ b/data/Gootville/E043.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E044.xml b/data/Gootville/E044.xml new file mode 100644 index 00000000000..fbdb151970f --- /dev/null +++ b/data/Gootville/E044.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E047.xml b/data/Gootville/E047.xml new file mode 100644 index 00000000000..0b40386adf8 --- /dev/null +++ b/data/Gootville/E047.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E048.xml b/data/Gootville/E048.xml new file mode 100644 index 00000000000..4e0e6d23283 --- /dev/null +++ b/data/Gootville/E048.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E049.xml b/data/Gootville/E049.xml new file mode 100644 index 00000000000..d9d39ef07a9 --- /dev/null +++ b/data/Gootville/E049.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E050.xml b/data/Gootville/E050.xml new file mode 100644 index 00000000000..3922d5545a1 --- /dev/null +++ b/data/Gootville/E050.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E051.xml b/data/Gootville/E051.xml new file mode 100644 index 00000000000..4b10bb5d214 --- /dev/null +++ b/data/Gootville/E051.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E052.xml b/data/Gootville/E052.xml new file mode 100644 index 00000000000..3adb14b2361 --- /dev/null +++ b/data/Gootville/E052.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E053.xml b/data/Gootville/E053.xml new file mode 100644 index 00000000000..bb14955334e --- /dev/null +++ b/data/Gootville/E053.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E054.xml b/data/Gootville/E054.xml new file mode 100644 index 00000000000..5460a59b2ca --- /dev/null +++ b/data/Gootville/E054.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E05C.xml b/data/Gootville/E05C.xml new file mode 100644 index 00000000000..658d7fa2e7d --- /dev/null +++ b/data/Gootville/E05C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E05D.xml b/data/Gootville/E05D.xml new file mode 100644 index 00000000000..272d53bb793 --- /dev/null +++ b/data/Gootville/E05D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E062.xml b/data/Gootville/E062.xml new file mode 100644 index 00000000000..494ab6d0577 --- /dev/null +++ b/data/Gootville/E062.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E063.xml b/data/Gootville/E063.xml new file mode 100644 index 00000000000..d676b332e5b --- /dev/null +++ b/data/Gootville/E063.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E064.xml b/data/Gootville/E064.xml new file mode 100644 index 00000000000..1fb1078a257 --- /dev/null +++ b/data/Gootville/E064.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E065.xml b/data/Gootville/E065.xml new file mode 100644 index 00000000000..505034974e7 --- /dev/null +++ b/data/Gootville/E065.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E066.xml b/data/Gootville/E066.xml new file mode 100644 index 00000000000..13eb4e5c139 --- /dev/null +++ b/data/Gootville/E066.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E069.xml b/data/Gootville/E069.xml new file mode 100644 index 00000000000..de8d135d37d --- /dev/null +++ b/data/Gootville/E069.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E06A.xml b/data/Gootville/E06A.xml new file mode 100644 index 00000000000..9b21faaff1d --- /dev/null +++ b/data/Gootville/E06A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E080.xml b/data/Gootville/E080.xml new file mode 100644 index 00000000000..ecc048771cc --- /dev/null +++ b/data/Gootville/E080.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E081.xml b/data/Gootville/E081.xml new file mode 100644 index 00000000000..e8ed283c7b1 --- /dev/null +++ b/data/Gootville/E081.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E082.xml b/data/Gootville/E082.xml new file mode 100644 index 00000000000..844931eb6c9 --- /dev/null +++ b/data/Gootville/E082.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E083.xml b/data/Gootville/E083.xml new file mode 100644 index 00000000000..bfe7c3dde34 --- /dev/null +++ b/data/Gootville/E083.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E084.xml b/data/Gootville/E084.xml new file mode 100644 index 00000000000..b5f98ddc370 --- /dev/null +++ b/data/Gootville/E084.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E085.xml b/data/Gootville/E085.xml new file mode 100644 index 00000000000..701c14a06b3 --- /dev/null +++ b/data/Gootville/E085.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E086.xml b/data/Gootville/E086.xml new file mode 100644 index 00000000000..e1e38130d62 --- /dev/null +++ b/data/Gootville/E086.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E087.xml b/data/Gootville/E087.xml new file mode 100644 index 00000000000..96cd3ffdfb6 --- /dev/null +++ b/data/Gootville/E087.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E088.xml b/data/Gootville/E088.xml new file mode 100644 index 00000000000..05085caabef --- /dev/null +++ b/data/Gootville/E088.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E089.xml b/data/Gootville/E089.xml new file mode 100644 index 00000000000..2eb45c8ed0a --- /dev/null +++ b/data/Gootville/E089.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E08A.xml b/data/Gootville/E08A.xml new file mode 100644 index 00000000000..10a8342ad73 --- /dev/null +++ b/data/Gootville/E08A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E08B.xml b/data/Gootville/E08B.xml new file mode 100644 index 00000000000..518f109b63e --- /dev/null +++ b/data/Gootville/E08B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E092.xml b/data/Gootville/E092.xml new file mode 100644 index 00000000000..5551521052b --- /dev/null +++ b/data/Gootville/E092.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E093.xml b/data/Gootville/E093.xml new file mode 100644 index 00000000000..1486c1f6ab3 --- /dev/null +++ b/data/Gootville/E093.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E094.xml b/data/Gootville/E094.xml new file mode 100644 index 00000000000..b1af2c0c149 --- /dev/null +++ b/data/Gootville/E094.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E095.xml b/data/Gootville/E095.xml new file mode 100644 index 00000000000..185c89feb44 --- /dev/null +++ b/data/Gootville/E095.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E0A0.xml b/data/Gootville/E0A0.xml new file mode 100644 index 00000000000..68379dacbad --- /dev/null +++ b/data/Gootville/E0A0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E0A1.xml b/data/Gootville/E0A1.xml new file mode 100644 index 00000000000..03953dcece7 --- /dev/null +++ b/data/Gootville/E0A1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E0A2.xml b/data/Gootville/E0A2.xml new file mode 100644 index 00000000000..b4ef88c177a --- /dev/null +++ b/data/Gootville/E0A2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E0A3.xml b/data/Gootville/E0A3.xml new file mode 100644 index 00000000000..3e23d354b04 --- /dev/null +++ b/data/Gootville/E0A3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E0A4.xml b/data/Gootville/E0A4.xml new file mode 100644 index 00000000000..345bf7db88a --- /dev/null +++ b/data/Gootville/E0A4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E0A9.xml b/data/Gootville/E0A9.xml new file mode 100644 index 00000000000..589903d0b4d --- /dev/null +++ b/data/Gootville/E0A9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E0D9.xml b/data/Gootville/E0D9.xml new file mode 100644 index 00000000000..e67567e8828 --- /dev/null +++ b/data/Gootville/E0D9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E0DA.xml b/data/Gootville/E0DA.xml new file mode 100644 index 00000000000..956c5c18122 --- /dev/null +++ b/data/Gootville/E0DA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E0DB.xml b/data/Gootville/E0DB.xml new file mode 100644 index 00000000000..87036294c87 --- /dev/null +++ b/data/Gootville/E0DB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E0DC.xml b/data/Gootville/E0DC.xml new file mode 100644 index 00000000000..2288d22afb0 --- /dev/null +++ b/data/Gootville/E0DC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E0DD.xml b/data/Gootville/E0DD.xml new file mode 100644 index 00000000000..54d3ff2444c --- /dev/null +++ b/data/Gootville/E0DD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E0DE.xml b/data/Gootville/E0DE.xml new file mode 100644 index 00000000000..43e4e006a3f --- /dev/null +++ b/data/Gootville/E0DE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E0F5.xml b/data/Gootville/E0F5.xml new file mode 100644 index 00000000000..1c52272e169 --- /dev/null +++ b/data/Gootville/E0F5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E0F6.xml b/data/Gootville/E0F6.xml new file mode 100644 index 00000000000..ed78af01e1c --- /dev/null +++ b/data/Gootville/E0F6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E101.xml b/data/Gootville/E101.xml new file mode 100644 index 00000000000..5f6bd53051e --- /dev/null +++ b/data/Gootville/E101.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E102.xml b/data/Gootville/E102.xml new file mode 100644 index 00000000000..31e6f9cf685 --- /dev/null +++ b/data/Gootville/E102.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E103.xml b/data/Gootville/E103.xml new file mode 100644 index 00000000000..981e593c620 --- /dev/null +++ b/data/Gootville/E103.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E240.xml b/data/Gootville/E240.xml new file mode 100644 index 00000000000..41aeefc4cd3 --- /dev/null +++ b/data/Gootville/E240.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E241.xml b/data/Gootville/E241.xml new file mode 100644 index 00000000000..96af6f7e69e --- /dev/null +++ b/data/Gootville/E241.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E242.xml b/data/Gootville/E242.xml new file mode 100644 index 00000000000..2b1eb758aef --- /dev/null +++ b/data/Gootville/E242.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E243.xml b/data/Gootville/E243.xml new file mode 100644 index 00000000000..57f645c17bd --- /dev/null +++ b/data/Gootville/E243.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E244.xml b/data/Gootville/E244.xml new file mode 100644 index 00000000000..00fdfadc84d --- /dev/null +++ b/data/Gootville/E244.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E245.xml b/data/Gootville/E245.xml new file mode 100644 index 00000000000..ee8880c1dcb --- /dev/null +++ b/data/Gootville/E245.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E246.xml b/data/Gootville/E246.xml new file mode 100644 index 00000000000..62798c24087 --- /dev/null +++ b/data/Gootville/E246.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E247.xml b/data/Gootville/E247.xml new file mode 100644 index 00000000000..957eed90270 --- /dev/null +++ b/data/Gootville/E247.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E248.xml b/data/Gootville/E248.xml new file mode 100644 index 00000000000..716a64b652d --- /dev/null +++ b/data/Gootville/E248.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E249.xml b/data/Gootville/E249.xml new file mode 100644 index 00000000000..7a593634b18 --- /dev/null +++ b/data/Gootville/E249.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E260.xml b/data/Gootville/E260.xml new file mode 100644 index 00000000000..21e38821a38 --- /dev/null +++ b/data/Gootville/E260.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E261.xml b/data/Gootville/E261.xml new file mode 100644 index 00000000000..348b8ef92df --- /dev/null +++ b/data/Gootville/E261.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E262.xml b/data/Gootville/E262.xml new file mode 100644 index 00000000000..d38f2492b73 --- /dev/null +++ b/data/Gootville/E262.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E263.xml b/data/Gootville/E263.xml new file mode 100644 index 00000000000..9efc6c05a46 --- /dev/null +++ b/data/Gootville/E263.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E264.xml b/data/Gootville/E264.xml new file mode 100644 index 00000000000..39141d956b3 --- /dev/null +++ b/data/Gootville/E264.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E26A.xml b/data/Gootville/E26A.xml new file mode 100644 index 00000000000..791582da0d8 --- /dev/null +++ b/data/Gootville/E26A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E26B.xml b/data/Gootville/E26B.xml new file mode 100644 index 00000000000..734ca0eb66c --- /dev/null +++ b/data/Gootville/E26B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E270.xml b/data/Gootville/E270.xml new file mode 100644 index 00000000000..092ccb9a9ed --- /dev/null +++ b/data/Gootville/E270.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E271.xml b/data/Gootville/E271.xml new file mode 100644 index 00000000000..5da33ce0ed0 --- /dev/null +++ b/data/Gootville/E271.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E272.xml b/data/Gootville/E272.xml new file mode 100644 index 00000000000..d02f6831798 --- /dev/null +++ b/data/Gootville/E272.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E273.xml b/data/Gootville/E273.xml new file mode 100644 index 00000000000..7866e5d84ac --- /dev/null +++ b/data/Gootville/E273.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E274.xml b/data/Gootville/E274.xml new file mode 100644 index 00000000000..16489408cbb --- /dev/null +++ b/data/Gootville/E274.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E275.xml b/data/Gootville/E275.xml new file mode 100644 index 00000000000..5b117055f15 --- /dev/null +++ b/data/Gootville/E275.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E280.xml b/data/Gootville/E280.xml new file mode 100644 index 00000000000..0a6767593b8 --- /dev/null +++ b/data/Gootville/E280.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E281.xml b/data/Gootville/E281.xml new file mode 100644 index 00000000000..50785a5956c --- /dev/null +++ b/data/Gootville/E281.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E282.xml b/data/Gootville/E282.xml new file mode 100644 index 00000000000..4c236db1eba --- /dev/null +++ b/data/Gootville/E282.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E283.xml b/data/Gootville/E283.xml new file mode 100644 index 00000000000..0bb5e90466a --- /dev/null +++ b/data/Gootville/E283.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E440.xml b/data/Gootville/E440.xml new file mode 100644 index 00000000000..131a0e241f6 --- /dev/null +++ b/data/Gootville/E440.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E441.xml b/data/Gootville/E441.xml new file mode 100644 index 00000000000..097fbf67cb8 --- /dev/null +++ b/data/Gootville/E441.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E442.xml b/data/Gootville/E442.xml new file mode 100644 index 00000000000..d30f136785e --- /dev/null +++ b/data/Gootville/E442.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E443.xml b/data/Gootville/E443.xml new file mode 100644 index 00000000000..19054ff8c86 --- /dev/null +++ b/data/Gootville/E443.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E444.xml b/data/Gootville/E444.xml new file mode 100644 index 00000000000..71e0ff096e5 --- /dev/null +++ b/data/Gootville/E444.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E445.xml b/data/Gootville/E445.xml new file mode 100644 index 00000000000..1610c948738 --- /dev/null +++ b/data/Gootville/E445.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E446.xml b/data/Gootville/E446.xml new file mode 100644 index 00000000000..8b6b0bf103b --- /dev/null +++ b/data/Gootville/E446.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E447.xml b/data/Gootville/E447.xml new file mode 100644 index 00000000000..5bc793bd0a0 --- /dev/null +++ b/data/Gootville/E447.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4A0.xml b/data/Gootville/E4A0.xml new file mode 100644 index 00000000000..e640fd8ff40 --- /dev/null +++ b/data/Gootville/E4A0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4A1.xml b/data/Gootville/E4A1.xml new file mode 100644 index 00000000000..b567e7b9a54 --- /dev/null +++ b/data/Gootville/E4A1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4A2.xml b/data/Gootville/E4A2.xml new file mode 100644 index 00000000000..d05b67a9897 --- /dev/null +++ b/data/Gootville/E4A2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4A3.xml b/data/Gootville/E4A3.xml new file mode 100644 index 00000000000..c40875ab855 --- /dev/null +++ b/data/Gootville/E4A3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4A4.xml b/data/Gootville/E4A4.xml new file mode 100644 index 00000000000..bef5ad6ccde --- /dev/null +++ b/data/Gootville/E4A4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4A5.xml b/data/Gootville/E4A5.xml new file mode 100644 index 00000000000..a0691486086 --- /dev/null +++ b/data/Gootville/E4A5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4A6.xml b/data/Gootville/E4A6.xml new file mode 100644 index 00000000000..26f31c21437 --- /dev/null +++ b/data/Gootville/E4A6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4A7.xml b/data/Gootville/E4A7.xml new file mode 100644 index 00000000000..5ef4d73d89f --- /dev/null +++ b/data/Gootville/E4A7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4A8.xml b/data/Gootville/E4A8.xml new file mode 100644 index 00000000000..20e63ca763e --- /dev/null +++ b/data/Gootville/E4A8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4A9.xml b/data/Gootville/E4A9.xml new file mode 100644 index 00000000000..cfb318f14fe --- /dev/null +++ b/data/Gootville/E4A9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4AC.xml b/data/Gootville/E4AC.xml new file mode 100644 index 00000000000..8acf3deeb28 --- /dev/null +++ b/data/Gootville/E4AC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4AD.xml b/data/Gootville/E4AD.xml new file mode 100644 index 00000000000..7915a3f8749 --- /dev/null +++ b/data/Gootville/E4AD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4B2.xml b/data/Gootville/E4B2.xml new file mode 100644 index 00000000000..6dd74043ff2 --- /dev/null +++ b/data/Gootville/E4B2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4B3.xml b/data/Gootville/E4B3.xml new file mode 100644 index 00000000000..aa8ce03ed85 --- /dev/null +++ b/data/Gootville/E4B3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4B6.xml b/data/Gootville/E4B6.xml new file mode 100644 index 00000000000..434833a38e4 --- /dev/null +++ b/data/Gootville/E4B6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4B7.xml b/data/Gootville/E4B7.xml new file mode 100644 index 00000000000..a03365b75d8 --- /dev/null +++ b/data/Gootville/E4B7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4C0.xml b/data/Gootville/E4C0.xml new file mode 100644 index 00000000000..17459e92c9a --- /dev/null +++ b/data/Gootville/E4C0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4C1.xml b/data/Gootville/E4C1.xml new file mode 100644 index 00000000000..abe34f78544 --- /dev/null +++ b/data/Gootville/E4C1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4C4.xml b/data/Gootville/E4C4.xml new file mode 100644 index 00000000000..0aa91735f94 --- /dev/null +++ b/data/Gootville/E4C4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4C5.xml b/data/Gootville/E4C5.xml new file mode 100644 index 00000000000..956aef6cf47 --- /dev/null +++ b/data/Gootville/E4C5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4C6.xml b/data/Gootville/E4C6.xml new file mode 100644 index 00000000000..84638699206 --- /dev/null +++ b/data/Gootville/E4C6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4C7.xml b/data/Gootville/E4C7.xml new file mode 100644 index 00000000000..51b61b9db3e --- /dev/null +++ b/data/Gootville/E4C7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4C8.xml b/data/Gootville/E4C8.xml new file mode 100644 index 00000000000..d287a438221 --- /dev/null +++ b/data/Gootville/E4C8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4C9.xml b/data/Gootville/E4C9.xml new file mode 100644 index 00000000000..60775a8bdae --- /dev/null +++ b/data/Gootville/E4C9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4CE.xml b/data/Gootville/E4CE.xml new file mode 100644 index 00000000000..8553904ee7f --- /dev/null +++ b/data/Gootville/E4CE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4E1.xml b/data/Gootville/E4E1.xml new file mode 100644 index 00000000000..c95cf900b13 --- /dev/null +++ b/data/Gootville/E4E1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4E2.xml b/data/Gootville/E4E2.xml new file mode 100644 index 00000000000..aa4d0b4a86d --- /dev/null +++ b/data/Gootville/E4E2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4E3.xml b/data/Gootville/E4E3.xml new file mode 100644 index 00000000000..b5852fe3d0c --- /dev/null +++ b/data/Gootville/E4E3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4E4.xml b/data/Gootville/E4E4.xml new file mode 100644 index 00000000000..1b9d00645d2 --- /dev/null +++ b/data/Gootville/E4E4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4E5.xml b/data/Gootville/E4E5.xml new file mode 100644 index 00000000000..a2c165a0201 --- /dev/null +++ b/data/Gootville/E4E5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4E6.xml b/data/Gootville/E4E6.xml new file mode 100644 index 00000000000..cd17a97a4f8 --- /dev/null +++ b/data/Gootville/E4E6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4E7.xml b/data/Gootville/E4E7.xml new file mode 100644 index 00000000000..f8c70d4173f --- /dev/null +++ b/data/Gootville/E4E7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4E8.xml b/data/Gootville/E4E8.xml new file mode 100644 index 00000000000..236e4f2b2d9 --- /dev/null +++ b/data/Gootville/E4E8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4E9.xml b/data/Gootville/E4E9.xml new file mode 100644 index 00000000000..731239cf08e --- /dev/null +++ b/data/Gootville/E4E9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4EA.xml b/data/Gootville/E4EA.xml new file mode 100644 index 00000000000..f3a00c79394 --- /dev/null +++ b/data/Gootville/E4EA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E4F2.xml b/data/Gootville/E4F2.xml new file mode 100644 index 00000000000..01b834dbad3 --- /dev/null +++ b/data/Gootville/E4F2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E510.xml b/data/Gootville/E510.xml new file mode 100644 index 00000000000..c43e156cb30 --- /dev/null +++ b/data/Gootville/E510.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E514.xml b/data/Gootville/E514.xml new file mode 100644 index 00000000000..6ef354c91f2 --- /dev/null +++ b/data/Gootville/E514.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E517.xml b/data/Gootville/E517.xml new file mode 100644 index 00000000000..aa652a8066f --- /dev/null +++ b/data/Gootville/E517.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E51A.xml b/data/Gootville/E51A.xml new file mode 100644 index 00000000000..d46fcf70960 --- /dev/null +++ b/data/Gootville/E51A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E51B.xml b/data/Gootville/E51B.xml new file mode 100644 index 00000000000..adc2b0a8aee --- /dev/null +++ b/data/Gootville/E51B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E520.xml b/data/Gootville/E520.xml new file mode 100644 index 00000000000..83a741659e4 --- /dev/null +++ b/data/Gootville/E520.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E521.xml b/data/Gootville/E521.xml new file mode 100644 index 00000000000..c78c01609e8 --- /dev/null +++ b/data/Gootville/E521.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E522.xml b/data/Gootville/E522.xml new file mode 100644 index 00000000000..79aa9a9b860 --- /dev/null +++ b/data/Gootville/E522.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E523.xml b/data/Gootville/E523.xml new file mode 100644 index 00000000000..fd7c826a0e7 --- /dev/null +++ b/data/Gootville/E523.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E524.xml b/data/Gootville/E524.xml new file mode 100644 index 00000000000..97459bd450c --- /dev/null +++ b/data/Gootville/E524.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E525.xml b/data/Gootville/E525.xml new file mode 100644 index 00000000000..172267d2a95 --- /dev/null +++ b/data/Gootville/E525.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E526.xml b/data/Gootville/E526.xml new file mode 100644 index 00000000000..732e3d0f3cc --- /dev/null +++ b/data/Gootville/E526.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E527.xml b/data/Gootville/E527.xml new file mode 100644 index 00000000000..70e61b7b609 --- /dev/null +++ b/data/Gootville/E527.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E528.xml b/data/Gootville/E528.xml new file mode 100644 index 00000000000..486ff01ab59 --- /dev/null +++ b/data/Gootville/E528.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E529.xml b/data/Gootville/E529.xml new file mode 100644 index 00000000000..f7c27724cfe --- /dev/null +++ b/data/Gootville/E529.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E52A.xml b/data/Gootville/E52A.xml new file mode 100644 index 00000000000..90047093b41 --- /dev/null +++ b/data/Gootville/E52A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E52B.xml b/data/Gootville/E52B.xml new file mode 100644 index 00000000000..83cfe851825 --- /dev/null +++ b/data/Gootville/E52B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E52C.xml b/data/Gootville/E52C.xml new file mode 100644 index 00000000000..7c7e1df8a41 --- /dev/null +++ b/data/Gootville/E52C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E52D.xml b/data/Gootville/E52D.xml new file mode 100644 index 00000000000..212fc84895d --- /dev/null +++ b/data/Gootville/E52D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E52E.xml b/data/Gootville/E52E.xml new file mode 100644 index 00000000000..8c524b9e5aa --- /dev/null +++ b/data/Gootville/E52E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E52F.xml b/data/Gootville/E52F.xml new file mode 100644 index 00000000000..5ed701ab470 --- /dev/null +++ b/data/Gootville/E52F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E530.xml b/data/Gootville/E530.xml new file mode 100644 index 00000000000..b9e6179c8b8 --- /dev/null +++ b/data/Gootville/E530.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E531.xml b/data/Gootville/E531.xml new file mode 100644 index 00000000000..4416b6a4a31 --- /dev/null +++ b/data/Gootville/E531.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E532.xml b/data/Gootville/E532.xml new file mode 100644 index 00000000000..e1ca7e2450c --- /dev/null +++ b/data/Gootville/E532.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E533.xml b/data/Gootville/E533.xml new file mode 100644 index 00000000000..1567edef9f5 --- /dev/null +++ b/data/Gootville/E533.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E534.xml b/data/Gootville/E534.xml new file mode 100644 index 00000000000..831d35f024f --- /dev/null +++ b/data/Gootville/E534.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E535.xml b/data/Gootville/E535.xml new file mode 100644 index 00000000000..17b6dc9a95c --- /dev/null +++ b/data/Gootville/E535.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E536.xml b/data/Gootville/E536.xml new file mode 100644 index 00000000000..3c23cf076e2 --- /dev/null +++ b/data/Gootville/E536.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E537.xml b/data/Gootville/E537.xml new file mode 100644 index 00000000000..1f6901fce9b --- /dev/null +++ b/data/Gootville/E537.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E538.xml b/data/Gootville/E538.xml new file mode 100644 index 00000000000..fe7d7af14ac --- /dev/null +++ b/data/Gootville/E538.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E539.xml b/data/Gootville/E539.xml new file mode 100644 index 00000000000..eefbaddfe0d --- /dev/null +++ b/data/Gootville/E539.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E53A.xml b/data/Gootville/E53A.xml new file mode 100644 index 00000000000..d481aa5eabc --- /dev/null +++ b/data/Gootville/E53A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E53B.xml b/data/Gootville/E53B.xml new file mode 100644 index 00000000000..ff8addeb9cb --- /dev/null +++ b/data/Gootville/E53B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E53C.xml b/data/Gootville/E53C.xml new file mode 100644 index 00000000000..98dc6fd66fd --- /dev/null +++ b/data/Gootville/E53C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E53D.xml b/data/Gootville/E53D.xml new file mode 100644 index 00000000000..ded5e610873 --- /dev/null +++ b/data/Gootville/E53D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E566.xml b/data/Gootville/E566.xml new file mode 100644 index 00000000000..603f200704a --- /dev/null +++ b/data/Gootville/E566.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E567.xml b/data/Gootville/E567.xml new file mode 100644 index 00000000000..78e5c88d4c2 --- /dev/null +++ b/data/Gootville/E567.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E568.xml b/data/Gootville/E568.xml new file mode 100644 index 00000000000..d01be9c0e09 --- /dev/null +++ b/data/Gootville/E568.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E569.xml b/data/Gootville/E569.xml new file mode 100644 index 00000000000..184917285a4 --- /dev/null +++ b/data/Gootville/E569.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E56C.xml b/data/Gootville/E56C.xml new file mode 100644 index 00000000000..e7ca005c45f --- /dev/null +++ b/data/Gootville/E56C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E56D.xml b/data/Gootville/E56D.xml new file mode 100644 index 00000000000..b613b750868 --- /dev/null +++ b/data/Gootville/E56D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E56E.xml b/data/Gootville/E56E.xml new file mode 100644 index 00000000000..d408a42a35d --- /dev/null +++ b/data/Gootville/E56E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E59D.xml b/data/Gootville/E59D.xml new file mode 100644 index 00000000000..65e5ba150b7 --- /dev/null +++ b/data/Gootville/E59D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E59E.xml b/data/Gootville/E59E.xml new file mode 100644 index 00000000000..36df459c5d6 --- /dev/null +++ b/data/Gootville/E59E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E5B0.xml b/data/Gootville/E5B0.xml new file mode 100644 index 00000000000..956ed913eaa --- /dev/null +++ b/data/Gootville/E5B0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E5E5.xml b/data/Gootville/E5E5.xml new file mode 100644 index 00000000000..7b21095c006 --- /dev/null +++ b/data/Gootville/E5E5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E5E7.xml b/data/Gootville/E5E7.xml new file mode 100644 index 00000000000..f71d555a08d --- /dev/null +++ b/data/Gootville/E5E7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E610.xml b/data/Gootville/E610.xml new file mode 100644 index 00000000000..2196d0319dd --- /dev/null +++ b/data/Gootville/E610.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E611.xml b/data/Gootville/E611.xml new file mode 100644 index 00000000000..467a379c20d --- /dev/null +++ b/data/Gootville/E611.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E612.xml b/data/Gootville/E612.xml new file mode 100644 index 00000000000..44ffa3a7b1b --- /dev/null +++ b/data/Gootville/E612.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E613.xml b/data/Gootville/E613.xml new file mode 100644 index 00000000000..db4dc1a7be5 --- /dev/null +++ b/data/Gootville/E613.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E630.xml b/data/Gootville/E630.xml new file mode 100644 index 00000000000..23a56972412 --- /dev/null +++ b/data/Gootville/E630.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E631.xml b/data/Gootville/E631.xml new file mode 100644 index 00000000000..515dde09c17 --- /dev/null +++ b/data/Gootville/E631.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E650.xml b/data/Gootville/E650.xml new file mode 100644 index 00000000000..1c05bdba0fe --- /dev/null +++ b/data/Gootville/E650.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E651.xml b/data/Gootville/E651.xml new file mode 100644 index 00000000000..1ed81aae9ff --- /dev/null +++ b/data/Gootville/E651.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/E655.xml b/data/Gootville/E655.xml new file mode 100644 index 00000000000..39b0948ab2d --- /dev/null +++ b/data/Gootville/E655.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/EAA4.xml b/data/Gootville/EAA4.xml new file mode 100644 index 00000000000..587642a89f9 --- /dev/null +++ b/data/Gootville/EAA4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/EAA9.xml b/data/Gootville/EAA9.xml new file mode 100644 index 00000000000..3065aac02a0 --- /dev/null +++ b/data/Gootville/EAA9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/EAAA.xml b/data/Gootville/EAAA.xml new file mode 100644 index 00000000000..90e2e61bbc0 --- /dev/null +++ b/data/Gootville/EAAA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/EAAD.xml b/data/Gootville/EAAD.xml new file mode 100644 index 00000000000..6f4e8397b32 --- /dev/null +++ b/data/Gootville/EAAD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/EAAE.xml b/data/Gootville/EAAE.xml new file mode 100644 index 00000000000..7960934c408 --- /dev/null +++ b/data/Gootville/EAAE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville/EAAF.xml b/data/Gootville/EAAF.xml new file mode 100644 index 00000000000..68b65585961 --- /dev/null +++ b/data/Gootville/EAAF.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig.xml b/data/Leipzig.xml new file mode 100644 index 00000000000..1e5728b9500 --- /dev/null +++ b/data/Leipzig.xml @@ -0,0 +1,520 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/Leipzig/E000.xml b/data/Leipzig/E000.xml new file mode 100644 index 00000000000..ee40a4ae68d --- /dev/null +++ b/data/Leipzig/E000.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E003.xml b/data/Leipzig/E003.xml new file mode 100644 index 00000000000..dc4dbf6884c --- /dev/null +++ b/data/Leipzig/E003.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E004.xml b/data/Leipzig/E004.xml new file mode 100644 index 00000000000..71e60f26f7a --- /dev/null +++ b/data/Leipzig/E004.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E043.xml b/data/Leipzig/E043.xml new file mode 100644 index 00000000000..79f1d041760 --- /dev/null +++ b/data/Leipzig/E043.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E044.xml b/data/Leipzig/E044.xml new file mode 100644 index 00000000000..121d29419e2 --- /dev/null +++ b/data/Leipzig/E044.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E045.xml b/data/Leipzig/E045.xml new file mode 100644 index 00000000000..a79e7c8a8f1 --- /dev/null +++ b/data/Leipzig/E045.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E046.xml b/data/Leipzig/E046.xml new file mode 100644 index 00000000000..ebc8855f58d --- /dev/null +++ b/data/Leipzig/E046.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E047.xml b/data/Leipzig/E047.xml new file mode 100644 index 00000000000..fc521039882 --- /dev/null +++ b/data/Leipzig/E047.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E048.xml b/data/Leipzig/E048.xml new file mode 100644 index 00000000000..c61b6768fbe --- /dev/null +++ b/data/Leipzig/E048.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E049.xml b/data/Leipzig/E049.xml new file mode 100644 index 00000000000..903eb9ff943 --- /dev/null +++ b/data/Leipzig/E049.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E04B.xml b/data/Leipzig/E04B.xml new file mode 100644 index 00000000000..75a91435d82 --- /dev/null +++ b/data/Leipzig/E04B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E050.xml b/data/Leipzig/E050.xml new file mode 100644 index 00000000000..bb907603b16 --- /dev/null +++ b/data/Leipzig/E050.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E051.xml b/data/Leipzig/E051.xml new file mode 100644 index 00000000000..0840721dc59 --- /dev/null +++ b/data/Leipzig/E051.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E052.xml b/data/Leipzig/E052.xml new file mode 100644 index 00000000000..2326ab611b1 --- /dev/null +++ b/data/Leipzig/E052.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E053.xml b/data/Leipzig/E053.xml new file mode 100644 index 00000000000..476ff3fb759 --- /dev/null +++ b/data/Leipzig/E053.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E054.xml b/data/Leipzig/E054.xml new file mode 100644 index 00000000000..a0c7623782e --- /dev/null +++ b/data/Leipzig/E054.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E055.xml b/data/Leipzig/E055.xml new file mode 100644 index 00000000000..79329dca733 --- /dev/null +++ b/data/Leipzig/E055.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E056.xml b/data/Leipzig/E056.xml new file mode 100644 index 00000000000..153bb8ca5e9 --- /dev/null +++ b/data/Leipzig/E056.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E05C.xml b/data/Leipzig/E05C.xml new file mode 100644 index 00000000000..986961f4fd9 --- /dev/null +++ b/data/Leipzig/E05C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E05D.xml b/data/Leipzig/E05D.xml new file mode 100644 index 00000000000..b52dc253acc --- /dev/null +++ b/data/Leipzig/E05D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E062.xml b/data/Leipzig/E062.xml new file mode 100644 index 00000000000..e1c6fa6e59c --- /dev/null +++ b/data/Leipzig/E062.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E063.xml b/data/Leipzig/E063.xml new file mode 100644 index 00000000000..cfcd744ef03 --- /dev/null +++ b/data/Leipzig/E063.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E064.xml b/data/Leipzig/E064.xml new file mode 100644 index 00000000000..7919efed85f --- /dev/null +++ b/data/Leipzig/E064.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E065.xml b/data/Leipzig/E065.xml new file mode 100644 index 00000000000..c2279647ac0 --- /dev/null +++ b/data/Leipzig/E065.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E066.xml b/data/Leipzig/E066.xml new file mode 100644 index 00000000000..fcbc1a6820b --- /dev/null +++ b/data/Leipzig/E066.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E069.xml b/data/Leipzig/E069.xml new file mode 100644 index 00000000000..28ee32250ef --- /dev/null +++ b/data/Leipzig/E069.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E06A.xml b/data/Leipzig/E06A.xml new file mode 100644 index 00000000000..0ead9c5cf05 --- /dev/null +++ b/data/Leipzig/E06A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E073.xml b/data/Leipzig/E073.xml new file mode 100644 index 00000000000..dfd821b83e4 --- /dev/null +++ b/data/Leipzig/E073.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E074.xml b/data/Leipzig/E074.xml new file mode 100644 index 00000000000..c839fc17c58 --- /dev/null +++ b/data/Leipzig/E074.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E075.xml b/data/Leipzig/E075.xml new file mode 100644 index 00000000000..6b6de9e38cb --- /dev/null +++ b/data/Leipzig/E075.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E076.xml b/data/Leipzig/E076.xml new file mode 100644 index 00000000000..febfd9bfb21 --- /dev/null +++ b/data/Leipzig/E076.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E077.xml b/data/Leipzig/E077.xml new file mode 100644 index 00000000000..39e2d82724f --- /dev/null +++ b/data/Leipzig/E077.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E080.xml b/data/Leipzig/E080.xml new file mode 100644 index 00000000000..774c04eaa40 --- /dev/null +++ b/data/Leipzig/E080.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E081.xml b/data/Leipzig/E081.xml new file mode 100644 index 00000000000..e8ef10b512a --- /dev/null +++ b/data/Leipzig/E081.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E082.xml b/data/Leipzig/E082.xml new file mode 100644 index 00000000000..c5831005195 --- /dev/null +++ b/data/Leipzig/E082.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E083.xml b/data/Leipzig/E083.xml new file mode 100644 index 00000000000..851a0b47c86 --- /dev/null +++ b/data/Leipzig/E083.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E084.xml b/data/Leipzig/E084.xml new file mode 100644 index 00000000000..87926416c61 --- /dev/null +++ b/data/Leipzig/E084.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E085.xml b/data/Leipzig/E085.xml new file mode 100644 index 00000000000..6d54d5adf44 --- /dev/null +++ b/data/Leipzig/E085.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E086.xml b/data/Leipzig/E086.xml new file mode 100644 index 00000000000..b42ea710a86 --- /dev/null +++ b/data/Leipzig/E086.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E087.xml b/data/Leipzig/E087.xml new file mode 100644 index 00000000000..d82df2b1842 --- /dev/null +++ b/data/Leipzig/E087.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E088.xml b/data/Leipzig/E088.xml new file mode 100644 index 00000000000..1d39c75d726 --- /dev/null +++ b/data/Leipzig/E088.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E089.xml b/data/Leipzig/E089.xml new file mode 100644 index 00000000000..28c912f02f6 --- /dev/null +++ b/data/Leipzig/E089.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E08A.xml b/data/Leipzig/E08A.xml new file mode 100644 index 00000000000..e95bfbb8581 --- /dev/null +++ b/data/Leipzig/E08A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E08B.xml b/data/Leipzig/E08B.xml new file mode 100644 index 00000000000..c80af29e36d --- /dev/null +++ b/data/Leipzig/E08B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E08C.xml b/data/Leipzig/E08C.xml new file mode 100644 index 00000000000..c2d064af7fd --- /dev/null +++ b/data/Leipzig/E08C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E08D.xml b/data/Leipzig/E08D.xml new file mode 100644 index 00000000000..2dca98389ea --- /dev/null +++ b/data/Leipzig/E08D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E08E.xml b/data/Leipzig/E08E.xml new file mode 100644 index 00000000000..d009f9f1d37 --- /dev/null +++ b/data/Leipzig/E08E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E08F.xml b/data/Leipzig/E08F.xml new file mode 100644 index 00000000000..95a1b7cad89 --- /dev/null +++ b/data/Leipzig/E08F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E090.xml b/data/Leipzig/E090.xml new file mode 100644 index 00000000000..980d6781f2d --- /dev/null +++ b/data/Leipzig/E090.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E091.xml b/data/Leipzig/E091.xml new file mode 100644 index 00000000000..b4dd0f04217 --- /dev/null +++ b/data/Leipzig/E091.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E092.xml b/data/Leipzig/E092.xml new file mode 100644 index 00000000000..850beb5c617 --- /dev/null +++ b/data/Leipzig/E092.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E093.xml b/data/Leipzig/E093.xml new file mode 100644 index 00000000000..e96fb38e7d3 --- /dev/null +++ b/data/Leipzig/E093.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E094.xml b/data/Leipzig/E094.xml new file mode 100644 index 00000000000..c4f34ebfee5 --- /dev/null +++ b/data/Leipzig/E094.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E095.xml b/data/Leipzig/E095.xml new file mode 100644 index 00000000000..181540122be --- /dev/null +++ b/data/Leipzig/E095.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0A0.xml b/data/Leipzig/E0A0.xml new file mode 100644 index 00000000000..46709993076 --- /dev/null +++ b/data/Leipzig/E0A0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0A1.xml b/data/Leipzig/E0A1.xml new file mode 100644 index 00000000000..ed1202288a2 --- /dev/null +++ b/data/Leipzig/E0A1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0A2.xml b/data/Leipzig/E0A2.xml new file mode 100644 index 00000000000..ee3a553f18f --- /dev/null +++ b/data/Leipzig/E0A2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0A3.xml b/data/Leipzig/E0A3.xml new file mode 100644 index 00000000000..b35092c3d85 --- /dev/null +++ b/data/Leipzig/E0A3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0A4.xml b/data/Leipzig/E0A4.xml new file mode 100644 index 00000000000..766e14b63ad --- /dev/null +++ b/data/Leipzig/E0A4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0A5.xml b/data/Leipzig/E0A5.xml new file mode 100644 index 00000000000..d4eec1c1f60 --- /dev/null +++ b/data/Leipzig/E0A5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0A9.xml b/data/Leipzig/E0A9.xml new file mode 100644 index 00000000000..6ec70417a2f --- /dev/null +++ b/data/Leipzig/E0A9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0AF.xml b/data/Leipzig/E0AF.xml new file mode 100644 index 00000000000..4451f39844a --- /dev/null +++ b/data/Leipzig/E0AF.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0B5.xml b/data/Leipzig/E0B5.xml new file mode 100644 index 00000000000..67cb3abdd4f --- /dev/null +++ b/data/Leipzig/E0B5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0B6.xml b/data/Leipzig/E0B6.xml new file mode 100644 index 00000000000..dc399f97c5d --- /dev/null +++ b/data/Leipzig/E0B6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0B7.xml b/data/Leipzig/E0B7.xml new file mode 100644 index 00000000000..734dd9fa23e --- /dev/null +++ b/data/Leipzig/E0B7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0D9.xml b/data/Leipzig/E0D9.xml new file mode 100644 index 00000000000..bf567413bb2 --- /dev/null +++ b/data/Leipzig/E0D9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0DA.xml b/data/Leipzig/E0DA.xml new file mode 100644 index 00000000000..7ee9f876bbe --- /dev/null +++ b/data/Leipzig/E0DA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0DB.xml b/data/Leipzig/E0DB.xml new file mode 100644 index 00000000000..320385ccbe8 --- /dev/null +++ b/data/Leipzig/E0DB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0DC.xml b/data/Leipzig/E0DC.xml new file mode 100644 index 00000000000..28cc353cca3 --- /dev/null +++ b/data/Leipzig/E0DC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0DD.xml b/data/Leipzig/E0DD.xml new file mode 100644 index 00000000000..f6ac59f5dc8 --- /dev/null +++ b/data/Leipzig/E0DD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0DE.xml b/data/Leipzig/E0DE.xml new file mode 100644 index 00000000000..7d33356f96e --- /dev/null +++ b/data/Leipzig/E0DE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0F5.xml b/data/Leipzig/E0F5.xml new file mode 100644 index 00000000000..247186a31f9 --- /dev/null +++ b/data/Leipzig/E0F5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0F6.xml b/data/Leipzig/E0F6.xml new file mode 100644 index 00000000000..b95b58e8cc5 --- /dev/null +++ b/data/Leipzig/E0F6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E0FA.xml b/data/Leipzig/E0FA.xml new file mode 100644 index 00000000000..c0b9e3e365a --- /dev/null +++ b/data/Leipzig/E0FA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E101.xml b/data/Leipzig/E101.xml new file mode 100644 index 00000000000..9f12de4e33c --- /dev/null +++ b/data/Leipzig/E101.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E102.xml b/data/Leipzig/E102.xml new file mode 100644 index 00000000000..da640868416 --- /dev/null +++ b/data/Leipzig/E102.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E103.xml b/data/Leipzig/E103.xml new file mode 100644 index 00000000000..af6c48241b6 --- /dev/null +++ b/data/Leipzig/E103.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E220.xml b/data/Leipzig/E220.xml new file mode 100644 index 00000000000..7491a28653c --- /dev/null +++ b/data/Leipzig/E220.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E221.xml b/data/Leipzig/E221.xml new file mode 100644 index 00000000000..7ecf2e5c567 --- /dev/null +++ b/data/Leipzig/E221.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E222.xml b/data/Leipzig/E222.xml new file mode 100644 index 00000000000..14740c04764 --- /dev/null +++ b/data/Leipzig/E222.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E223.xml b/data/Leipzig/E223.xml new file mode 100644 index 00000000000..bce091c85ab --- /dev/null +++ b/data/Leipzig/E223.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E224.xml b/data/Leipzig/E224.xml new file mode 100644 index 00000000000..25a059530bd --- /dev/null +++ b/data/Leipzig/E224.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E22A.xml b/data/Leipzig/E22A.xml new file mode 100644 index 00000000000..d4f04974f73 --- /dev/null +++ b/data/Leipzig/E22A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E240.xml b/data/Leipzig/E240.xml new file mode 100644 index 00000000000..90308936b73 --- /dev/null +++ b/data/Leipzig/E240.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E241.xml b/data/Leipzig/E241.xml new file mode 100644 index 00000000000..3f6225da141 --- /dev/null +++ b/data/Leipzig/E241.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E242.xml b/data/Leipzig/E242.xml new file mode 100644 index 00000000000..bb424434995 --- /dev/null +++ b/data/Leipzig/E242.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E243.xml b/data/Leipzig/E243.xml new file mode 100644 index 00000000000..ff96e16fe50 --- /dev/null +++ b/data/Leipzig/E243.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E244.xml b/data/Leipzig/E244.xml new file mode 100644 index 00000000000..7c39d4e86df --- /dev/null +++ b/data/Leipzig/E244.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E245.xml b/data/Leipzig/E245.xml new file mode 100644 index 00000000000..ec32faece35 --- /dev/null +++ b/data/Leipzig/E245.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E246.xml b/data/Leipzig/E246.xml new file mode 100644 index 00000000000..183374954ac --- /dev/null +++ b/data/Leipzig/E246.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E247.xml b/data/Leipzig/E247.xml new file mode 100644 index 00000000000..8cc61777dc1 --- /dev/null +++ b/data/Leipzig/E247.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E248.xml b/data/Leipzig/E248.xml new file mode 100644 index 00000000000..e3c1b295eb9 --- /dev/null +++ b/data/Leipzig/E248.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E249.xml b/data/Leipzig/E249.xml new file mode 100644 index 00000000000..7b44cc50f2a --- /dev/null +++ b/data/Leipzig/E249.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E24A.xml b/data/Leipzig/E24A.xml new file mode 100644 index 00000000000..0a218ade402 --- /dev/null +++ b/data/Leipzig/E24A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E24B.xml b/data/Leipzig/E24B.xml new file mode 100644 index 00000000000..a0f86824d2b --- /dev/null +++ b/data/Leipzig/E24B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E24C.xml b/data/Leipzig/E24C.xml new file mode 100644 index 00000000000..606ce879946 --- /dev/null +++ b/data/Leipzig/E24C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E24D.xml b/data/Leipzig/E24D.xml new file mode 100644 index 00000000000..313822e5ddd --- /dev/null +++ b/data/Leipzig/E24D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E24E.xml b/data/Leipzig/E24E.xml new file mode 100644 index 00000000000..ce531d8919a --- /dev/null +++ b/data/Leipzig/E24E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E24F.xml b/data/Leipzig/E24F.xml new file mode 100644 index 00000000000..f6aa8bf200a --- /dev/null +++ b/data/Leipzig/E24F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E260.xml b/data/Leipzig/E260.xml new file mode 100644 index 00000000000..8f52352ffbd --- /dev/null +++ b/data/Leipzig/E260.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E261.xml b/data/Leipzig/E261.xml new file mode 100644 index 00000000000..0bc446d747e --- /dev/null +++ b/data/Leipzig/E261.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E262.xml b/data/Leipzig/E262.xml new file mode 100644 index 00000000000..9812736d4cb --- /dev/null +++ b/data/Leipzig/E262.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E263.xml b/data/Leipzig/E263.xml new file mode 100644 index 00000000000..e74cac5669a --- /dev/null +++ b/data/Leipzig/E263.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E264.xml b/data/Leipzig/E264.xml new file mode 100644 index 00000000000..5d433974d33 --- /dev/null +++ b/data/Leipzig/E264.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E265.xml b/data/Leipzig/E265.xml new file mode 100644 index 00000000000..f93b387fe0a --- /dev/null +++ b/data/Leipzig/E265.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E266.xml b/data/Leipzig/E266.xml new file mode 100644 index 00000000000..c2db7087464 --- /dev/null +++ b/data/Leipzig/E266.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E267.xml b/data/Leipzig/E267.xml new file mode 100644 index 00000000000..9fdab8681d7 --- /dev/null +++ b/data/Leipzig/E267.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E268.xml b/data/Leipzig/E268.xml new file mode 100644 index 00000000000..7ba63f68c6f --- /dev/null +++ b/data/Leipzig/E268.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E269.xml b/data/Leipzig/E269.xml new file mode 100644 index 00000000000..63b696850c4 --- /dev/null +++ b/data/Leipzig/E269.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E26A.xml b/data/Leipzig/E26A.xml new file mode 100644 index 00000000000..d587185ff28 --- /dev/null +++ b/data/Leipzig/E26A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E26B.xml b/data/Leipzig/E26B.xml new file mode 100644 index 00000000000..443706c84ee --- /dev/null +++ b/data/Leipzig/E26B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E26C.xml b/data/Leipzig/E26C.xml new file mode 100644 index 00000000000..de7ab956f22 --- /dev/null +++ b/data/Leipzig/E26C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E26D.xml b/data/Leipzig/E26D.xml new file mode 100644 index 00000000000..c8355fa5db2 --- /dev/null +++ b/data/Leipzig/E26D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E270.xml b/data/Leipzig/E270.xml new file mode 100644 index 00000000000..4e34d40d09b --- /dev/null +++ b/data/Leipzig/E270.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E271.xml b/data/Leipzig/E271.xml new file mode 100644 index 00000000000..a9241c71035 --- /dev/null +++ b/data/Leipzig/E271.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E272.xml b/data/Leipzig/E272.xml new file mode 100644 index 00000000000..54815648904 --- /dev/null +++ b/data/Leipzig/E272.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E273.xml b/data/Leipzig/E273.xml new file mode 100644 index 00000000000..035cf744333 --- /dev/null +++ b/data/Leipzig/E273.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E274.xml b/data/Leipzig/E274.xml new file mode 100644 index 00000000000..ac361f468c5 --- /dev/null +++ b/data/Leipzig/E274.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E275.xml b/data/Leipzig/E275.xml new file mode 100644 index 00000000000..f6633db24c0 --- /dev/null +++ b/data/Leipzig/E275.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E280.xml b/data/Leipzig/E280.xml new file mode 100644 index 00000000000..4c30b04f3c4 --- /dev/null +++ b/data/Leipzig/E280.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E281.xml b/data/Leipzig/E281.xml new file mode 100644 index 00000000000..b5f51c424e2 --- /dev/null +++ b/data/Leipzig/E281.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E282.xml b/data/Leipzig/E282.xml new file mode 100644 index 00000000000..56c857a8440 --- /dev/null +++ b/data/Leipzig/E282.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E283.xml b/data/Leipzig/E283.xml new file mode 100644 index 00000000000..373b8fb811a --- /dev/null +++ b/data/Leipzig/E283.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E440.xml b/data/Leipzig/E440.xml new file mode 100644 index 00000000000..47b9017ab86 --- /dev/null +++ b/data/Leipzig/E440.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E441.xml b/data/Leipzig/E441.xml new file mode 100644 index 00000000000..7a82968d2fb --- /dev/null +++ b/data/Leipzig/E441.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E442.xml b/data/Leipzig/E442.xml new file mode 100644 index 00000000000..2431c33165f --- /dev/null +++ b/data/Leipzig/E442.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E443.xml b/data/Leipzig/E443.xml new file mode 100644 index 00000000000..f7470244b70 --- /dev/null +++ b/data/Leipzig/E443.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E444.xml b/data/Leipzig/E444.xml new file mode 100644 index 00000000000..93a95ea433a --- /dev/null +++ b/data/Leipzig/E444.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E445.xml b/data/Leipzig/E445.xml new file mode 100644 index 00000000000..475a0b72981 --- /dev/null +++ b/data/Leipzig/E445.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E446.xml b/data/Leipzig/E446.xml new file mode 100644 index 00000000000..a8900b11682 --- /dev/null +++ b/data/Leipzig/E446.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E447.xml b/data/Leipzig/E447.xml new file mode 100644 index 00000000000..805ed2f009e --- /dev/null +++ b/data/Leipzig/E447.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4A0.xml b/data/Leipzig/E4A0.xml new file mode 100644 index 00000000000..2c643e6e319 --- /dev/null +++ b/data/Leipzig/E4A0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4A1.xml b/data/Leipzig/E4A1.xml new file mode 100644 index 00000000000..412d830abb0 --- /dev/null +++ b/data/Leipzig/E4A1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4A2.xml b/data/Leipzig/E4A2.xml new file mode 100644 index 00000000000..7b7f04986fc --- /dev/null +++ b/data/Leipzig/E4A2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4A3.xml b/data/Leipzig/E4A3.xml new file mode 100644 index 00000000000..db930247893 --- /dev/null +++ b/data/Leipzig/E4A3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4A4.xml b/data/Leipzig/E4A4.xml new file mode 100644 index 00000000000..c21ec03c2d2 --- /dev/null +++ b/data/Leipzig/E4A4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4A5.xml b/data/Leipzig/E4A5.xml new file mode 100644 index 00000000000..e223e7b7049 --- /dev/null +++ b/data/Leipzig/E4A5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4A6.xml b/data/Leipzig/E4A6.xml new file mode 100644 index 00000000000..b81e6d59bc6 --- /dev/null +++ b/data/Leipzig/E4A6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4A7.xml b/data/Leipzig/E4A7.xml new file mode 100644 index 00000000000..e3329d6e5cf --- /dev/null +++ b/data/Leipzig/E4A7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4A8.xml b/data/Leipzig/E4A8.xml new file mode 100644 index 00000000000..f1ee882ca34 --- /dev/null +++ b/data/Leipzig/E4A8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4A9.xml b/data/Leipzig/E4A9.xml new file mode 100644 index 00000000000..a2150dba050 --- /dev/null +++ b/data/Leipzig/E4A9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4AA.xml b/data/Leipzig/E4AA.xml new file mode 100644 index 00000000000..5666d6277dd --- /dev/null +++ b/data/Leipzig/E4AA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4AB.xml b/data/Leipzig/E4AB.xml new file mode 100644 index 00000000000..c6e575caf08 --- /dev/null +++ b/data/Leipzig/E4AB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4AC.xml b/data/Leipzig/E4AC.xml new file mode 100644 index 00000000000..fd1782f4843 --- /dev/null +++ b/data/Leipzig/E4AC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4AD.xml b/data/Leipzig/E4AD.xml new file mode 100644 index 00000000000..692609527bf --- /dev/null +++ b/data/Leipzig/E4AD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4AE.xml b/data/Leipzig/E4AE.xml new file mode 100644 index 00000000000..f73e2f1c53c --- /dev/null +++ b/data/Leipzig/E4AE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4AF.xml b/data/Leipzig/E4AF.xml new file mode 100644 index 00000000000..2b594423aca --- /dev/null +++ b/data/Leipzig/E4AF.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4B0.xml b/data/Leipzig/E4B0.xml new file mode 100644 index 00000000000..53ce9d6d480 --- /dev/null +++ b/data/Leipzig/E4B0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4B1.xml b/data/Leipzig/E4B1.xml new file mode 100644 index 00000000000..ad1a4a840ee --- /dev/null +++ b/data/Leipzig/E4B1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4B2.xml b/data/Leipzig/E4B2.xml new file mode 100644 index 00000000000..49b9a0dfc88 --- /dev/null +++ b/data/Leipzig/E4B2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4B3.xml b/data/Leipzig/E4B3.xml new file mode 100644 index 00000000000..3ebb924a391 --- /dev/null +++ b/data/Leipzig/E4B3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4B4.xml b/data/Leipzig/E4B4.xml new file mode 100644 index 00000000000..e77f801d82a --- /dev/null +++ b/data/Leipzig/E4B4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4B5.xml b/data/Leipzig/E4B5.xml new file mode 100644 index 00000000000..5a887b70d83 --- /dev/null +++ b/data/Leipzig/E4B5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4B6.xml b/data/Leipzig/E4B6.xml new file mode 100644 index 00000000000..53bcadeb16f --- /dev/null +++ b/data/Leipzig/E4B6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4B7.xml b/data/Leipzig/E4B7.xml new file mode 100644 index 00000000000..8c19a5c022f --- /dev/null +++ b/data/Leipzig/E4B7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4B8.xml b/data/Leipzig/E4B8.xml new file mode 100644 index 00000000000..05e328b8da1 --- /dev/null +++ b/data/Leipzig/E4B8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4B9.xml b/data/Leipzig/E4B9.xml new file mode 100644 index 00000000000..bf2c82f7e3a --- /dev/null +++ b/data/Leipzig/E4B9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4BA.xml b/data/Leipzig/E4BA.xml new file mode 100644 index 00000000000..9d4aaeb340e --- /dev/null +++ b/data/Leipzig/E4BA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4BB.xml b/data/Leipzig/E4BB.xml new file mode 100644 index 00000000000..4cd7fd2a0e2 --- /dev/null +++ b/data/Leipzig/E4BB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4BC.xml b/data/Leipzig/E4BC.xml new file mode 100644 index 00000000000..8fba4a617f9 --- /dev/null +++ b/data/Leipzig/E4BC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4BD.xml b/data/Leipzig/E4BD.xml new file mode 100644 index 00000000000..c01a75a681e --- /dev/null +++ b/data/Leipzig/E4BD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4C0.xml b/data/Leipzig/E4C0.xml new file mode 100644 index 00000000000..e01d017c229 --- /dev/null +++ b/data/Leipzig/E4C0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4C1.xml b/data/Leipzig/E4C1.xml new file mode 100644 index 00000000000..2a3b1e92ae2 --- /dev/null +++ b/data/Leipzig/E4C1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4C2.xml b/data/Leipzig/E4C2.xml new file mode 100644 index 00000000000..ed782a3b7b2 --- /dev/null +++ b/data/Leipzig/E4C2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4C3.xml b/data/Leipzig/E4C3.xml new file mode 100644 index 00000000000..df42a8beda3 --- /dev/null +++ b/data/Leipzig/E4C3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4C4.xml b/data/Leipzig/E4C4.xml new file mode 100644 index 00000000000..dea5d1d81cd --- /dev/null +++ b/data/Leipzig/E4C4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4C5.xml b/data/Leipzig/E4C5.xml new file mode 100644 index 00000000000..49ad74a3142 --- /dev/null +++ b/data/Leipzig/E4C5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4C6.xml b/data/Leipzig/E4C6.xml new file mode 100644 index 00000000000..6fa8c15b87c --- /dev/null +++ b/data/Leipzig/E4C6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4C7.xml b/data/Leipzig/E4C7.xml new file mode 100644 index 00000000000..85ac1c3af0a --- /dev/null +++ b/data/Leipzig/E4C7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4C8.xml b/data/Leipzig/E4C8.xml new file mode 100644 index 00000000000..51fb8953785 --- /dev/null +++ b/data/Leipzig/E4C8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4C9.xml b/data/Leipzig/E4C9.xml new file mode 100644 index 00000000000..a9338aac251 --- /dev/null +++ b/data/Leipzig/E4C9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4CE.xml b/data/Leipzig/E4CE.xml new file mode 100644 index 00000000000..b87beec6aba --- /dev/null +++ b/data/Leipzig/E4CE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4E0.xml b/data/Leipzig/E4E0.xml new file mode 100644 index 00000000000..90edf6c8f91 --- /dev/null +++ b/data/Leipzig/E4E0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4E1.xml b/data/Leipzig/E4E1.xml new file mode 100644 index 00000000000..2d352616311 --- /dev/null +++ b/data/Leipzig/E4E1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4E2.xml b/data/Leipzig/E4E2.xml new file mode 100644 index 00000000000..9459538de1c --- /dev/null +++ b/data/Leipzig/E4E2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4E3.xml b/data/Leipzig/E4E3.xml new file mode 100644 index 00000000000..983504741df --- /dev/null +++ b/data/Leipzig/E4E3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4E4.xml b/data/Leipzig/E4E4.xml new file mode 100644 index 00000000000..8f539fb963b --- /dev/null +++ b/data/Leipzig/E4E4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4E5.xml b/data/Leipzig/E4E5.xml new file mode 100644 index 00000000000..8a4ab2d1738 --- /dev/null +++ b/data/Leipzig/E4E5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4E6.xml b/data/Leipzig/E4E6.xml new file mode 100644 index 00000000000..ae2914283e2 --- /dev/null +++ b/data/Leipzig/E4E6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4E7.xml b/data/Leipzig/E4E7.xml new file mode 100644 index 00000000000..b5402534b2d --- /dev/null +++ b/data/Leipzig/E4E7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4E8.xml b/data/Leipzig/E4E8.xml new file mode 100644 index 00000000000..2149ba88754 --- /dev/null +++ b/data/Leipzig/E4E8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4E9.xml b/data/Leipzig/E4E9.xml new file mode 100644 index 00000000000..881e7f4e8f9 --- /dev/null +++ b/data/Leipzig/E4E9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4EA.xml b/data/Leipzig/E4EA.xml new file mode 100644 index 00000000000..8f810ceb0d0 --- /dev/null +++ b/data/Leipzig/E4EA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4EB.xml b/data/Leipzig/E4EB.xml new file mode 100644 index 00000000000..f9ef1ffc7f2 --- /dev/null +++ b/data/Leipzig/E4EB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4EC.xml b/data/Leipzig/E4EC.xml new file mode 100644 index 00000000000..d32fe899157 --- /dev/null +++ b/data/Leipzig/E4EC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4ED.xml b/data/Leipzig/E4ED.xml new file mode 100644 index 00000000000..c3bd245be22 --- /dev/null +++ b/data/Leipzig/E4ED.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4F2.xml b/data/Leipzig/E4F2.xml new file mode 100644 index 00000000000..aa978df7616 --- /dev/null +++ b/data/Leipzig/E4F2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E4F6.xml b/data/Leipzig/E4F6.xml new file mode 100644 index 00000000000..a6d69cc636c --- /dev/null +++ b/data/Leipzig/E4F6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E500.xml b/data/Leipzig/E500.xml new file mode 100644 index 00000000000..41ed8782814 --- /dev/null +++ b/data/Leipzig/E500.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E501.xml b/data/Leipzig/E501.xml new file mode 100644 index 00000000000..d73f01cae94 --- /dev/null +++ b/data/Leipzig/E501.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E502.xml b/data/Leipzig/E502.xml new file mode 100644 index 00000000000..6c3707684b0 --- /dev/null +++ b/data/Leipzig/E502.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E503.xml b/data/Leipzig/E503.xml new file mode 100644 index 00000000000..ec92476a080 --- /dev/null +++ b/data/Leipzig/E503.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E504.xml b/data/Leipzig/E504.xml new file mode 100644 index 00000000000..6d77f56c5cd --- /dev/null +++ b/data/Leipzig/E504.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E505.xml b/data/Leipzig/E505.xml new file mode 100644 index 00000000000..82077c61fc3 --- /dev/null +++ b/data/Leipzig/E505.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E510.xml b/data/Leipzig/E510.xml new file mode 100644 index 00000000000..4b0541f7d05 --- /dev/null +++ b/data/Leipzig/E510.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E511.xml b/data/Leipzig/E511.xml new file mode 100644 index 00000000000..28829cd95c4 --- /dev/null +++ b/data/Leipzig/E511.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E512.xml b/data/Leipzig/E512.xml new file mode 100644 index 00000000000..5148f25089a --- /dev/null +++ b/data/Leipzig/E512.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E513.xml b/data/Leipzig/E513.xml new file mode 100644 index 00000000000..8047d777ef3 --- /dev/null +++ b/data/Leipzig/E513.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E514.xml b/data/Leipzig/E514.xml new file mode 100644 index 00000000000..e1ea7f3bb0b --- /dev/null +++ b/data/Leipzig/E514.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E515.xml b/data/Leipzig/E515.xml new file mode 100644 index 00000000000..2e093747da3 --- /dev/null +++ b/data/Leipzig/E515.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E516.xml b/data/Leipzig/E516.xml new file mode 100644 index 00000000000..91f4bd9d5eb --- /dev/null +++ b/data/Leipzig/E516.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E517.xml b/data/Leipzig/E517.xml new file mode 100644 index 00000000000..bd3819f299f --- /dev/null +++ b/data/Leipzig/E517.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E518.xml b/data/Leipzig/E518.xml new file mode 100644 index 00000000000..f7a08516f27 --- /dev/null +++ b/data/Leipzig/E518.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E519.xml b/data/Leipzig/E519.xml new file mode 100644 index 00000000000..3782a885e32 --- /dev/null +++ b/data/Leipzig/E519.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E51A.xml b/data/Leipzig/E51A.xml new file mode 100644 index 00000000000..3f77661be12 --- /dev/null +++ b/data/Leipzig/E51A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E51B.xml b/data/Leipzig/E51B.xml new file mode 100644 index 00000000000..9bd6efaad07 --- /dev/null +++ b/data/Leipzig/E51B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E51C.xml b/data/Leipzig/E51C.xml new file mode 100644 index 00000000000..88df166fc4b --- /dev/null +++ b/data/Leipzig/E51C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E51D.xml b/data/Leipzig/E51D.xml new file mode 100644 index 00000000000..7f9af3643d2 --- /dev/null +++ b/data/Leipzig/E51D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E51E.xml b/data/Leipzig/E51E.xml new file mode 100644 index 00000000000..39ec919559b --- /dev/null +++ b/data/Leipzig/E51E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E520.xml b/data/Leipzig/E520.xml new file mode 100644 index 00000000000..2e112af05aa --- /dev/null +++ b/data/Leipzig/E520.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E521.xml b/data/Leipzig/E521.xml new file mode 100644 index 00000000000..04d9ce80d1d --- /dev/null +++ b/data/Leipzig/E521.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E522.xml b/data/Leipzig/E522.xml new file mode 100644 index 00000000000..b007485b28f --- /dev/null +++ b/data/Leipzig/E522.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E523.xml b/data/Leipzig/E523.xml new file mode 100644 index 00000000000..2ac61ae2cb9 --- /dev/null +++ b/data/Leipzig/E523.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E524.xml b/data/Leipzig/E524.xml new file mode 100644 index 00000000000..af37987cb15 --- /dev/null +++ b/data/Leipzig/E524.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E525.xml b/data/Leipzig/E525.xml new file mode 100644 index 00000000000..7f5493b72ac --- /dev/null +++ b/data/Leipzig/E525.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E526.xml b/data/Leipzig/E526.xml new file mode 100644 index 00000000000..9c99d494654 --- /dev/null +++ b/data/Leipzig/E526.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E527.xml b/data/Leipzig/E527.xml new file mode 100644 index 00000000000..81837f1806a --- /dev/null +++ b/data/Leipzig/E527.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E528.xml b/data/Leipzig/E528.xml new file mode 100644 index 00000000000..4566b10c040 --- /dev/null +++ b/data/Leipzig/E528.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E529.xml b/data/Leipzig/E529.xml new file mode 100644 index 00000000000..769d7b332e0 --- /dev/null +++ b/data/Leipzig/E529.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E52A.xml b/data/Leipzig/E52A.xml new file mode 100644 index 00000000000..512ad3fb4a3 --- /dev/null +++ b/data/Leipzig/E52A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E52B.xml b/data/Leipzig/E52B.xml new file mode 100644 index 00000000000..0e57b046dcb --- /dev/null +++ b/data/Leipzig/E52B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E52C.xml b/data/Leipzig/E52C.xml new file mode 100644 index 00000000000..9880bfad5ed --- /dev/null +++ b/data/Leipzig/E52C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E52D.xml b/data/Leipzig/E52D.xml new file mode 100644 index 00000000000..0381d6b5031 --- /dev/null +++ b/data/Leipzig/E52D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E52E.xml b/data/Leipzig/E52E.xml new file mode 100644 index 00000000000..ca14b1496e1 --- /dev/null +++ b/data/Leipzig/E52E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E52F.xml b/data/Leipzig/E52F.xml new file mode 100644 index 00000000000..de4b0c6a33c --- /dev/null +++ b/data/Leipzig/E52F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E530.xml b/data/Leipzig/E530.xml new file mode 100644 index 00000000000..912010640fc --- /dev/null +++ b/data/Leipzig/E530.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E531.xml b/data/Leipzig/E531.xml new file mode 100644 index 00000000000..4f365e1b0b7 --- /dev/null +++ b/data/Leipzig/E531.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E532.xml b/data/Leipzig/E532.xml new file mode 100644 index 00000000000..625d20631c7 --- /dev/null +++ b/data/Leipzig/E532.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E533.xml b/data/Leipzig/E533.xml new file mode 100644 index 00000000000..b86a7619961 --- /dev/null +++ b/data/Leipzig/E533.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E534.xml b/data/Leipzig/E534.xml new file mode 100644 index 00000000000..a1cc84253c7 --- /dev/null +++ b/data/Leipzig/E534.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E535.xml b/data/Leipzig/E535.xml new file mode 100644 index 00000000000..31c43dd700b --- /dev/null +++ b/data/Leipzig/E535.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E536.xml b/data/Leipzig/E536.xml new file mode 100644 index 00000000000..146e30af55b --- /dev/null +++ b/data/Leipzig/E536.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E537.xml b/data/Leipzig/E537.xml new file mode 100644 index 00000000000..69472358d61 --- /dev/null +++ b/data/Leipzig/E537.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E538.xml b/data/Leipzig/E538.xml new file mode 100644 index 00000000000..47077996d3f --- /dev/null +++ b/data/Leipzig/E538.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E539.xml b/data/Leipzig/E539.xml new file mode 100644 index 00000000000..ffc7e82b10b --- /dev/null +++ b/data/Leipzig/E539.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E53A.xml b/data/Leipzig/E53A.xml new file mode 100644 index 00000000000..123f2e2fdaa --- /dev/null +++ b/data/Leipzig/E53A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E53B.xml b/data/Leipzig/E53B.xml new file mode 100644 index 00000000000..047206be8c9 --- /dev/null +++ b/data/Leipzig/E53B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E53C.xml b/data/Leipzig/E53C.xml new file mode 100644 index 00000000000..d719c64d458 --- /dev/null +++ b/data/Leipzig/E53C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E53D.xml b/data/Leipzig/E53D.xml new file mode 100644 index 00000000000..14e3bf4af7b --- /dev/null +++ b/data/Leipzig/E53D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E566.xml b/data/Leipzig/E566.xml new file mode 100644 index 00000000000..907f2b440c5 --- /dev/null +++ b/data/Leipzig/E566.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E567.xml b/data/Leipzig/E567.xml new file mode 100644 index 00000000000..67a47b7de63 --- /dev/null +++ b/data/Leipzig/E567.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E568.xml b/data/Leipzig/E568.xml new file mode 100644 index 00000000000..7c071f11300 --- /dev/null +++ b/data/Leipzig/E568.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E569.xml b/data/Leipzig/E569.xml new file mode 100644 index 00000000000..1c396713737 --- /dev/null +++ b/data/Leipzig/E569.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E56A.xml b/data/Leipzig/E56A.xml new file mode 100644 index 00000000000..00d92312fea --- /dev/null +++ b/data/Leipzig/E56A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E56B.xml b/data/Leipzig/E56B.xml new file mode 100644 index 00000000000..4f5042f6e3c --- /dev/null +++ b/data/Leipzig/E56B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E56C.xml b/data/Leipzig/E56C.xml new file mode 100644 index 00000000000..427ca0baf8a --- /dev/null +++ b/data/Leipzig/E56C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E56D.xml b/data/Leipzig/E56D.xml new file mode 100644 index 00000000000..44bc170f037 --- /dev/null +++ b/data/Leipzig/E56D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E56E.xml b/data/Leipzig/E56E.xml new file mode 100644 index 00000000000..6dacafb476b --- /dev/null +++ b/data/Leipzig/E56E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E56F.xml b/data/Leipzig/E56F.xml new file mode 100644 index 00000000000..3a78e721324 --- /dev/null +++ b/data/Leipzig/E56F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E583.xml b/data/Leipzig/E583.xml new file mode 100644 index 00000000000..55fd2fd3c9d --- /dev/null +++ b/data/Leipzig/E583.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E587.xml b/data/Leipzig/E587.xml new file mode 100644 index 00000000000..c7c3a81589d --- /dev/null +++ b/data/Leipzig/E587.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E59D.xml b/data/Leipzig/E59D.xml new file mode 100644 index 00000000000..a95b7444d1b --- /dev/null +++ b/data/Leipzig/E59D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E59E.xml b/data/Leipzig/E59E.xml new file mode 100644 index 00000000000..6d3534f3af2 --- /dev/null +++ b/data/Leipzig/E59E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5B0.xml b/data/Leipzig/E5B0.xml new file mode 100644 index 00000000000..9adf8632158 --- /dev/null +++ b/data/Leipzig/E5B0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5B1.xml b/data/Leipzig/E5B1.xml new file mode 100644 index 00000000000..7942474898a --- /dev/null +++ b/data/Leipzig/E5B1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5B2.xml b/data/Leipzig/E5B2.xml new file mode 100644 index 00000000000..2ce71bbf0a9 --- /dev/null +++ b/data/Leipzig/E5B2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5B3.xml b/data/Leipzig/E5B3.xml new file mode 100644 index 00000000000..9f293e2888b --- /dev/null +++ b/data/Leipzig/E5B3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5B4.xml b/data/Leipzig/E5B4.xml new file mode 100644 index 00000000000..5524b8d2791 --- /dev/null +++ b/data/Leipzig/E5B4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5B5.xml b/data/Leipzig/E5B5.xml new file mode 100644 index 00000000000..5c5cbf17798 --- /dev/null +++ b/data/Leipzig/E5B5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5B6.xml b/data/Leipzig/E5B6.xml new file mode 100644 index 00000000000..22c98767ab1 --- /dev/null +++ b/data/Leipzig/E5B6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5B7.xml b/data/Leipzig/E5B7.xml new file mode 100644 index 00000000000..a8baa037577 --- /dev/null +++ b/data/Leipzig/E5B7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5B8.xml b/data/Leipzig/E5B8.xml new file mode 100644 index 00000000000..69277799d74 --- /dev/null +++ b/data/Leipzig/E5B8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5B9.xml b/data/Leipzig/E5B9.xml new file mode 100644 index 00000000000..d7362933508 --- /dev/null +++ b/data/Leipzig/E5B9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5BA.xml b/data/Leipzig/E5BA.xml new file mode 100644 index 00000000000..799ee1c35d1 --- /dev/null +++ b/data/Leipzig/E5BA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5BB.xml b/data/Leipzig/E5BB.xml new file mode 100644 index 00000000000..87e52589a51 --- /dev/null +++ b/data/Leipzig/E5BB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5BC.xml b/data/Leipzig/E5BC.xml new file mode 100644 index 00000000000..e6dc7b62c1f --- /dev/null +++ b/data/Leipzig/E5BC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5BD.xml b/data/Leipzig/E5BD.xml new file mode 100644 index 00000000000..44cd63cbd37 --- /dev/null +++ b/data/Leipzig/E5BD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5BE.xml b/data/Leipzig/E5BE.xml new file mode 100644 index 00000000000..b3d098cbea7 --- /dev/null +++ b/data/Leipzig/E5BE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5BF.xml b/data/Leipzig/E5BF.xml new file mode 100644 index 00000000000..d9ed36d26ff --- /dev/null +++ b/data/Leipzig/E5BF.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5C0.xml b/data/Leipzig/E5C0.xml new file mode 100644 index 00000000000..bde9cc7128c --- /dev/null +++ b/data/Leipzig/E5C0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5C1.xml b/data/Leipzig/E5C1.xml new file mode 100644 index 00000000000..2fd40a2d740 --- /dev/null +++ b/data/Leipzig/E5C1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5C2.xml b/data/Leipzig/E5C2.xml new file mode 100644 index 00000000000..d302024cc67 --- /dev/null +++ b/data/Leipzig/E5C2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5C3.xml b/data/Leipzig/E5C3.xml new file mode 100644 index 00000000000..3b2717fd9da --- /dev/null +++ b/data/Leipzig/E5C3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5C4.xml b/data/Leipzig/E5C4.xml new file mode 100644 index 00000000000..d6af2e853f3 --- /dev/null +++ b/data/Leipzig/E5C4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5C5.xml b/data/Leipzig/E5C5.xml new file mode 100644 index 00000000000..2a225c2abef --- /dev/null +++ b/data/Leipzig/E5C5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5C6.xml b/data/Leipzig/E5C6.xml new file mode 100644 index 00000000000..e8e528f44a6 --- /dev/null +++ b/data/Leipzig/E5C6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5C7.xml b/data/Leipzig/E5C7.xml new file mode 100644 index 00000000000..d96d5d1a4ff --- /dev/null +++ b/data/Leipzig/E5C7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5C8.xml b/data/Leipzig/E5C8.xml new file mode 100644 index 00000000000..a8e2c59802b --- /dev/null +++ b/data/Leipzig/E5C8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5E5.xml b/data/Leipzig/E5E5.xml new file mode 100644 index 00000000000..29abaef5fc3 --- /dev/null +++ b/data/Leipzig/E5E5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5E6.xml b/data/Leipzig/E5E6.xml new file mode 100644 index 00000000000..baf29f0d395 --- /dev/null +++ b/data/Leipzig/E5E6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E5E7.xml b/data/Leipzig/E5E7.xml new file mode 100644 index 00000000000..d1516652d80 --- /dev/null +++ b/data/Leipzig/E5E7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E610.xml b/data/Leipzig/E610.xml new file mode 100644 index 00000000000..3c28e5edacd --- /dev/null +++ b/data/Leipzig/E610.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E611.xml b/data/Leipzig/E611.xml new file mode 100644 index 00000000000..b245e7f0a21 --- /dev/null +++ b/data/Leipzig/E611.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E612.xml b/data/Leipzig/E612.xml new file mode 100644 index 00000000000..c44bc8a3546 --- /dev/null +++ b/data/Leipzig/E612.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E613.xml b/data/Leipzig/E613.xml new file mode 100644 index 00000000000..98df92f0bb9 --- /dev/null +++ b/data/Leipzig/E613.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E614.xml b/data/Leipzig/E614.xml new file mode 100644 index 00000000000..a62da41b9d9 --- /dev/null +++ b/data/Leipzig/E614.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E630.xml b/data/Leipzig/E630.xml new file mode 100644 index 00000000000..e5e14babb39 --- /dev/null +++ b/data/Leipzig/E630.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E631.xml b/data/Leipzig/E631.xml new file mode 100644 index 00000000000..bf4103a3749 --- /dev/null +++ b/data/Leipzig/E631.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E632.xml b/data/Leipzig/E632.xml new file mode 100644 index 00000000000..05752ade7db --- /dev/null +++ b/data/Leipzig/E632.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E633.xml b/data/Leipzig/E633.xml new file mode 100644 index 00000000000..c81234ec125 --- /dev/null +++ b/data/Leipzig/E633.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E638.xml b/data/Leipzig/E638.xml new file mode 100644 index 00000000000..29d5737c3b5 --- /dev/null +++ b/data/Leipzig/E638.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E645.xml b/data/Leipzig/E645.xml new file mode 100644 index 00000000000..4e7fc6524b7 --- /dev/null +++ b/data/Leipzig/E645.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E650.xml b/data/Leipzig/E650.xml new file mode 100644 index 00000000000..84403bf5f94 --- /dev/null +++ b/data/Leipzig/E650.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E651.xml b/data/Leipzig/E651.xml new file mode 100644 index 00000000000..7cab0b5af84 --- /dev/null +++ b/data/Leipzig/E651.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E655.xml b/data/Leipzig/E655.xml new file mode 100644 index 00000000000..611de7b0546 --- /dev/null +++ b/data/Leipzig/E655.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E659.xml b/data/Leipzig/E659.xml new file mode 100644 index 00000000000..0b28ce8e25c --- /dev/null +++ b/data/Leipzig/E659.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E65A.xml b/data/Leipzig/E65A.xml new file mode 100644 index 00000000000..f6554107ff6 --- /dev/null +++ b/data/Leipzig/E65A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E880.xml b/data/Leipzig/E880.xml new file mode 100644 index 00000000000..80a304e7c21 --- /dev/null +++ b/data/Leipzig/E880.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E881.xml b/data/Leipzig/E881.xml new file mode 100644 index 00000000000..4b21da34b5d --- /dev/null +++ b/data/Leipzig/E881.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E882.xml b/data/Leipzig/E882.xml new file mode 100644 index 00000000000..72e887bf91f --- /dev/null +++ b/data/Leipzig/E882.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E883.xml b/data/Leipzig/E883.xml new file mode 100644 index 00000000000..50cf62fde50 --- /dev/null +++ b/data/Leipzig/E883.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E884.xml b/data/Leipzig/E884.xml new file mode 100644 index 00000000000..5885ff2843b --- /dev/null +++ b/data/Leipzig/E884.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E885.xml b/data/Leipzig/E885.xml new file mode 100644 index 00000000000..e3ee8498859 --- /dev/null +++ b/data/Leipzig/E885.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E886.xml b/data/Leipzig/E886.xml new file mode 100644 index 00000000000..d6463ac33e7 --- /dev/null +++ b/data/Leipzig/E886.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E887.xml b/data/Leipzig/E887.xml new file mode 100644 index 00000000000..5fa252070d3 --- /dev/null +++ b/data/Leipzig/E887.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E888.xml b/data/Leipzig/E888.xml new file mode 100644 index 00000000000..7ea316ee2b6 --- /dev/null +++ b/data/Leipzig/E888.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E889.xml b/data/Leipzig/E889.xml new file mode 100644 index 00000000000..e7c80c89114 --- /dev/null +++ b/data/Leipzig/E889.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E88A.xml b/data/Leipzig/E88A.xml new file mode 100644 index 00000000000..4a16a6ef462 --- /dev/null +++ b/data/Leipzig/E88A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E901.xml b/data/Leipzig/E901.xml new file mode 100644 index 00000000000..e0bfb1499be --- /dev/null +++ b/data/Leipzig/E901.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E902.xml b/data/Leipzig/E902.xml new file mode 100644 index 00000000000..815229be60e --- /dev/null +++ b/data/Leipzig/E902.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E904.xml b/data/Leipzig/E904.xml new file mode 100644 index 00000000000..35f8a2cf18e --- /dev/null +++ b/data/Leipzig/E904.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E906.xml b/data/Leipzig/E906.xml new file mode 100644 index 00000000000..c951658bd94 --- /dev/null +++ b/data/Leipzig/E906.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E907.xml b/data/Leipzig/E907.xml new file mode 100644 index 00000000000..397dec58f1a --- /dev/null +++ b/data/Leipzig/E907.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E908.xml b/data/Leipzig/E908.xml new file mode 100644 index 00000000000..f20df3799bd --- /dev/null +++ b/data/Leipzig/E908.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E909.xml b/data/Leipzig/E909.xml new file mode 100644 index 00000000000..373ce47a94d --- /dev/null +++ b/data/Leipzig/E909.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E90A.xml b/data/Leipzig/E90A.xml new file mode 100644 index 00000000000..5156616fdb5 --- /dev/null +++ b/data/Leipzig/E90A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E90B.xml b/data/Leipzig/E90B.xml new file mode 100644 index 00000000000..e30952a0b01 --- /dev/null +++ b/data/Leipzig/E90B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E910.xml b/data/Leipzig/E910.xml new file mode 100644 index 00000000000..e487461dab4 --- /dev/null +++ b/data/Leipzig/E910.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E911.xml b/data/Leipzig/E911.xml new file mode 100644 index 00000000000..89f2d4c91fd --- /dev/null +++ b/data/Leipzig/E911.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E912.xml b/data/Leipzig/E912.xml new file mode 100644 index 00000000000..dbdd2bd5d1f --- /dev/null +++ b/data/Leipzig/E912.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E913.xml b/data/Leipzig/E913.xml new file mode 100644 index 00000000000..0762770e86f --- /dev/null +++ b/data/Leipzig/E913.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E914.xml b/data/Leipzig/E914.xml new file mode 100644 index 00000000000..88632803b14 --- /dev/null +++ b/data/Leipzig/E914.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E915.xml b/data/Leipzig/E915.xml new file mode 100644 index 00000000000..b23cd310075 --- /dev/null +++ b/data/Leipzig/E915.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E916.xml b/data/Leipzig/E916.xml new file mode 100644 index 00000000000..7207a76ba6f --- /dev/null +++ b/data/Leipzig/E916.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E917.xml b/data/Leipzig/E917.xml new file mode 100644 index 00000000000..d153ffdeb24 --- /dev/null +++ b/data/Leipzig/E917.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E918.xml b/data/Leipzig/E918.xml new file mode 100644 index 00000000000..62f813dc12c --- /dev/null +++ b/data/Leipzig/E918.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E919.xml b/data/Leipzig/E919.xml new file mode 100644 index 00000000000..553672f8793 --- /dev/null +++ b/data/Leipzig/E919.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E91A.xml b/data/Leipzig/E91A.xml new file mode 100644 index 00000000000..80d9bdd1a46 --- /dev/null +++ b/data/Leipzig/E91A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E91B.xml b/data/Leipzig/E91B.xml new file mode 100644 index 00000000000..f81158cbf92 --- /dev/null +++ b/data/Leipzig/E91B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E91C.xml b/data/Leipzig/E91C.xml new file mode 100644 index 00000000000..e66bdd0a9f2 --- /dev/null +++ b/data/Leipzig/E91C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E91D.xml b/data/Leipzig/E91D.xml new file mode 100644 index 00000000000..231bbd96bff --- /dev/null +++ b/data/Leipzig/E91D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E91E.xml b/data/Leipzig/E91E.xml new file mode 100644 index 00000000000..8f6df2785e3 --- /dev/null +++ b/data/Leipzig/E91E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E91F.xml b/data/Leipzig/E91F.xml new file mode 100644 index 00000000000..5a390be6151 --- /dev/null +++ b/data/Leipzig/E91F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E920.xml b/data/Leipzig/E920.xml new file mode 100644 index 00000000000..98101a350c1 --- /dev/null +++ b/data/Leipzig/E920.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E921.xml b/data/Leipzig/E921.xml new file mode 100644 index 00000000000..cc54baa70af --- /dev/null +++ b/data/Leipzig/E921.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E922.xml b/data/Leipzig/E922.xml new file mode 100644 index 00000000000..6b8e7e7b828 --- /dev/null +++ b/data/Leipzig/E922.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E923.xml b/data/Leipzig/E923.xml new file mode 100644 index 00000000000..3d160858ad0 --- /dev/null +++ b/data/Leipzig/E923.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E924.xml b/data/Leipzig/E924.xml new file mode 100644 index 00000000000..77f8d2865b0 --- /dev/null +++ b/data/Leipzig/E924.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E925.xml b/data/Leipzig/E925.xml new file mode 100644 index 00000000000..b0314b3b3d8 --- /dev/null +++ b/data/Leipzig/E925.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E938.xml b/data/Leipzig/E938.xml new file mode 100644 index 00000000000..31a69a81465 --- /dev/null +++ b/data/Leipzig/E938.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E939.xml b/data/Leipzig/E939.xml new file mode 100644 index 00000000000..6278217d8c5 --- /dev/null +++ b/data/Leipzig/E939.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E93C.xml b/data/Leipzig/E93C.xml new file mode 100644 index 00000000000..6ef5785af61 --- /dev/null +++ b/data/Leipzig/E93C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E93D.xml b/data/Leipzig/E93D.xml new file mode 100644 index 00000000000..09e015d1ea8 --- /dev/null +++ b/data/Leipzig/E93D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E93E.xml b/data/Leipzig/E93E.xml new file mode 100644 index 00000000000..2b5001d6ec2 --- /dev/null +++ b/data/Leipzig/E93E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E93F.xml b/data/Leipzig/E93F.xml new file mode 100644 index 00000000000..f490619595d --- /dev/null +++ b/data/Leipzig/E93F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E949.xml b/data/Leipzig/E949.xml new file mode 100644 index 00000000000..37463dcdae5 --- /dev/null +++ b/data/Leipzig/E949.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E94A.xml b/data/Leipzig/E94A.xml new file mode 100644 index 00000000000..ca0c5b339ec --- /dev/null +++ b/data/Leipzig/E94A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E94B.xml b/data/Leipzig/E94B.xml new file mode 100644 index 00000000000..6aa3681ec1f --- /dev/null +++ b/data/Leipzig/E94B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E94C.xml b/data/Leipzig/E94C.xml new file mode 100644 index 00000000000..ca0d33b793c --- /dev/null +++ b/data/Leipzig/E94C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E9E0.xml b/data/Leipzig/E9E0.xml new file mode 100644 index 00000000000..527eada372e --- /dev/null +++ b/data/Leipzig/E9E0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E9E1.xml b/data/Leipzig/E9E1.xml new file mode 100644 index 00000000000..212b0445a9e --- /dev/null +++ b/data/Leipzig/E9E1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E9E2.xml b/data/Leipzig/E9E2.xml new file mode 100644 index 00000000000..dcd8b9f082e --- /dev/null +++ b/data/Leipzig/E9E2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E9E3.xml b/data/Leipzig/E9E3.xml new file mode 100644 index 00000000000..9e39248eba4 --- /dev/null +++ b/data/Leipzig/E9E3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E9F0.xml b/data/Leipzig/E9F0.xml new file mode 100644 index 00000000000..e094eef8d97 --- /dev/null +++ b/data/Leipzig/E9F0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E9F1.xml b/data/Leipzig/E9F1.xml new file mode 100644 index 00000000000..32a5439751e --- /dev/null +++ b/data/Leipzig/E9F1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E9F2.xml b/data/Leipzig/E9F2.xml new file mode 100644 index 00000000000..c7300e27501 --- /dev/null +++ b/data/Leipzig/E9F2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E9F3.xml b/data/Leipzig/E9F3.xml new file mode 100644 index 00000000000..d6e01e57a34 --- /dev/null +++ b/data/Leipzig/E9F3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E9F4.xml b/data/Leipzig/E9F4.xml new file mode 100644 index 00000000000..bb517789db4 --- /dev/null +++ b/data/Leipzig/E9F4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E9F5.xml b/data/Leipzig/E9F5.xml new file mode 100644 index 00000000000..9298016c768 --- /dev/null +++ b/data/Leipzig/E9F5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E9F6.xml b/data/Leipzig/E9F6.xml new file mode 100644 index 00000000000..367c02b7ed7 --- /dev/null +++ b/data/Leipzig/E9F6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E9F7.xml b/data/Leipzig/E9F7.xml new file mode 100644 index 00000000000..8adab3301b8 --- /dev/null +++ b/data/Leipzig/E9F7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E9F8.xml b/data/Leipzig/E9F8.xml new file mode 100644 index 00000000000..310a999727e --- /dev/null +++ b/data/Leipzig/E9F8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EA02.xml b/data/Leipzig/EA02.xml new file mode 100644 index 00000000000..b87d21b6494 --- /dev/null +++ b/data/Leipzig/EA02.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EA06.xml b/data/Leipzig/EA06.xml new file mode 100644 index 00000000000..ca3b354a372 --- /dev/null +++ b/data/Leipzig/EA06.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EAA4.xml b/data/Leipzig/EAA4.xml new file mode 100644 index 00000000000..34e8a5af208 --- /dev/null +++ b/data/Leipzig/EAA4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EAA9.xml b/data/Leipzig/EAA9.xml new file mode 100644 index 00000000000..ee5e137b2fd --- /dev/null +++ b/data/Leipzig/EAA9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EAAA.xml b/data/Leipzig/EAAA.xml new file mode 100644 index 00000000000..e2fbc324f28 --- /dev/null +++ b/data/Leipzig/EAAA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EAAD.xml b/data/Leipzig/EAAD.xml new file mode 100644 index 00000000000..7fb1ebeedd3 --- /dev/null +++ b/data/Leipzig/EAAD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EAAE.xml b/data/Leipzig/EAAE.xml new file mode 100644 index 00000000000..da7a371cdac --- /dev/null +++ b/data/Leipzig/EAAE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EAAF.xml b/data/Leipzig/EAAF.xml new file mode 100644 index 00000000000..e7ceac70f3e --- /dev/null +++ b/data/Leipzig/EAAF.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBA7.xml b/data/Leipzig/EBA7.xml new file mode 100644 index 00000000000..dca60ece822 --- /dev/null +++ b/data/Leipzig/EBA7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBA8.xml b/data/Leipzig/EBA8.xml new file mode 100644 index 00000000000..7c0364f751e --- /dev/null +++ b/data/Leipzig/EBA8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBA9.xml b/data/Leipzig/EBA9.xml new file mode 100644 index 00000000000..5af36b72903 --- /dev/null +++ b/data/Leipzig/EBA9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBAA.xml b/data/Leipzig/EBAA.xml new file mode 100644 index 00000000000..af409240237 --- /dev/null +++ b/data/Leipzig/EBAA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBAB.xml b/data/Leipzig/EBAB.xml new file mode 100644 index 00000000000..9a23398540b --- /dev/null +++ b/data/Leipzig/EBAB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBAC.xml b/data/Leipzig/EBAC.xml new file mode 100644 index 00000000000..2779ebc5975 --- /dev/null +++ b/data/Leipzig/EBAC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBC0.xml b/data/Leipzig/EBC0.xml new file mode 100644 index 00000000000..ca3acb5c219 --- /dev/null +++ b/data/Leipzig/EBC0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBC1.xml b/data/Leipzig/EBC1.xml new file mode 100644 index 00000000000..cf80e8bf4ba --- /dev/null +++ b/data/Leipzig/EBC1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBC2.xml b/data/Leipzig/EBC2.xml new file mode 100644 index 00000000000..8e0a020d19c --- /dev/null +++ b/data/Leipzig/EBC2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBC3.xml b/data/Leipzig/EBC3.xml new file mode 100644 index 00000000000..1550cd9c2ba --- /dev/null +++ b/data/Leipzig/EBC3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBC4.xml b/data/Leipzig/EBC4.xml new file mode 100644 index 00000000000..a026a7830c5 --- /dev/null +++ b/data/Leipzig/EBC4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBC5.xml b/data/Leipzig/EBC5.xml new file mode 100644 index 00000000000..42ded00bcad --- /dev/null +++ b/data/Leipzig/EBC5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBC6.xml b/data/Leipzig/EBC6.xml new file mode 100644 index 00000000000..cf2f3cfb7cd --- /dev/null +++ b/data/Leipzig/EBC6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBC7.xml b/data/Leipzig/EBC7.xml new file mode 100644 index 00000000000..83e7ee10827 --- /dev/null +++ b/data/Leipzig/EBC7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBC8.xml b/data/Leipzig/EBC8.xml new file mode 100644 index 00000000000..f738d7ab4c3 --- /dev/null +++ b/data/Leipzig/EBC8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBC9.xml b/data/Leipzig/EBC9.xml new file mode 100644 index 00000000000..384a9a91647 --- /dev/null +++ b/data/Leipzig/EBC9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBCA.xml b/data/Leipzig/EBCA.xml new file mode 100644 index 00000000000..6422282629c --- /dev/null +++ b/data/Leipzig/EBCA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBCB.xml b/data/Leipzig/EBCB.xml new file mode 100644 index 00000000000..6d18d18feec --- /dev/null +++ b/data/Leipzig/EBCB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBCC.xml b/data/Leipzig/EBCC.xml new file mode 100644 index 00000000000..c654a5c7505 --- /dev/null +++ b/data/Leipzig/EBCC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBE0.xml b/data/Leipzig/EBE0.xml new file mode 100644 index 00000000000..70a543e8757 --- /dev/null +++ b/data/Leipzig/EBE0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBE1.xml b/data/Leipzig/EBE1.xml new file mode 100644 index 00000000000..069d7cfe417 --- /dev/null +++ b/data/Leipzig/EBE1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBE2.xml b/data/Leipzig/EBE2.xml new file mode 100644 index 00000000000..ecf5f18a9f8 --- /dev/null +++ b/data/Leipzig/EBE2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBE3.xml b/data/Leipzig/EBE3.xml new file mode 100644 index 00000000000..3c6418a102c --- /dev/null +++ b/data/Leipzig/EBE3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBE4.xml b/data/Leipzig/EBE4.xml new file mode 100644 index 00000000000..66090362e3f --- /dev/null +++ b/data/Leipzig/EBE4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBE5.xml b/data/Leipzig/EBE5.xml new file mode 100644 index 00000000000..3747a12fbfc --- /dev/null +++ b/data/Leipzig/EBE5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBE6.xml b/data/Leipzig/EBE6.xml new file mode 100644 index 00000000000..39eb63f5133 --- /dev/null +++ b/data/Leipzig/EBE6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBE7.xml b/data/Leipzig/EBE7.xml new file mode 100644 index 00000000000..adcd251f2d0 --- /dev/null +++ b/data/Leipzig/EBE7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBE8.xml b/data/Leipzig/EBE8.xml new file mode 100644 index 00000000000..344ce5d1d30 --- /dev/null +++ b/data/Leipzig/EBE8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/EBE9.xml b/data/Leipzig/EBE9.xml new file mode 100644 index 00000000000..9cd94f8ca80 --- /dev/null +++ b/data/Leipzig/EBE9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/ED40.xml b/data/Leipzig/ED40.xml new file mode 100644 index 00000000000..17dbbb53c39 --- /dev/null +++ b/data/Leipzig/ED40.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/ED41.xml b/data/Leipzig/ED41.xml new file mode 100644 index 00000000000..a8353868176 --- /dev/null +++ b/data/Leipzig/ED41.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland.xml b/data/Leland.xml new file mode 100644 index 00000000000..cc89b379277 --- /dev/null +++ b/data/Leland.xml @@ -0,0 +1,500 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/Leland/E000.xml b/data/Leland/E000.xml new file mode 100644 index 00000000000..261518ed78e --- /dev/null +++ b/data/Leland/E000.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E003.xml b/data/Leland/E003.xml new file mode 100644 index 00000000000..48d97c3678d --- /dev/null +++ b/data/Leland/E003.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E004.xml b/data/Leland/E004.xml new file mode 100644 index 00000000000..f33648c1f0f --- /dev/null +++ b/data/Leland/E004.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E043.xml b/data/Leland/E043.xml new file mode 100644 index 00000000000..319a593ab9d --- /dev/null +++ b/data/Leland/E043.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E044.xml b/data/Leland/E044.xml new file mode 100644 index 00000000000..7ce0b40bb71 --- /dev/null +++ b/data/Leland/E044.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E047.xml b/data/Leland/E047.xml new file mode 100644 index 00000000000..6df2fec4d13 --- /dev/null +++ b/data/Leland/E047.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E048.xml b/data/Leland/E048.xml new file mode 100644 index 00000000000..0a6e6a1ef5b --- /dev/null +++ b/data/Leland/E048.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E049.xml b/data/Leland/E049.xml new file mode 100644 index 00000000000..2dd260aab39 --- /dev/null +++ b/data/Leland/E049.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E04B.xml b/data/Leland/E04B.xml new file mode 100644 index 00000000000..972b42ffd3c --- /dev/null +++ b/data/Leland/E04B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E050.xml b/data/Leland/E050.xml new file mode 100644 index 00000000000..cb6519ba73f --- /dev/null +++ b/data/Leland/E050.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E051.xml b/data/Leland/E051.xml new file mode 100644 index 00000000000..4595de8156a --- /dev/null +++ b/data/Leland/E051.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E052.xml b/data/Leland/E052.xml new file mode 100644 index 00000000000..58413ab1758 --- /dev/null +++ b/data/Leland/E052.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E053.xml b/data/Leland/E053.xml new file mode 100644 index 00000000000..5e1f94ec52e --- /dev/null +++ b/data/Leland/E053.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E054.xml b/data/Leland/E054.xml new file mode 100644 index 00000000000..93f2da49f97 --- /dev/null +++ b/data/Leland/E054.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E055.xml b/data/Leland/E055.xml new file mode 100644 index 00000000000..50e80c19db0 --- /dev/null +++ b/data/Leland/E055.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E05C.xml b/data/Leland/E05C.xml new file mode 100644 index 00000000000..c731b84a229 --- /dev/null +++ b/data/Leland/E05C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E05D.xml b/data/Leland/E05D.xml new file mode 100644 index 00000000000..f60640ea965 --- /dev/null +++ b/data/Leland/E05D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E062.xml b/data/Leland/E062.xml new file mode 100644 index 00000000000..2e654395f40 --- /dev/null +++ b/data/Leland/E062.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E063.xml b/data/Leland/E063.xml new file mode 100644 index 00000000000..0ed47a1759e --- /dev/null +++ b/data/Leland/E063.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E064.xml b/data/Leland/E064.xml new file mode 100644 index 00000000000..747bf027371 --- /dev/null +++ b/data/Leland/E064.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E065.xml b/data/Leland/E065.xml new file mode 100644 index 00000000000..d0950d43648 --- /dev/null +++ b/data/Leland/E065.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E066.xml b/data/Leland/E066.xml new file mode 100644 index 00000000000..fef97caf1de --- /dev/null +++ b/data/Leland/E066.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E069.xml b/data/Leland/E069.xml new file mode 100644 index 00000000000..446a3a07235 --- /dev/null +++ b/data/Leland/E069.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E06A.xml b/data/Leland/E06A.xml new file mode 100644 index 00000000000..e3090c162d1 --- /dev/null +++ b/data/Leland/E06A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E080.xml b/data/Leland/E080.xml new file mode 100644 index 00000000000..111e1c42d0b --- /dev/null +++ b/data/Leland/E080.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E081.xml b/data/Leland/E081.xml new file mode 100644 index 00000000000..c6bf36666e5 --- /dev/null +++ b/data/Leland/E081.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E082.xml b/data/Leland/E082.xml new file mode 100644 index 00000000000..c358ac2d291 --- /dev/null +++ b/data/Leland/E082.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E083.xml b/data/Leland/E083.xml new file mode 100644 index 00000000000..36bdba64dd7 --- /dev/null +++ b/data/Leland/E083.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E084.xml b/data/Leland/E084.xml new file mode 100644 index 00000000000..83809dbd7b2 --- /dev/null +++ b/data/Leland/E084.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E085.xml b/data/Leland/E085.xml new file mode 100644 index 00000000000..8ace81d6da4 --- /dev/null +++ b/data/Leland/E085.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E086.xml b/data/Leland/E086.xml new file mode 100644 index 00000000000..2be5ee80de5 --- /dev/null +++ b/data/Leland/E086.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E087.xml b/data/Leland/E087.xml new file mode 100644 index 00000000000..b8e036d4f51 --- /dev/null +++ b/data/Leland/E087.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E088.xml b/data/Leland/E088.xml new file mode 100644 index 00000000000..724845e996c --- /dev/null +++ b/data/Leland/E088.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E089.xml b/data/Leland/E089.xml new file mode 100644 index 00000000000..bfb916e647d --- /dev/null +++ b/data/Leland/E089.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E08A.xml b/data/Leland/E08A.xml new file mode 100644 index 00000000000..e47d42fd35b --- /dev/null +++ b/data/Leland/E08A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E08B.xml b/data/Leland/E08B.xml new file mode 100644 index 00000000000..d42a715325c --- /dev/null +++ b/data/Leland/E08B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E08C.xml b/data/Leland/E08C.xml new file mode 100644 index 00000000000..242992962da --- /dev/null +++ b/data/Leland/E08C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E0A0.xml b/data/Leland/E0A0.xml new file mode 100644 index 00000000000..73fa6026100 --- /dev/null +++ b/data/Leland/E0A0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E0A1.xml b/data/Leland/E0A1.xml new file mode 100644 index 00000000000..1bda177525d --- /dev/null +++ b/data/Leland/E0A1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E0A2.xml b/data/Leland/E0A2.xml new file mode 100644 index 00000000000..c02f172cc05 --- /dev/null +++ b/data/Leland/E0A2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E0A3.xml b/data/Leland/E0A3.xml new file mode 100644 index 00000000000..e9fa6ec157b --- /dev/null +++ b/data/Leland/E0A3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E0A4.xml b/data/Leland/E0A4.xml new file mode 100644 index 00000000000..22a237ecc38 --- /dev/null +++ b/data/Leland/E0A4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E0A5.xml b/data/Leland/E0A5.xml new file mode 100644 index 00000000000..d4eec1c1f60 --- /dev/null +++ b/data/Leland/E0A5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E0A9.xml b/data/Leland/E0A9.xml new file mode 100644 index 00000000000..af28d67577b --- /dev/null +++ b/data/Leland/E0A9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E0AF.xml b/data/Leland/E0AF.xml new file mode 100644 index 00000000000..189e1a86ee5 --- /dev/null +++ b/data/Leland/E0AF.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E0D9.xml b/data/Leland/E0D9.xml new file mode 100644 index 00000000000..11cac9c92f2 --- /dev/null +++ b/data/Leland/E0D9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E0DB.xml b/data/Leland/E0DB.xml new file mode 100644 index 00000000000..fbf25eb58d4 --- /dev/null +++ b/data/Leland/E0DB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E0F5.xml b/data/Leland/E0F5.xml new file mode 100644 index 00000000000..55e5f3507cf --- /dev/null +++ b/data/Leland/E0F5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E0F6.xml b/data/Leland/E0F6.xml new file mode 100644 index 00000000000..8ece1c15d6f --- /dev/null +++ b/data/Leland/E0F6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E220.xml b/data/Leland/E220.xml new file mode 100644 index 00000000000..1d947ff9704 --- /dev/null +++ b/data/Leland/E220.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E221.xml b/data/Leland/E221.xml new file mode 100644 index 00000000000..2e2940954c5 --- /dev/null +++ b/data/Leland/E221.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E222.xml b/data/Leland/E222.xml new file mode 100644 index 00000000000..27963c3afaf --- /dev/null +++ b/data/Leland/E222.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E223.xml b/data/Leland/E223.xml new file mode 100644 index 00000000000..ff305e0d898 --- /dev/null +++ b/data/Leland/E223.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E224.xml b/data/Leland/E224.xml new file mode 100644 index 00000000000..9a79084cbcb --- /dev/null +++ b/data/Leland/E224.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E22A.xml b/data/Leland/E22A.xml new file mode 100644 index 00000000000..e7b6cee88fc --- /dev/null +++ b/data/Leland/E22A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E240.xml b/data/Leland/E240.xml new file mode 100644 index 00000000000..0d01092cf13 --- /dev/null +++ b/data/Leland/E240.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E241.xml b/data/Leland/E241.xml new file mode 100644 index 00000000000..55675716aa4 --- /dev/null +++ b/data/Leland/E241.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E242.xml b/data/Leland/E242.xml new file mode 100644 index 00000000000..b3c6c123912 --- /dev/null +++ b/data/Leland/E242.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E243.xml b/data/Leland/E243.xml new file mode 100644 index 00000000000..6dc27840c8a --- /dev/null +++ b/data/Leland/E243.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E244.xml b/data/Leland/E244.xml new file mode 100644 index 00000000000..d69694acf21 --- /dev/null +++ b/data/Leland/E244.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E245.xml b/data/Leland/E245.xml new file mode 100644 index 00000000000..12af41b863f --- /dev/null +++ b/data/Leland/E245.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E246.xml b/data/Leland/E246.xml new file mode 100644 index 00000000000..04ee4c66230 --- /dev/null +++ b/data/Leland/E246.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E247.xml b/data/Leland/E247.xml new file mode 100644 index 00000000000..48fc4bdf0d0 --- /dev/null +++ b/data/Leland/E247.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E248.xml b/data/Leland/E248.xml new file mode 100644 index 00000000000..4fe9bbe48f7 --- /dev/null +++ b/data/Leland/E248.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E249.xml b/data/Leland/E249.xml new file mode 100644 index 00000000000..86aa7fdd4a6 --- /dev/null +++ b/data/Leland/E249.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E24A.xml b/data/Leland/E24A.xml new file mode 100644 index 00000000000..99ca160d871 --- /dev/null +++ b/data/Leland/E24A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E24B.xml b/data/Leland/E24B.xml new file mode 100644 index 00000000000..0fc5434fbe8 --- /dev/null +++ b/data/Leland/E24B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E24C.xml b/data/Leland/E24C.xml new file mode 100644 index 00000000000..6411bf4c56c --- /dev/null +++ b/data/Leland/E24C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E24D.xml b/data/Leland/E24D.xml new file mode 100644 index 00000000000..27c115a5ad1 --- /dev/null +++ b/data/Leland/E24D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E24E.xml b/data/Leland/E24E.xml new file mode 100644 index 00000000000..d26bb98225b --- /dev/null +++ b/data/Leland/E24E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E24F.xml b/data/Leland/E24F.xml new file mode 100644 index 00000000000..1e376380303 --- /dev/null +++ b/data/Leland/E24F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E260.xml b/data/Leland/E260.xml new file mode 100644 index 00000000000..0fb26990265 --- /dev/null +++ b/data/Leland/E260.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E261.xml b/data/Leland/E261.xml new file mode 100644 index 00000000000..288ec457346 --- /dev/null +++ b/data/Leland/E261.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E262.xml b/data/Leland/E262.xml new file mode 100644 index 00000000000..985e2ea46cd --- /dev/null +++ b/data/Leland/E262.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E263.xml b/data/Leland/E263.xml new file mode 100644 index 00000000000..7fca3023681 --- /dev/null +++ b/data/Leland/E263.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E264.xml b/data/Leland/E264.xml new file mode 100644 index 00000000000..a0f67d5bd76 --- /dev/null +++ b/data/Leland/E264.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E265.xml b/data/Leland/E265.xml new file mode 100644 index 00000000000..7c30c262653 --- /dev/null +++ b/data/Leland/E265.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E266.xml b/data/Leland/E266.xml new file mode 100644 index 00000000000..17d1ab77b49 --- /dev/null +++ b/data/Leland/E266.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E267.xml b/data/Leland/E267.xml new file mode 100644 index 00000000000..ce56cbd44d6 --- /dev/null +++ b/data/Leland/E267.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E268.xml b/data/Leland/E268.xml new file mode 100644 index 00000000000..5ff999df08e --- /dev/null +++ b/data/Leland/E268.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E269.xml b/data/Leland/E269.xml new file mode 100644 index 00000000000..28e1328e738 --- /dev/null +++ b/data/Leland/E269.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E26A.xml b/data/Leland/E26A.xml new file mode 100644 index 00000000000..c7e8c32fcc4 --- /dev/null +++ b/data/Leland/E26A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E26B.xml b/data/Leland/E26B.xml new file mode 100644 index 00000000000..7024793a36f --- /dev/null +++ b/data/Leland/E26B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E26C.xml b/data/Leland/E26C.xml new file mode 100644 index 00000000000..be872c41226 --- /dev/null +++ b/data/Leland/E26C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E26D.xml b/data/Leland/E26D.xml new file mode 100644 index 00000000000..f5c74e5017b --- /dev/null +++ b/data/Leland/E26D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E270.xml b/data/Leland/E270.xml new file mode 100644 index 00000000000..e5f3b9a42c7 --- /dev/null +++ b/data/Leland/E270.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E271.xml b/data/Leland/E271.xml new file mode 100644 index 00000000000..93217248bce --- /dev/null +++ b/data/Leland/E271.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E272.xml b/data/Leland/E272.xml new file mode 100644 index 00000000000..38fc3f9841b --- /dev/null +++ b/data/Leland/E272.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E273.xml b/data/Leland/E273.xml new file mode 100644 index 00000000000..8e10b111a90 --- /dev/null +++ b/data/Leland/E273.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E274.xml b/data/Leland/E274.xml new file mode 100644 index 00000000000..fa4c0c1e8c1 --- /dev/null +++ b/data/Leland/E274.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E275.xml b/data/Leland/E275.xml new file mode 100644 index 00000000000..ff3550efadf --- /dev/null +++ b/data/Leland/E275.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E280.xml b/data/Leland/E280.xml new file mode 100644 index 00000000000..ae243dec532 --- /dev/null +++ b/data/Leland/E280.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E281.xml b/data/Leland/E281.xml new file mode 100644 index 00000000000..2553ff5c588 --- /dev/null +++ b/data/Leland/E281.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E282.xml b/data/Leland/E282.xml new file mode 100644 index 00000000000..0b249204a13 --- /dev/null +++ b/data/Leland/E282.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E283.xml b/data/Leland/E283.xml new file mode 100644 index 00000000000..373acb42340 --- /dev/null +++ b/data/Leland/E283.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E440.xml b/data/Leland/E440.xml new file mode 100644 index 00000000000..da75b5f727a --- /dev/null +++ b/data/Leland/E440.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E442.xml b/data/Leland/E442.xml new file mode 100644 index 00000000000..c5c03840dbc --- /dev/null +++ b/data/Leland/E442.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E446.xml b/data/Leland/E446.xml new file mode 100644 index 00000000000..3f0ae1a1351 --- /dev/null +++ b/data/Leland/E446.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E447.xml b/data/Leland/E447.xml new file mode 100644 index 00000000000..3760e3b2549 --- /dev/null +++ b/data/Leland/E447.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4A0.xml b/data/Leland/E4A0.xml new file mode 100644 index 00000000000..afb02ccbd6e --- /dev/null +++ b/data/Leland/E4A0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4A1.xml b/data/Leland/E4A1.xml new file mode 100644 index 00000000000..b68f2c33050 --- /dev/null +++ b/data/Leland/E4A1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4A2.xml b/data/Leland/E4A2.xml new file mode 100644 index 00000000000..31f221ae094 --- /dev/null +++ b/data/Leland/E4A2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4A3.xml b/data/Leland/E4A3.xml new file mode 100644 index 00000000000..048a9208202 --- /dev/null +++ b/data/Leland/E4A3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4A4.xml b/data/Leland/E4A4.xml new file mode 100644 index 00000000000..f1fe77c5da2 --- /dev/null +++ b/data/Leland/E4A4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4A5.xml b/data/Leland/E4A5.xml new file mode 100644 index 00000000000..96f7c86338c --- /dev/null +++ b/data/Leland/E4A5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4A6.xml b/data/Leland/E4A6.xml new file mode 100644 index 00000000000..61aecc13235 --- /dev/null +++ b/data/Leland/E4A6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4A7.xml b/data/Leland/E4A7.xml new file mode 100644 index 00000000000..16b4b23a3bf --- /dev/null +++ b/data/Leland/E4A7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4A8.xml b/data/Leland/E4A8.xml new file mode 100644 index 00000000000..9e9ea75a522 --- /dev/null +++ b/data/Leland/E4A8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4A9.xml b/data/Leland/E4A9.xml new file mode 100644 index 00000000000..c97a67e25c2 --- /dev/null +++ b/data/Leland/E4A9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4AC.xml b/data/Leland/E4AC.xml new file mode 100644 index 00000000000..11fe7e283e8 --- /dev/null +++ b/data/Leland/E4AC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4AD.xml b/data/Leland/E4AD.xml new file mode 100644 index 00000000000..86155a7b206 --- /dev/null +++ b/data/Leland/E4AD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4AE.xml b/data/Leland/E4AE.xml new file mode 100644 index 00000000000..c1a26420070 --- /dev/null +++ b/data/Leland/E4AE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4AF.xml b/data/Leland/E4AF.xml new file mode 100644 index 00000000000..16fe991df87 --- /dev/null +++ b/data/Leland/E4AF.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4B0.xml b/data/Leland/E4B0.xml new file mode 100644 index 00000000000..5325ee699a8 --- /dev/null +++ b/data/Leland/E4B0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4B1.xml b/data/Leland/E4B1.xml new file mode 100644 index 00000000000..40eef847928 --- /dev/null +++ b/data/Leland/E4B1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4B2.xml b/data/Leland/E4B2.xml new file mode 100644 index 00000000000..c3afd0b6c84 --- /dev/null +++ b/data/Leland/E4B2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4B3.xml b/data/Leland/E4B3.xml new file mode 100644 index 00000000000..818f45a7de3 --- /dev/null +++ b/data/Leland/E4B3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4B4.xml b/data/Leland/E4B4.xml new file mode 100644 index 00000000000..c8e502340f0 --- /dev/null +++ b/data/Leland/E4B4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4B5.xml b/data/Leland/E4B5.xml new file mode 100644 index 00000000000..7143013a19a --- /dev/null +++ b/data/Leland/E4B5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4B6.xml b/data/Leland/E4B6.xml new file mode 100644 index 00000000000..dc4f51ed13c --- /dev/null +++ b/data/Leland/E4B6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4B7.xml b/data/Leland/E4B7.xml new file mode 100644 index 00000000000..7d6546b71c9 --- /dev/null +++ b/data/Leland/E4B7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4B8.xml b/data/Leland/E4B8.xml new file mode 100644 index 00000000000..f4860216a22 --- /dev/null +++ b/data/Leland/E4B8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4B9.xml b/data/Leland/E4B9.xml new file mode 100644 index 00000000000..d521cd1f442 --- /dev/null +++ b/data/Leland/E4B9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4BA.xml b/data/Leland/E4BA.xml new file mode 100644 index 00000000000..6205d216400 --- /dev/null +++ b/data/Leland/E4BA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4BB.xml b/data/Leland/E4BB.xml new file mode 100644 index 00000000000..398303d4844 --- /dev/null +++ b/data/Leland/E4BB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4BC.xml b/data/Leland/E4BC.xml new file mode 100644 index 00000000000..c7b968977fd --- /dev/null +++ b/data/Leland/E4BC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4BD.xml b/data/Leland/E4BD.xml new file mode 100644 index 00000000000..fb559f3cc36 --- /dev/null +++ b/data/Leland/E4BD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4C0.xml b/data/Leland/E4C0.xml new file mode 100644 index 00000000000..c2ef454df64 --- /dev/null +++ b/data/Leland/E4C0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4C1.xml b/data/Leland/E4C1.xml new file mode 100644 index 00000000000..8ad00deb3b7 --- /dev/null +++ b/data/Leland/E4C1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4C4.xml b/data/Leland/E4C4.xml new file mode 100644 index 00000000000..ef2a3046f28 --- /dev/null +++ b/data/Leland/E4C4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4C5.xml b/data/Leland/E4C5.xml new file mode 100644 index 00000000000..28fb5569997 --- /dev/null +++ b/data/Leland/E4C5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4C6.xml b/data/Leland/E4C6.xml new file mode 100644 index 00000000000..357c7967891 --- /dev/null +++ b/data/Leland/E4C6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4C7.xml b/data/Leland/E4C7.xml new file mode 100644 index 00000000000..72813b00d02 --- /dev/null +++ b/data/Leland/E4C7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4C8.xml b/data/Leland/E4C8.xml new file mode 100644 index 00000000000..0b91d5f12d1 --- /dev/null +++ b/data/Leland/E4C8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4C9.xml b/data/Leland/E4C9.xml new file mode 100644 index 00000000000..59b70b18995 --- /dev/null +++ b/data/Leland/E4C9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4CE.xml b/data/Leland/E4CE.xml new file mode 100644 index 00000000000..50f7ae09b47 --- /dev/null +++ b/data/Leland/E4CE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4E0.xml b/data/Leland/E4E0.xml new file mode 100644 index 00000000000..a22188bcb7a --- /dev/null +++ b/data/Leland/E4E0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4E1.xml b/data/Leland/E4E1.xml new file mode 100644 index 00000000000..f6021bf214a --- /dev/null +++ b/data/Leland/E4E1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4E2.xml b/data/Leland/E4E2.xml new file mode 100644 index 00000000000..01a14cc6546 --- /dev/null +++ b/data/Leland/E4E2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4E3.xml b/data/Leland/E4E3.xml new file mode 100644 index 00000000000..76aca09392a --- /dev/null +++ b/data/Leland/E4E3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4E4.xml b/data/Leland/E4E4.xml new file mode 100644 index 00000000000..c967591b281 --- /dev/null +++ b/data/Leland/E4E4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4E5.xml b/data/Leland/E4E5.xml new file mode 100644 index 00000000000..89101fafafa --- /dev/null +++ b/data/Leland/E4E5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4E6.xml b/data/Leland/E4E6.xml new file mode 100644 index 00000000000..627b8f41a9c --- /dev/null +++ b/data/Leland/E4E6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4E7.xml b/data/Leland/E4E7.xml new file mode 100644 index 00000000000..07c82100825 --- /dev/null +++ b/data/Leland/E4E7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4E8.xml b/data/Leland/E4E8.xml new file mode 100644 index 00000000000..63e2a6ec7a2 --- /dev/null +++ b/data/Leland/E4E8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4E9.xml b/data/Leland/E4E9.xml new file mode 100644 index 00000000000..5afe6949ece --- /dev/null +++ b/data/Leland/E4E9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4EA.xml b/data/Leland/E4EA.xml new file mode 100644 index 00000000000..f810aeaa9c1 --- /dev/null +++ b/data/Leland/E4EA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4EB.xml b/data/Leland/E4EB.xml new file mode 100644 index 00000000000..a1f40726b86 --- /dev/null +++ b/data/Leland/E4EB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4EC.xml b/data/Leland/E4EC.xml new file mode 100644 index 00000000000..c47824799cf --- /dev/null +++ b/data/Leland/E4EC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4ED.xml b/data/Leland/E4ED.xml new file mode 100644 index 00000000000..71d9cbd21c2 --- /dev/null +++ b/data/Leland/E4ED.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4F2.xml b/data/Leland/E4F2.xml new file mode 100644 index 00000000000..83db4811739 --- /dev/null +++ b/data/Leland/E4F2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E4F6.xml b/data/Leland/E4F6.xml new file mode 100644 index 00000000000..57d40d0e5b9 --- /dev/null +++ b/data/Leland/E4F6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E500.xml b/data/Leland/E500.xml new file mode 100644 index 00000000000..1506ca3e653 --- /dev/null +++ b/data/Leland/E500.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E501.xml b/data/Leland/E501.xml new file mode 100644 index 00000000000..782b11b261b --- /dev/null +++ b/data/Leland/E501.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E502.xml b/data/Leland/E502.xml new file mode 100644 index 00000000000..f30101c370e --- /dev/null +++ b/data/Leland/E502.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E503.xml b/data/Leland/E503.xml new file mode 100644 index 00000000000..1b85320442a --- /dev/null +++ b/data/Leland/E503.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E504.xml b/data/Leland/E504.xml new file mode 100644 index 00000000000..3c1a87dcd75 --- /dev/null +++ b/data/Leland/E504.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E505.xml b/data/Leland/E505.xml new file mode 100644 index 00000000000..45bc91fff64 --- /dev/null +++ b/data/Leland/E505.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E510.xml b/data/Leland/E510.xml new file mode 100644 index 00000000000..d86ffccda1c --- /dev/null +++ b/data/Leland/E510.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E511.xml b/data/Leland/E511.xml new file mode 100644 index 00000000000..b55c43e64a7 --- /dev/null +++ b/data/Leland/E511.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E512.xml b/data/Leland/E512.xml new file mode 100644 index 00000000000..e56de61b91a --- /dev/null +++ b/data/Leland/E512.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E513.xml b/data/Leland/E513.xml new file mode 100644 index 00000000000..965c83bf969 --- /dev/null +++ b/data/Leland/E513.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E514.xml b/data/Leland/E514.xml new file mode 100644 index 00000000000..fed60b5802c --- /dev/null +++ b/data/Leland/E514.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E515.xml b/data/Leland/E515.xml new file mode 100644 index 00000000000..b4b487e3870 --- /dev/null +++ b/data/Leland/E515.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E516.xml b/data/Leland/E516.xml new file mode 100644 index 00000000000..2c14e4d61d1 --- /dev/null +++ b/data/Leland/E516.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E517.xml b/data/Leland/E517.xml new file mode 100644 index 00000000000..224ff7ddf4d --- /dev/null +++ b/data/Leland/E517.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E518.xml b/data/Leland/E518.xml new file mode 100644 index 00000000000..0fa35ac3044 --- /dev/null +++ b/data/Leland/E518.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E519.xml b/data/Leland/E519.xml new file mode 100644 index 00000000000..132400e3076 --- /dev/null +++ b/data/Leland/E519.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E51A.xml b/data/Leland/E51A.xml new file mode 100644 index 00000000000..3fb900b3833 --- /dev/null +++ b/data/Leland/E51A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E51B.xml b/data/Leland/E51B.xml new file mode 100644 index 00000000000..0b572f8becd --- /dev/null +++ b/data/Leland/E51B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E51C.xml b/data/Leland/E51C.xml new file mode 100644 index 00000000000..9364df1e2f2 --- /dev/null +++ b/data/Leland/E51C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E51D.xml b/data/Leland/E51D.xml new file mode 100644 index 00000000000..a8abdc9dc5d --- /dev/null +++ b/data/Leland/E51D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E51E.xml b/data/Leland/E51E.xml new file mode 100644 index 00000000000..df0a0b52312 --- /dev/null +++ b/data/Leland/E51E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E520.xml b/data/Leland/E520.xml new file mode 100644 index 00000000000..ad0205e542f --- /dev/null +++ b/data/Leland/E520.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E521.xml b/data/Leland/E521.xml new file mode 100644 index 00000000000..1454017e6ed --- /dev/null +++ b/data/Leland/E521.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E522.xml b/data/Leland/E522.xml new file mode 100644 index 00000000000..817d30b256c --- /dev/null +++ b/data/Leland/E522.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E523.xml b/data/Leland/E523.xml new file mode 100644 index 00000000000..03ab82570e5 --- /dev/null +++ b/data/Leland/E523.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E524.xml b/data/Leland/E524.xml new file mode 100644 index 00000000000..a35b02cf99e --- /dev/null +++ b/data/Leland/E524.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E525.xml b/data/Leland/E525.xml new file mode 100644 index 00000000000..95d2aaa77e9 --- /dev/null +++ b/data/Leland/E525.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E526.xml b/data/Leland/E526.xml new file mode 100644 index 00000000000..a922525e42a --- /dev/null +++ b/data/Leland/E526.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E527.xml b/data/Leland/E527.xml new file mode 100644 index 00000000000..68f276ad5f8 --- /dev/null +++ b/data/Leland/E527.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E528.xml b/data/Leland/E528.xml new file mode 100644 index 00000000000..dec067dd401 --- /dev/null +++ b/data/Leland/E528.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E529.xml b/data/Leland/E529.xml new file mode 100644 index 00000000000..90f6d9cc323 --- /dev/null +++ b/data/Leland/E529.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E52A.xml b/data/Leland/E52A.xml new file mode 100644 index 00000000000..e113b8e373b --- /dev/null +++ b/data/Leland/E52A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E52B.xml b/data/Leland/E52B.xml new file mode 100644 index 00000000000..056b684b8bc --- /dev/null +++ b/data/Leland/E52B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E52C.xml b/data/Leland/E52C.xml new file mode 100644 index 00000000000..b0db6b10ee7 --- /dev/null +++ b/data/Leland/E52C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E52D.xml b/data/Leland/E52D.xml new file mode 100644 index 00000000000..5ee19cde423 --- /dev/null +++ b/data/Leland/E52D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E52E.xml b/data/Leland/E52E.xml new file mode 100644 index 00000000000..dd713d433f4 --- /dev/null +++ b/data/Leland/E52E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E52F.xml b/data/Leland/E52F.xml new file mode 100644 index 00000000000..7aae392f1cd --- /dev/null +++ b/data/Leland/E52F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E530.xml b/data/Leland/E530.xml new file mode 100644 index 00000000000..77e53a9c5fd --- /dev/null +++ b/data/Leland/E530.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E531.xml b/data/Leland/E531.xml new file mode 100644 index 00000000000..861853b3c00 --- /dev/null +++ b/data/Leland/E531.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E532.xml b/data/Leland/E532.xml new file mode 100644 index 00000000000..f3ffff8d861 --- /dev/null +++ b/data/Leland/E532.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E533.xml b/data/Leland/E533.xml new file mode 100644 index 00000000000..5b632cee412 --- /dev/null +++ b/data/Leland/E533.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E534.xml b/data/Leland/E534.xml new file mode 100644 index 00000000000..6a2831e75e3 --- /dev/null +++ b/data/Leland/E534.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E535.xml b/data/Leland/E535.xml new file mode 100644 index 00000000000..d72f3ddcd77 --- /dev/null +++ b/data/Leland/E535.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E536.xml b/data/Leland/E536.xml new file mode 100644 index 00000000000..acb35a5cfbe --- /dev/null +++ b/data/Leland/E536.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E537.xml b/data/Leland/E537.xml new file mode 100644 index 00000000000..f17fcaa8979 --- /dev/null +++ b/data/Leland/E537.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E538.xml b/data/Leland/E538.xml new file mode 100644 index 00000000000..7fd5c34085f --- /dev/null +++ b/data/Leland/E538.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E539.xml b/data/Leland/E539.xml new file mode 100644 index 00000000000..a99ebb621a5 --- /dev/null +++ b/data/Leland/E539.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E53A.xml b/data/Leland/E53A.xml new file mode 100644 index 00000000000..834bbd83f19 --- /dev/null +++ b/data/Leland/E53A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E53B.xml b/data/Leland/E53B.xml new file mode 100644 index 00000000000..e8017be21c5 --- /dev/null +++ b/data/Leland/E53B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E53C.xml b/data/Leland/E53C.xml new file mode 100644 index 00000000000..d8279a406ef --- /dev/null +++ b/data/Leland/E53C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E53D.xml b/data/Leland/E53D.xml new file mode 100644 index 00000000000..f4dfb47caa2 --- /dev/null +++ b/data/Leland/E53D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E566.xml b/data/Leland/E566.xml new file mode 100644 index 00000000000..270523050c4 --- /dev/null +++ b/data/Leland/E566.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E567.xml b/data/Leland/E567.xml new file mode 100644 index 00000000000..51a3ef8430a --- /dev/null +++ b/data/Leland/E567.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E568.xml b/data/Leland/E568.xml new file mode 100644 index 00000000000..fd8958ea916 --- /dev/null +++ b/data/Leland/E568.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E569.xml b/data/Leland/E569.xml new file mode 100644 index 00000000000..632733a292a --- /dev/null +++ b/data/Leland/E569.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E56A.xml b/data/Leland/E56A.xml new file mode 100644 index 00000000000..44c7fd491f8 --- /dev/null +++ b/data/Leland/E56A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E56B.xml b/data/Leland/E56B.xml new file mode 100644 index 00000000000..5d96d85ef34 --- /dev/null +++ b/data/Leland/E56B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E56C.xml b/data/Leland/E56C.xml new file mode 100644 index 00000000000..24b1187141d --- /dev/null +++ b/data/Leland/E56C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E56D.xml b/data/Leland/E56D.xml new file mode 100644 index 00000000000..c2c0b8015d4 --- /dev/null +++ b/data/Leland/E56D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E56E.xml b/data/Leland/E56E.xml new file mode 100644 index 00000000000..a57e5cbc544 --- /dev/null +++ b/data/Leland/E56E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E56F.xml b/data/Leland/E56F.xml new file mode 100644 index 00000000000..0aa20110f39 --- /dev/null +++ b/data/Leland/E56F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E583.xml b/data/Leland/E583.xml new file mode 100644 index 00000000000..3423b2de17f --- /dev/null +++ b/data/Leland/E583.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E587.xml b/data/Leland/E587.xml new file mode 100644 index 00000000000..49247f8c72e --- /dev/null +++ b/data/Leland/E587.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E59D.xml b/data/Leland/E59D.xml new file mode 100644 index 00000000000..a4d825d59ae --- /dev/null +++ b/data/Leland/E59D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E59E.xml b/data/Leland/E59E.xml new file mode 100644 index 00000000000..a8080db2af7 --- /dev/null +++ b/data/Leland/E59E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E5B2.xml b/data/Leland/E5B2.xml new file mode 100644 index 00000000000..6df5b6b5fa5 --- /dev/null +++ b/data/Leland/E5B2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E5B5.xml b/data/Leland/E5B5.xml new file mode 100644 index 00000000000..18554711c0f --- /dev/null +++ b/data/Leland/E5B5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E5B8.xml b/data/Leland/E5B8.xml new file mode 100644 index 00000000000..4e665d51f7b --- /dev/null +++ b/data/Leland/E5B8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E5BB.xml b/data/Leland/E5BB.xml new file mode 100644 index 00000000000..be98da33f6f --- /dev/null +++ b/data/Leland/E5BB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E5BC.xml b/data/Leland/E5BC.xml new file mode 100644 index 00000000000..d0f645f17b4 --- /dev/null +++ b/data/Leland/E5BC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E5BD.xml b/data/Leland/E5BD.xml new file mode 100644 index 00000000000..63bcf3effd7 --- /dev/null +++ b/data/Leland/E5BD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E5BE.xml b/data/Leland/E5BE.xml new file mode 100644 index 00000000000..061b422b057 --- /dev/null +++ b/data/Leland/E5BE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E5C0.xml b/data/Leland/E5C0.xml new file mode 100644 index 00000000000..add821710b9 --- /dev/null +++ b/data/Leland/E5C0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E5C3.xml b/data/Leland/E5C3.xml new file mode 100644 index 00000000000..312478e95af --- /dev/null +++ b/data/Leland/E5C3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E5C6.xml b/data/Leland/E5C6.xml new file mode 100644 index 00000000000..e0a63d6f9a7 --- /dev/null +++ b/data/Leland/E5C6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E5C7.xml b/data/Leland/E5C7.xml new file mode 100644 index 00000000000..e8ac5f34c22 --- /dev/null +++ b/data/Leland/E5C7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E5C8.xml b/data/Leland/E5C8.xml new file mode 100644 index 00000000000..afc2f27c7ee --- /dev/null +++ b/data/Leland/E5C8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E5E5.xml b/data/Leland/E5E5.xml new file mode 100644 index 00000000000..6aacc46a8a9 --- /dev/null +++ b/data/Leland/E5E5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E5E6.xml b/data/Leland/E5E6.xml new file mode 100644 index 00000000000..1b83fd24541 --- /dev/null +++ b/data/Leland/E5E6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E5E7.xml b/data/Leland/E5E7.xml new file mode 100644 index 00000000000..967297fdb4b --- /dev/null +++ b/data/Leland/E5E7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E610.xml b/data/Leland/E610.xml new file mode 100644 index 00000000000..033d5523332 --- /dev/null +++ b/data/Leland/E610.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E611.xml b/data/Leland/E611.xml new file mode 100644 index 00000000000..ee73733f264 --- /dev/null +++ b/data/Leland/E611.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E612.xml b/data/Leland/E612.xml new file mode 100644 index 00000000000..5601b0f499d --- /dev/null +++ b/data/Leland/E612.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E613.xml b/data/Leland/E613.xml new file mode 100644 index 00000000000..26df9057438 --- /dev/null +++ b/data/Leland/E613.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E614.xml b/data/Leland/E614.xml new file mode 100644 index 00000000000..7ff474d5354 --- /dev/null +++ b/data/Leland/E614.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E630.xml b/data/Leland/E630.xml new file mode 100644 index 00000000000..7f3ab6b6b67 --- /dev/null +++ b/data/Leland/E630.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E631.xml b/data/Leland/E631.xml new file mode 100644 index 00000000000..ec3682f0c60 --- /dev/null +++ b/data/Leland/E631.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E632.xml b/data/Leland/E632.xml new file mode 100644 index 00000000000..3fb6f9caedd --- /dev/null +++ b/data/Leland/E632.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E650.xml b/data/Leland/E650.xml new file mode 100644 index 00000000000..4e9cab7471b --- /dev/null +++ b/data/Leland/E650.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E651.xml b/data/Leland/E651.xml new file mode 100644 index 00000000000..8aa64f74e69 --- /dev/null +++ b/data/Leland/E651.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E655.xml b/data/Leland/E655.xml new file mode 100644 index 00000000000..fdf68e70a6c --- /dev/null +++ b/data/Leland/E655.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E880.xml b/data/Leland/E880.xml new file mode 100644 index 00000000000..bb47ef425ac --- /dev/null +++ b/data/Leland/E880.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E881.xml b/data/Leland/E881.xml new file mode 100644 index 00000000000..00c4d80268b --- /dev/null +++ b/data/Leland/E881.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E882.xml b/data/Leland/E882.xml new file mode 100644 index 00000000000..ae526a89e77 --- /dev/null +++ b/data/Leland/E882.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E883.xml b/data/Leland/E883.xml new file mode 100644 index 00000000000..daa786bc38d --- /dev/null +++ b/data/Leland/E883.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E884.xml b/data/Leland/E884.xml new file mode 100644 index 00000000000..cf0ee948767 --- /dev/null +++ b/data/Leland/E884.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E885.xml b/data/Leland/E885.xml new file mode 100644 index 00000000000..71766256291 --- /dev/null +++ b/data/Leland/E885.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E886.xml b/data/Leland/E886.xml new file mode 100644 index 00000000000..d901b1d8b38 --- /dev/null +++ b/data/Leland/E886.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E887.xml b/data/Leland/E887.xml new file mode 100644 index 00000000000..adf9b51fdb9 --- /dev/null +++ b/data/Leland/E887.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E888.xml b/data/Leland/E888.xml new file mode 100644 index 00000000000..4d0f7fee246 --- /dev/null +++ b/data/Leland/E888.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E889.xml b/data/Leland/E889.xml new file mode 100644 index 00000000000..692b7c3dc23 --- /dev/null +++ b/data/Leland/E889.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E88A.xml b/data/Leland/E88A.xml new file mode 100644 index 00000000000..f711208dec4 --- /dev/null +++ b/data/Leland/E88A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E93C.xml b/data/Leland/E93C.xml new file mode 100644 index 00000000000..45c33675a94 --- /dev/null +++ b/data/Leland/E93C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E93D.xml b/data/Leland/E93D.xml new file mode 100644 index 00000000000..b97be880543 --- /dev/null +++ b/data/Leland/E93D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/EAA4.xml b/data/Leland/EAA4.xml new file mode 100644 index 00000000000..c76376b0916 --- /dev/null +++ b/data/Leland/EAA4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/EAA9.xml b/data/Leland/EAA9.xml new file mode 100644 index 00000000000..f1bbb04b33a --- /dev/null +++ b/data/Leland/EAA9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/EAAA.xml b/data/Leland/EAAA.xml new file mode 100644 index 00000000000..fb104294b4d --- /dev/null +++ b/data/Leland/EAAA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/EAAD.xml b/data/Leland/EAAD.xml new file mode 100644 index 00000000000..b79eb6ef0f4 --- /dev/null +++ b/data/Leland/EAAD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/EAAE.xml b/data/Leland/EAAE.xml new file mode 100644 index 00000000000..ac30ea1a826 --- /dev/null +++ b/data/Leland/EAAE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma.xml b/data/Petaluma.xml new file mode 100644 index 00000000000..8d2987dfe0d --- /dev/null +++ b/data/Petaluma.xml @@ -0,0 +1,599 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/Petaluma/E000.xml b/data/Petaluma/E000.xml new file mode 100644 index 00000000000..7a993cdf518 --- /dev/null +++ b/data/Petaluma/E000.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E003.xml b/data/Petaluma/E003.xml new file mode 100644 index 00000000000..6ac8f2d1c65 --- /dev/null +++ b/data/Petaluma/E003.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E004.xml b/data/Petaluma/E004.xml new file mode 100644 index 00000000000..b8ea4ab3d2d --- /dev/null +++ b/data/Petaluma/E004.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E043.xml b/data/Petaluma/E043.xml new file mode 100644 index 00000000000..efacfe5209e --- /dev/null +++ b/data/Petaluma/E043.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E044.xml b/data/Petaluma/E044.xml new file mode 100644 index 00000000000..d9233b79db2 --- /dev/null +++ b/data/Petaluma/E044.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E045.xml b/data/Petaluma/E045.xml new file mode 100644 index 00000000000..693dcbd30a8 --- /dev/null +++ b/data/Petaluma/E045.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E046.xml b/data/Petaluma/E046.xml new file mode 100644 index 00000000000..c312f786b0e --- /dev/null +++ b/data/Petaluma/E046.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E047.xml b/data/Petaluma/E047.xml new file mode 100644 index 00000000000..a16b54305fa --- /dev/null +++ b/data/Petaluma/E047.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E048.xml b/data/Petaluma/E048.xml new file mode 100644 index 00000000000..908dc599283 --- /dev/null +++ b/data/Petaluma/E048.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E049.xml b/data/Petaluma/E049.xml new file mode 100644 index 00000000000..10aeaa5fb2f --- /dev/null +++ b/data/Petaluma/E049.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E04B.xml b/data/Petaluma/E04B.xml new file mode 100644 index 00000000000..ca0e25396f7 --- /dev/null +++ b/data/Petaluma/E04B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E050.xml b/data/Petaluma/E050.xml new file mode 100644 index 00000000000..0f2ae283504 --- /dev/null +++ b/data/Petaluma/E050.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E051.xml b/data/Petaluma/E051.xml new file mode 100644 index 00000000000..69913faab49 --- /dev/null +++ b/data/Petaluma/E051.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E052.xml b/data/Petaluma/E052.xml new file mode 100644 index 00000000000..259bb4730ad --- /dev/null +++ b/data/Petaluma/E052.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E053.xml b/data/Petaluma/E053.xml new file mode 100644 index 00000000000..905691a82e5 --- /dev/null +++ b/data/Petaluma/E053.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E054.xml b/data/Petaluma/E054.xml new file mode 100644 index 00000000000..fe948d0bb75 --- /dev/null +++ b/data/Petaluma/E054.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E055.xml b/data/Petaluma/E055.xml new file mode 100644 index 00000000000..408381cbece --- /dev/null +++ b/data/Petaluma/E055.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E056.xml b/data/Petaluma/E056.xml new file mode 100644 index 00000000000..3c5be8974ea --- /dev/null +++ b/data/Petaluma/E056.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E05C.xml b/data/Petaluma/E05C.xml new file mode 100644 index 00000000000..89782880a50 --- /dev/null +++ b/data/Petaluma/E05C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E05D.xml b/data/Petaluma/E05D.xml new file mode 100644 index 00000000000..7b2c21d6a1a --- /dev/null +++ b/data/Petaluma/E05D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E062.xml b/data/Petaluma/E062.xml new file mode 100644 index 00000000000..322838a3297 --- /dev/null +++ b/data/Petaluma/E062.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E063.xml b/data/Petaluma/E063.xml new file mode 100644 index 00000000000..2443e226e7d --- /dev/null +++ b/data/Petaluma/E063.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E064.xml b/data/Petaluma/E064.xml new file mode 100644 index 00000000000..c19dc6a5e74 --- /dev/null +++ b/data/Petaluma/E064.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E065.xml b/data/Petaluma/E065.xml new file mode 100644 index 00000000000..f11745a3fc2 --- /dev/null +++ b/data/Petaluma/E065.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E066.xml b/data/Petaluma/E066.xml new file mode 100644 index 00000000000..a2dc3cf0a8d --- /dev/null +++ b/data/Petaluma/E066.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E069.xml b/data/Petaluma/E069.xml new file mode 100644 index 00000000000..ab983913851 --- /dev/null +++ b/data/Petaluma/E069.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E06A.xml b/data/Petaluma/E06A.xml new file mode 100644 index 00000000000..0cb9f402282 --- /dev/null +++ b/data/Petaluma/E06A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E073.xml b/data/Petaluma/E073.xml new file mode 100644 index 00000000000..f34359f8b04 --- /dev/null +++ b/data/Petaluma/E073.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E074.xml b/data/Petaluma/E074.xml new file mode 100644 index 00000000000..7593b6e6897 --- /dev/null +++ b/data/Petaluma/E074.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E075.xml b/data/Petaluma/E075.xml new file mode 100644 index 00000000000..a98b4cc16f3 --- /dev/null +++ b/data/Petaluma/E075.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E076.xml b/data/Petaluma/E076.xml new file mode 100644 index 00000000000..4d3f743cebd --- /dev/null +++ b/data/Petaluma/E076.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E077.xml b/data/Petaluma/E077.xml new file mode 100644 index 00000000000..305a61a98aa --- /dev/null +++ b/data/Petaluma/E077.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E080.xml b/data/Petaluma/E080.xml new file mode 100644 index 00000000000..1c4d952c84e --- /dev/null +++ b/data/Petaluma/E080.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E081.xml b/data/Petaluma/E081.xml new file mode 100644 index 00000000000..29f5d134288 --- /dev/null +++ b/data/Petaluma/E081.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E082.xml b/data/Petaluma/E082.xml new file mode 100644 index 00000000000..013beeae96e --- /dev/null +++ b/data/Petaluma/E082.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E083.xml b/data/Petaluma/E083.xml new file mode 100644 index 00000000000..ed11ad429ec --- /dev/null +++ b/data/Petaluma/E083.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E084.xml b/data/Petaluma/E084.xml new file mode 100644 index 00000000000..d4f75f77404 --- /dev/null +++ b/data/Petaluma/E084.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E085.xml b/data/Petaluma/E085.xml new file mode 100644 index 00000000000..ad370c36d72 --- /dev/null +++ b/data/Petaluma/E085.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E086.xml b/data/Petaluma/E086.xml new file mode 100644 index 00000000000..d6533f1062f --- /dev/null +++ b/data/Petaluma/E086.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E087.xml b/data/Petaluma/E087.xml new file mode 100644 index 00000000000..613d932c686 --- /dev/null +++ b/data/Petaluma/E087.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E088.xml b/data/Petaluma/E088.xml new file mode 100644 index 00000000000..9edfb5f7132 --- /dev/null +++ b/data/Petaluma/E088.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E089.xml b/data/Petaluma/E089.xml new file mode 100644 index 00000000000..c8d123a2f99 --- /dev/null +++ b/data/Petaluma/E089.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E08A.xml b/data/Petaluma/E08A.xml new file mode 100644 index 00000000000..c16a58146c3 --- /dev/null +++ b/data/Petaluma/E08A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E08B.xml b/data/Petaluma/E08B.xml new file mode 100644 index 00000000000..3f6bb3c91ea --- /dev/null +++ b/data/Petaluma/E08B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E08C.xml b/data/Petaluma/E08C.xml new file mode 100644 index 00000000000..e76e1d0ffe8 --- /dev/null +++ b/data/Petaluma/E08C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E08D.xml b/data/Petaluma/E08D.xml new file mode 100644 index 00000000000..bd190228dc1 --- /dev/null +++ b/data/Petaluma/E08D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E08E.xml b/data/Petaluma/E08E.xml new file mode 100644 index 00000000000..fb4492d463a --- /dev/null +++ b/data/Petaluma/E08E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E08F.xml b/data/Petaluma/E08F.xml new file mode 100644 index 00000000000..45ea9b3b94c --- /dev/null +++ b/data/Petaluma/E08F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E090.xml b/data/Petaluma/E090.xml new file mode 100644 index 00000000000..8cc494fb42d --- /dev/null +++ b/data/Petaluma/E090.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E091.xml b/data/Petaluma/E091.xml new file mode 100644 index 00000000000..080e5013d74 --- /dev/null +++ b/data/Petaluma/E091.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E092.xml b/data/Petaluma/E092.xml new file mode 100644 index 00000000000..38292844435 --- /dev/null +++ b/data/Petaluma/E092.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E093.xml b/data/Petaluma/E093.xml new file mode 100644 index 00000000000..609e6e38ef8 --- /dev/null +++ b/data/Petaluma/E093.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E094.xml b/data/Petaluma/E094.xml new file mode 100644 index 00000000000..09955a2f3fd --- /dev/null +++ b/data/Petaluma/E094.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E095.xml b/data/Petaluma/E095.xml new file mode 100644 index 00000000000..98491eb9fb1 --- /dev/null +++ b/data/Petaluma/E095.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0A0.xml b/data/Petaluma/E0A0.xml new file mode 100644 index 00000000000..137f5544ccf --- /dev/null +++ b/data/Petaluma/E0A0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0A1.xml b/data/Petaluma/E0A1.xml new file mode 100644 index 00000000000..e471b915e3f --- /dev/null +++ b/data/Petaluma/E0A1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0A2.xml b/data/Petaluma/E0A2.xml new file mode 100644 index 00000000000..0312794326b --- /dev/null +++ b/data/Petaluma/E0A2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0A3.xml b/data/Petaluma/E0A3.xml new file mode 100644 index 00000000000..ad358995733 --- /dev/null +++ b/data/Petaluma/E0A3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0A4.xml b/data/Petaluma/E0A4.xml new file mode 100644 index 00000000000..68e34a709a0 --- /dev/null +++ b/data/Petaluma/E0A4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0A5.xml b/data/Petaluma/E0A5.xml new file mode 100644 index 00000000000..d4eec1c1f60 --- /dev/null +++ b/data/Petaluma/E0A5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0A9.xml b/data/Petaluma/E0A9.xml new file mode 100644 index 00000000000..7fd677db4bc --- /dev/null +++ b/data/Petaluma/E0A9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0AF.xml b/data/Petaluma/E0AF.xml new file mode 100644 index 00000000000..698e7cbd5dd --- /dev/null +++ b/data/Petaluma/E0AF.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0B5.xml b/data/Petaluma/E0B5.xml new file mode 100644 index 00000000000..76611c46072 --- /dev/null +++ b/data/Petaluma/E0B5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0B6.xml b/data/Petaluma/E0B6.xml new file mode 100644 index 00000000000..1dc77f61e29 --- /dev/null +++ b/data/Petaluma/E0B6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0B7.xml b/data/Petaluma/E0B7.xml new file mode 100644 index 00000000000..ff64a3f78be --- /dev/null +++ b/data/Petaluma/E0B7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0D9.xml b/data/Petaluma/E0D9.xml new file mode 100644 index 00000000000..28267874a43 --- /dev/null +++ b/data/Petaluma/E0D9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0DA.xml b/data/Petaluma/E0DA.xml new file mode 100644 index 00000000000..3808ca73ee5 --- /dev/null +++ b/data/Petaluma/E0DA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0DB.xml b/data/Petaluma/E0DB.xml new file mode 100644 index 00000000000..b1d67b026b8 --- /dev/null +++ b/data/Petaluma/E0DB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0DC.xml b/data/Petaluma/E0DC.xml new file mode 100644 index 00000000000..66c41fe294f --- /dev/null +++ b/data/Petaluma/E0DC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0DD.xml b/data/Petaluma/E0DD.xml new file mode 100644 index 00000000000..560c82c0c65 --- /dev/null +++ b/data/Petaluma/E0DD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0DE.xml b/data/Petaluma/E0DE.xml new file mode 100644 index 00000000000..845ae53e899 --- /dev/null +++ b/data/Petaluma/E0DE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0F5.xml b/data/Petaluma/E0F5.xml new file mode 100644 index 00000000000..66207be3985 --- /dev/null +++ b/data/Petaluma/E0F5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0F6.xml b/data/Petaluma/E0F6.xml new file mode 100644 index 00000000000..4633884590e --- /dev/null +++ b/data/Petaluma/E0F6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E0FA.xml b/data/Petaluma/E0FA.xml new file mode 100644 index 00000000000..0c75bdbecd1 --- /dev/null +++ b/data/Petaluma/E0FA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E101.xml b/data/Petaluma/E101.xml new file mode 100644 index 00000000000..6b0fa0a884f --- /dev/null +++ b/data/Petaluma/E101.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E102.xml b/data/Petaluma/E102.xml new file mode 100644 index 00000000000..b9bb9977af8 --- /dev/null +++ b/data/Petaluma/E102.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E103.xml b/data/Petaluma/E103.xml new file mode 100644 index 00000000000..dbeccf854d3 --- /dev/null +++ b/data/Petaluma/E103.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E220.xml b/data/Petaluma/E220.xml new file mode 100644 index 00000000000..da11b267dcf --- /dev/null +++ b/data/Petaluma/E220.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E221.xml b/data/Petaluma/E221.xml new file mode 100644 index 00000000000..036d685acd8 --- /dev/null +++ b/data/Petaluma/E221.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E222.xml b/data/Petaluma/E222.xml new file mode 100644 index 00000000000..152ae79238b --- /dev/null +++ b/data/Petaluma/E222.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E223.xml b/data/Petaluma/E223.xml new file mode 100644 index 00000000000..f78e638b51a --- /dev/null +++ b/data/Petaluma/E223.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E224.xml b/data/Petaluma/E224.xml new file mode 100644 index 00000000000..e26e2d07878 --- /dev/null +++ b/data/Petaluma/E224.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E22A.xml b/data/Petaluma/E22A.xml new file mode 100644 index 00000000000..8e79c70c7bd --- /dev/null +++ b/data/Petaluma/E22A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E240.xml b/data/Petaluma/E240.xml new file mode 100644 index 00000000000..f56fca5791d --- /dev/null +++ b/data/Petaluma/E240.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E241.xml b/data/Petaluma/E241.xml new file mode 100644 index 00000000000..b791e6752a2 --- /dev/null +++ b/data/Petaluma/E241.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E242.xml b/data/Petaluma/E242.xml new file mode 100644 index 00000000000..66c2ce9fd1b --- /dev/null +++ b/data/Petaluma/E242.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E243.xml b/data/Petaluma/E243.xml new file mode 100644 index 00000000000..abac4516c61 --- /dev/null +++ b/data/Petaluma/E243.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E244.xml b/data/Petaluma/E244.xml new file mode 100644 index 00000000000..778a6196aab --- /dev/null +++ b/data/Petaluma/E244.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E245.xml b/data/Petaluma/E245.xml new file mode 100644 index 00000000000..3b9ab581080 --- /dev/null +++ b/data/Petaluma/E245.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E246.xml b/data/Petaluma/E246.xml new file mode 100644 index 00000000000..5d51be61171 --- /dev/null +++ b/data/Petaluma/E246.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E247.xml b/data/Petaluma/E247.xml new file mode 100644 index 00000000000..5443bff1a60 --- /dev/null +++ b/data/Petaluma/E247.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E248.xml b/data/Petaluma/E248.xml new file mode 100644 index 00000000000..1caa8a73376 --- /dev/null +++ b/data/Petaluma/E248.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E249.xml b/data/Petaluma/E249.xml new file mode 100644 index 00000000000..01bdd8ce1ae --- /dev/null +++ b/data/Petaluma/E249.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E24A.xml b/data/Petaluma/E24A.xml new file mode 100644 index 00000000000..2257550d0a7 --- /dev/null +++ b/data/Petaluma/E24A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E24B.xml b/data/Petaluma/E24B.xml new file mode 100644 index 00000000000..b3a8109a281 --- /dev/null +++ b/data/Petaluma/E24B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E24C.xml b/data/Petaluma/E24C.xml new file mode 100644 index 00000000000..22df236bb97 --- /dev/null +++ b/data/Petaluma/E24C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E24D.xml b/data/Petaluma/E24D.xml new file mode 100644 index 00000000000..f22c732dcbe --- /dev/null +++ b/data/Petaluma/E24D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E24E.xml b/data/Petaluma/E24E.xml new file mode 100644 index 00000000000..435b410f5aa --- /dev/null +++ b/data/Petaluma/E24E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E24F.xml b/data/Petaluma/E24F.xml new file mode 100644 index 00000000000..2804cc51c58 --- /dev/null +++ b/data/Petaluma/E24F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E260.xml b/data/Petaluma/E260.xml new file mode 100644 index 00000000000..3265cab36b6 --- /dev/null +++ b/data/Petaluma/E260.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E261.xml b/data/Petaluma/E261.xml new file mode 100644 index 00000000000..53eed12ef0e --- /dev/null +++ b/data/Petaluma/E261.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E262.xml b/data/Petaluma/E262.xml new file mode 100644 index 00000000000..5a18ee278b3 --- /dev/null +++ b/data/Petaluma/E262.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E263.xml b/data/Petaluma/E263.xml new file mode 100644 index 00000000000..516333674a0 --- /dev/null +++ b/data/Petaluma/E263.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E264.xml b/data/Petaluma/E264.xml new file mode 100644 index 00000000000..4ed049fcb82 --- /dev/null +++ b/data/Petaluma/E264.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E265.xml b/data/Petaluma/E265.xml new file mode 100644 index 00000000000..da08f86562c --- /dev/null +++ b/data/Petaluma/E265.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E266.xml b/data/Petaluma/E266.xml new file mode 100644 index 00000000000..7bfdf2ff66e --- /dev/null +++ b/data/Petaluma/E266.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E267.xml b/data/Petaluma/E267.xml new file mode 100644 index 00000000000..8b660810232 --- /dev/null +++ b/data/Petaluma/E267.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E268.xml b/data/Petaluma/E268.xml new file mode 100644 index 00000000000..d10d33468bd --- /dev/null +++ b/data/Petaluma/E268.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E269.xml b/data/Petaluma/E269.xml new file mode 100644 index 00000000000..00bcabee975 --- /dev/null +++ b/data/Petaluma/E269.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E26A.xml b/data/Petaluma/E26A.xml new file mode 100644 index 00000000000..34d2fd6670a --- /dev/null +++ b/data/Petaluma/E26A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E26B.xml b/data/Petaluma/E26B.xml new file mode 100644 index 00000000000..eece2c16186 --- /dev/null +++ b/data/Petaluma/E26B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E26C.xml b/data/Petaluma/E26C.xml new file mode 100644 index 00000000000..f31829b6a46 --- /dev/null +++ b/data/Petaluma/E26C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E26D.xml b/data/Petaluma/E26D.xml new file mode 100644 index 00000000000..34f099db093 --- /dev/null +++ b/data/Petaluma/E26D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E270.xml b/data/Petaluma/E270.xml new file mode 100644 index 00000000000..4c0dca3f8fa --- /dev/null +++ b/data/Petaluma/E270.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E271.xml b/data/Petaluma/E271.xml new file mode 100644 index 00000000000..0c20b80e89b --- /dev/null +++ b/data/Petaluma/E271.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E272.xml b/data/Petaluma/E272.xml new file mode 100644 index 00000000000..17450e8d9ce --- /dev/null +++ b/data/Petaluma/E272.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E273.xml b/data/Petaluma/E273.xml new file mode 100644 index 00000000000..c3fd2a148f1 --- /dev/null +++ b/data/Petaluma/E273.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E274.xml b/data/Petaluma/E274.xml new file mode 100644 index 00000000000..ff1452d1b7e --- /dev/null +++ b/data/Petaluma/E274.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E275.xml b/data/Petaluma/E275.xml new file mode 100644 index 00000000000..14ade428454 --- /dev/null +++ b/data/Petaluma/E275.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E280.xml b/data/Petaluma/E280.xml new file mode 100644 index 00000000000..8903029d851 --- /dev/null +++ b/data/Petaluma/E280.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E281.xml b/data/Petaluma/E281.xml new file mode 100644 index 00000000000..9a560dd3f9a --- /dev/null +++ b/data/Petaluma/E281.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E282.xml b/data/Petaluma/E282.xml new file mode 100644 index 00000000000..c2806f57070 --- /dev/null +++ b/data/Petaluma/E282.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E283.xml b/data/Petaluma/E283.xml new file mode 100644 index 00000000000..f3bd27007c8 --- /dev/null +++ b/data/Petaluma/E283.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E440.xml b/data/Petaluma/E440.xml new file mode 100644 index 00000000000..1b11f0b5d2f --- /dev/null +++ b/data/Petaluma/E440.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E441.xml b/data/Petaluma/E441.xml new file mode 100644 index 00000000000..c33c349363e --- /dev/null +++ b/data/Petaluma/E441.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E442.xml b/data/Petaluma/E442.xml new file mode 100644 index 00000000000..2ef1cbbff9d --- /dev/null +++ b/data/Petaluma/E442.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E443.xml b/data/Petaluma/E443.xml new file mode 100644 index 00000000000..cc072e90132 --- /dev/null +++ b/data/Petaluma/E443.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E444.xml b/data/Petaluma/E444.xml new file mode 100644 index 00000000000..df419762e78 --- /dev/null +++ b/data/Petaluma/E444.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E445.xml b/data/Petaluma/E445.xml new file mode 100644 index 00000000000..d6e55d6dd1f --- /dev/null +++ b/data/Petaluma/E445.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E446.xml b/data/Petaluma/E446.xml new file mode 100644 index 00000000000..8e9789c18fa --- /dev/null +++ b/data/Petaluma/E446.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E447.xml b/data/Petaluma/E447.xml new file mode 100644 index 00000000000..cd86e5ebac9 --- /dev/null +++ b/data/Petaluma/E447.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4A0.xml b/data/Petaluma/E4A0.xml new file mode 100644 index 00000000000..f4dc8244ff5 --- /dev/null +++ b/data/Petaluma/E4A0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4A1.xml b/data/Petaluma/E4A1.xml new file mode 100644 index 00000000000..985f07d4cff --- /dev/null +++ b/data/Petaluma/E4A1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4A2.xml b/data/Petaluma/E4A2.xml new file mode 100644 index 00000000000..6de3365d20b --- /dev/null +++ b/data/Petaluma/E4A2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4A3.xml b/data/Petaluma/E4A3.xml new file mode 100644 index 00000000000..3ae5596cf6e --- /dev/null +++ b/data/Petaluma/E4A3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4A4.xml b/data/Petaluma/E4A4.xml new file mode 100644 index 00000000000..ab69a31c7ea --- /dev/null +++ b/data/Petaluma/E4A4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4A5.xml b/data/Petaluma/E4A5.xml new file mode 100644 index 00000000000..8de3cb74ba9 --- /dev/null +++ b/data/Petaluma/E4A5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4A6.xml b/data/Petaluma/E4A6.xml new file mode 100644 index 00000000000..bddb34d7c11 --- /dev/null +++ b/data/Petaluma/E4A6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4A7.xml b/data/Petaluma/E4A7.xml new file mode 100644 index 00000000000..b720c0342be --- /dev/null +++ b/data/Petaluma/E4A7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4A8.xml b/data/Petaluma/E4A8.xml new file mode 100644 index 00000000000..22f0f382296 --- /dev/null +++ b/data/Petaluma/E4A8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4A9.xml b/data/Petaluma/E4A9.xml new file mode 100644 index 00000000000..f8fb1013eb5 --- /dev/null +++ b/data/Petaluma/E4A9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4AA.xml b/data/Petaluma/E4AA.xml new file mode 100644 index 00000000000..71921c39e8b --- /dev/null +++ b/data/Petaluma/E4AA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4AB.xml b/data/Petaluma/E4AB.xml new file mode 100644 index 00000000000..862afdfd5da --- /dev/null +++ b/data/Petaluma/E4AB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4AC.xml b/data/Petaluma/E4AC.xml new file mode 100644 index 00000000000..c6fa073f1a3 --- /dev/null +++ b/data/Petaluma/E4AC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4AD.xml b/data/Petaluma/E4AD.xml new file mode 100644 index 00000000000..a2d0ff8d79e --- /dev/null +++ b/data/Petaluma/E4AD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4AE.xml b/data/Petaluma/E4AE.xml new file mode 100644 index 00000000000..c96054dca09 --- /dev/null +++ b/data/Petaluma/E4AE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4AF.xml b/data/Petaluma/E4AF.xml new file mode 100644 index 00000000000..2fd012f69d3 --- /dev/null +++ b/data/Petaluma/E4AF.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4B0.xml b/data/Petaluma/E4B0.xml new file mode 100644 index 00000000000..5dabd2c359f --- /dev/null +++ b/data/Petaluma/E4B0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4B1.xml b/data/Petaluma/E4B1.xml new file mode 100644 index 00000000000..2dcd5513340 --- /dev/null +++ b/data/Petaluma/E4B1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4B2.xml b/data/Petaluma/E4B2.xml new file mode 100644 index 00000000000..71bec4c1001 --- /dev/null +++ b/data/Petaluma/E4B2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4B3.xml b/data/Petaluma/E4B3.xml new file mode 100644 index 00000000000..483793ab50f --- /dev/null +++ b/data/Petaluma/E4B3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4B4.xml b/data/Petaluma/E4B4.xml new file mode 100644 index 00000000000..01262c8be9c --- /dev/null +++ b/data/Petaluma/E4B4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4B5.xml b/data/Petaluma/E4B5.xml new file mode 100644 index 00000000000..e154e86a60a --- /dev/null +++ b/data/Petaluma/E4B5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4B6.xml b/data/Petaluma/E4B6.xml new file mode 100644 index 00000000000..e148c5c8c5a --- /dev/null +++ b/data/Petaluma/E4B6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4B7.xml b/data/Petaluma/E4B7.xml new file mode 100644 index 00000000000..afebf9434ef --- /dev/null +++ b/data/Petaluma/E4B7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4B8.xml b/data/Petaluma/E4B8.xml new file mode 100644 index 00000000000..57177adb210 --- /dev/null +++ b/data/Petaluma/E4B8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4B9.xml b/data/Petaluma/E4B9.xml new file mode 100644 index 00000000000..f8537c765a2 --- /dev/null +++ b/data/Petaluma/E4B9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4BA.xml b/data/Petaluma/E4BA.xml new file mode 100644 index 00000000000..8a4740a5bbf --- /dev/null +++ b/data/Petaluma/E4BA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4BB.xml b/data/Petaluma/E4BB.xml new file mode 100644 index 00000000000..fdc9f5c8a89 --- /dev/null +++ b/data/Petaluma/E4BB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4BC.xml b/data/Petaluma/E4BC.xml new file mode 100644 index 00000000000..b5a8aaf38a9 --- /dev/null +++ b/data/Petaluma/E4BC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4BD.xml b/data/Petaluma/E4BD.xml new file mode 100644 index 00000000000..6901a244037 --- /dev/null +++ b/data/Petaluma/E4BD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4C0.xml b/data/Petaluma/E4C0.xml new file mode 100644 index 00000000000..243880b98a8 --- /dev/null +++ b/data/Petaluma/E4C0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4C1.xml b/data/Petaluma/E4C1.xml new file mode 100644 index 00000000000..5b933bbba6d --- /dev/null +++ b/data/Petaluma/E4C1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4C2.xml b/data/Petaluma/E4C2.xml new file mode 100644 index 00000000000..a7ce6a44d84 --- /dev/null +++ b/data/Petaluma/E4C2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4C3.xml b/data/Petaluma/E4C3.xml new file mode 100644 index 00000000000..9c8823c7609 --- /dev/null +++ b/data/Petaluma/E4C3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4C4.xml b/data/Petaluma/E4C4.xml new file mode 100644 index 00000000000..c2de0405058 --- /dev/null +++ b/data/Petaluma/E4C4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4C5.xml b/data/Petaluma/E4C5.xml new file mode 100644 index 00000000000..c7d6a798ca5 --- /dev/null +++ b/data/Petaluma/E4C5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4C6.xml b/data/Petaluma/E4C6.xml new file mode 100644 index 00000000000..a1a49928bb6 --- /dev/null +++ b/data/Petaluma/E4C6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4C7.xml b/data/Petaluma/E4C7.xml new file mode 100644 index 00000000000..5df952682d9 --- /dev/null +++ b/data/Petaluma/E4C7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4C8.xml b/data/Petaluma/E4C8.xml new file mode 100644 index 00000000000..8f194ea45c9 --- /dev/null +++ b/data/Petaluma/E4C8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4C9.xml b/data/Petaluma/E4C9.xml new file mode 100644 index 00000000000..3d490ea5bb6 --- /dev/null +++ b/data/Petaluma/E4C9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4CE.xml b/data/Petaluma/E4CE.xml new file mode 100644 index 00000000000..0ff468f2637 --- /dev/null +++ b/data/Petaluma/E4CE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4E0.xml b/data/Petaluma/E4E0.xml new file mode 100644 index 00000000000..2100669b45d --- /dev/null +++ b/data/Petaluma/E4E0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4E1.xml b/data/Petaluma/E4E1.xml new file mode 100644 index 00000000000..2e24b00e1fa --- /dev/null +++ b/data/Petaluma/E4E1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4E2.xml b/data/Petaluma/E4E2.xml new file mode 100644 index 00000000000..7359c90125a --- /dev/null +++ b/data/Petaluma/E4E2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4E3.xml b/data/Petaluma/E4E3.xml new file mode 100644 index 00000000000..791933a1f4a --- /dev/null +++ b/data/Petaluma/E4E3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4E4.xml b/data/Petaluma/E4E4.xml new file mode 100644 index 00000000000..163a1915fc2 --- /dev/null +++ b/data/Petaluma/E4E4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4E5.xml b/data/Petaluma/E4E5.xml new file mode 100644 index 00000000000..8920a8e2071 --- /dev/null +++ b/data/Petaluma/E4E5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4E6.xml b/data/Petaluma/E4E6.xml new file mode 100644 index 00000000000..e7123776f14 --- /dev/null +++ b/data/Petaluma/E4E6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4E7.xml b/data/Petaluma/E4E7.xml new file mode 100644 index 00000000000..a10a7959985 --- /dev/null +++ b/data/Petaluma/E4E7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4E8.xml b/data/Petaluma/E4E8.xml new file mode 100644 index 00000000000..5e3eaad3aad --- /dev/null +++ b/data/Petaluma/E4E8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4E9.xml b/data/Petaluma/E4E9.xml new file mode 100644 index 00000000000..74eed922866 --- /dev/null +++ b/data/Petaluma/E4E9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4EA.xml b/data/Petaluma/E4EA.xml new file mode 100644 index 00000000000..cca3aaf99cb --- /dev/null +++ b/data/Petaluma/E4EA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4EB.xml b/data/Petaluma/E4EB.xml new file mode 100644 index 00000000000..15e8612e1d7 --- /dev/null +++ b/data/Petaluma/E4EB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4EC.xml b/data/Petaluma/E4EC.xml new file mode 100644 index 00000000000..a201693adee --- /dev/null +++ b/data/Petaluma/E4EC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4ED.xml b/data/Petaluma/E4ED.xml new file mode 100644 index 00000000000..7f159a15d96 --- /dev/null +++ b/data/Petaluma/E4ED.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4F2.xml b/data/Petaluma/E4F2.xml new file mode 100644 index 00000000000..5857ced675b --- /dev/null +++ b/data/Petaluma/E4F2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E4F6.xml b/data/Petaluma/E4F6.xml new file mode 100644 index 00000000000..11a055e86d9 --- /dev/null +++ b/data/Petaluma/E4F6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E500.xml b/data/Petaluma/E500.xml new file mode 100644 index 00000000000..6f24d702962 --- /dev/null +++ b/data/Petaluma/E500.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E501.xml b/data/Petaluma/E501.xml new file mode 100644 index 00000000000..e528002bb5d --- /dev/null +++ b/data/Petaluma/E501.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E502.xml b/data/Petaluma/E502.xml new file mode 100644 index 00000000000..2f024728777 --- /dev/null +++ b/data/Petaluma/E502.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E503.xml b/data/Petaluma/E503.xml new file mode 100644 index 00000000000..f67cd470f55 --- /dev/null +++ b/data/Petaluma/E503.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E504.xml b/data/Petaluma/E504.xml new file mode 100644 index 00000000000..a0bb4577fc1 --- /dev/null +++ b/data/Petaluma/E504.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E505.xml b/data/Petaluma/E505.xml new file mode 100644 index 00000000000..c98f0e5cee8 --- /dev/null +++ b/data/Petaluma/E505.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E510.xml b/data/Petaluma/E510.xml new file mode 100644 index 00000000000..8eb348b0a8e --- /dev/null +++ b/data/Petaluma/E510.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E511.xml b/data/Petaluma/E511.xml new file mode 100644 index 00000000000..597914b3919 --- /dev/null +++ b/data/Petaluma/E511.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E512.xml b/data/Petaluma/E512.xml new file mode 100644 index 00000000000..078556350f0 --- /dev/null +++ b/data/Petaluma/E512.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E513.xml b/data/Petaluma/E513.xml new file mode 100644 index 00000000000..9ce4306bf53 --- /dev/null +++ b/data/Petaluma/E513.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E514.xml b/data/Petaluma/E514.xml new file mode 100644 index 00000000000..c0f2950217d --- /dev/null +++ b/data/Petaluma/E514.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E515.xml b/data/Petaluma/E515.xml new file mode 100644 index 00000000000..ab7457ef670 --- /dev/null +++ b/data/Petaluma/E515.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E516.xml b/data/Petaluma/E516.xml new file mode 100644 index 00000000000..30e3c3c155c --- /dev/null +++ b/data/Petaluma/E516.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E517.xml b/data/Petaluma/E517.xml new file mode 100644 index 00000000000..04723187f46 --- /dev/null +++ b/data/Petaluma/E517.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E518.xml b/data/Petaluma/E518.xml new file mode 100644 index 00000000000..e6fd8998433 --- /dev/null +++ b/data/Petaluma/E518.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E519.xml b/data/Petaluma/E519.xml new file mode 100644 index 00000000000..45f7e1ee432 --- /dev/null +++ b/data/Petaluma/E519.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E51A.xml b/data/Petaluma/E51A.xml new file mode 100644 index 00000000000..8c76f511ed0 --- /dev/null +++ b/data/Petaluma/E51A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E51B.xml b/data/Petaluma/E51B.xml new file mode 100644 index 00000000000..b16a44b03ac --- /dev/null +++ b/data/Petaluma/E51B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E51C.xml b/data/Petaluma/E51C.xml new file mode 100644 index 00000000000..c7340146616 --- /dev/null +++ b/data/Petaluma/E51C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E51D.xml b/data/Petaluma/E51D.xml new file mode 100644 index 00000000000..3efdcc5d6a0 --- /dev/null +++ b/data/Petaluma/E51D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E51E.xml b/data/Petaluma/E51E.xml new file mode 100644 index 00000000000..92f7550d6dc --- /dev/null +++ b/data/Petaluma/E51E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E520.xml b/data/Petaluma/E520.xml new file mode 100644 index 00000000000..37890419912 --- /dev/null +++ b/data/Petaluma/E520.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E521.xml b/data/Petaluma/E521.xml new file mode 100644 index 00000000000..ed05057d9a7 --- /dev/null +++ b/data/Petaluma/E521.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E522.xml b/data/Petaluma/E522.xml new file mode 100644 index 00000000000..d6d1aeee2b7 --- /dev/null +++ b/data/Petaluma/E522.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E523.xml b/data/Petaluma/E523.xml new file mode 100644 index 00000000000..5bfc0d49d84 --- /dev/null +++ b/data/Petaluma/E523.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E524.xml b/data/Petaluma/E524.xml new file mode 100644 index 00000000000..2e929d56a8d --- /dev/null +++ b/data/Petaluma/E524.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E525.xml b/data/Petaluma/E525.xml new file mode 100644 index 00000000000..5cf92abc7b7 --- /dev/null +++ b/data/Petaluma/E525.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E526.xml b/data/Petaluma/E526.xml new file mode 100644 index 00000000000..54949ab8d44 --- /dev/null +++ b/data/Petaluma/E526.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E527.xml b/data/Petaluma/E527.xml new file mode 100644 index 00000000000..8cc3114b079 --- /dev/null +++ b/data/Petaluma/E527.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E528.xml b/data/Petaluma/E528.xml new file mode 100644 index 00000000000..ee08cdd5e1a --- /dev/null +++ b/data/Petaluma/E528.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E529.xml b/data/Petaluma/E529.xml new file mode 100644 index 00000000000..29dcae8f891 --- /dev/null +++ b/data/Petaluma/E529.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E52A.xml b/data/Petaluma/E52A.xml new file mode 100644 index 00000000000..6cda41b7bf6 --- /dev/null +++ b/data/Petaluma/E52A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E52B.xml b/data/Petaluma/E52B.xml new file mode 100644 index 00000000000..d94d8a3c62d --- /dev/null +++ b/data/Petaluma/E52B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E52C.xml b/data/Petaluma/E52C.xml new file mode 100644 index 00000000000..761b9f84524 --- /dev/null +++ b/data/Petaluma/E52C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E52D.xml b/data/Petaluma/E52D.xml new file mode 100644 index 00000000000..7403b8cae60 --- /dev/null +++ b/data/Petaluma/E52D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E52E.xml b/data/Petaluma/E52E.xml new file mode 100644 index 00000000000..7c1b4849104 --- /dev/null +++ b/data/Petaluma/E52E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E52F.xml b/data/Petaluma/E52F.xml new file mode 100644 index 00000000000..7a79235c07f --- /dev/null +++ b/data/Petaluma/E52F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E530.xml b/data/Petaluma/E530.xml new file mode 100644 index 00000000000..74f76702b58 --- /dev/null +++ b/data/Petaluma/E530.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E531.xml b/data/Petaluma/E531.xml new file mode 100644 index 00000000000..423cd0cd2d5 --- /dev/null +++ b/data/Petaluma/E531.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E532.xml b/data/Petaluma/E532.xml new file mode 100644 index 00000000000..a4136881a2b --- /dev/null +++ b/data/Petaluma/E532.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E533.xml b/data/Petaluma/E533.xml new file mode 100644 index 00000000000..6853246142b --- /dev/null +++ b/data/Petaluma/E533.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E534.xml b/data/Petaluma/E534.xml new file mode 100644 index 00000000000..b60488eb4e5 --- /dev/null +++ b/data/Petaluma/E534.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E535.xml b/data/Petaluma/E535.xml new file mode 100644 index 00000000000..934a0733597 --- /dev/null +++ b/data/Petaluma/E535.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E536.xml b/data/Petaluma/E536.xml new file mode 100644 index 00000000000..76b6ebb8147 --- /dev/null +++ b/data/Petaluma/E536.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E537.xml b/data/Petaluma/E537.xml new file mode 100644 index 00000000000..12dfbc59aa5 --- /dev/null +++ b/data/Petaluma/E537.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E538.xml b/data/Petaluma/E538.xml new file mode 100644 index 00000000000..9cdbdd615b6 --- /dev/null +++ b/data/Petaluma/E538.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E539.xml b/data/Petaluma/E539.xml new file mode 100644 index 00000000000..a3f3c2bd538 --- /dev/null +++ b/data/Petaluma/E539.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E53A.xml b/data/Petaluma/E53A.xml new file mode 100644 index 00000000000..5af00553174 --- /dev/null +++ b/data/Petaluma/E53A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E53B.xml b/data/Petaluma/E53B.xml new file mode 100644 index 00000000000..9a178e8235d --- /dev/null +++ b/data/Petaluma/E53B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E53C.xml b/data/Petaluma/E53C.xml new file mode 100644 index 00000000000..5cbc9cbf51c --- /dev/null +++ b/data/Petaluma/E53C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E53D.xml b/data/Petaluma/E53D.xml new file mode 100644 index 00000000000..a89fddfe684 --- /dev/null +++ b/data/Petaluma/E53D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E566.xml b/data/Petaluma/E566.xml new file mode 100644 index 00000000000..f4490cc963a --- /dev/null +++ b/data/Petaluma/E566.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E567.xml b/data/Petaluma/E567.xml new file mode 100644 index 00000000000..4566f98f3c8 --- /dev/null +++ b/data/Petaluma/E567.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E568.xml b/data/Petaluma/E568.xml new file mode 100644 index 00000000000..ff830825fff --- /dev/null +++ b/data/Petaluma/E568.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E569.xml b/data/Petaluma/E569.xml new file mode 100644 index 00000000000..a2e289bd96b --- /dev/null +++ b/data/Petaluma/E569.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E56A.xml b/data/Petaluma/E56A.xml new file mode 100644 index 00000000000..de6bf95a711 --- /dev/null +++ b/data/Petaluma/E56A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E56B.xml b/data/Petaluma/E56B.xml new file mode 100644 index 00000000000..676f6b54358 --- /dev/null +++ b/data/Petaluma/E56B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E56C.xml b/data/Petaluma/E56C.xml new file mode 100644 index 00000000000..2f1c7682bb8 --- /dev/null +++ b/data/Petaluma/E56C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E56D.xml b/data/Petaluma/E56D.xml new file mode 100644 index 00000000000..f91f6c84387 --- /dev/null +++ b/data/Petaluma/E56D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E56E.xml b/data/Petaluma/E56E.xml new file mode 100644 index 00000000000..e39833e8b17 --- /dev/null +++ b/data/Petaluma/E56E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E56F.xml b/data/Petaluma/E56F.xml new file mode 100644 index 00000000000..66fb1cc4ee0 --- /dev/null +++ b/data/Petaluma/E56F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E583.xml b/data/Petaluma/E583.xml new file mode 100644 index 00000000000..de4c292ead4 --- /dev/null +++ b/data/Petaluma/E583.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E587.xml b/data/Petaluma/E587.xml new file mode 100644 index 00000000000..beab4d31d93 --- /dev/null +++ b/data/Petaluma/E587.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5B0.xml b/data/Petaluma/E5B0.xml new file mode 100644 index 00000000000..b980c536567 --- /dev/null +++ b/data/Petaluma/E5B0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5B1.xml b/data/Petaluma/E5B1.xml new file mode 100644 index 00000000000..ca380f659a9 --- /dev/null +++ b/data/Petaluma/E5B1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5B2.xml b/data/Petaluma/E5B2.xml new file mode 100644 index 00000000000..a2a4e810799 --- /dev/null +++ b/data/Petaluma/E5B2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5B3.xml b/data/Petaluma/E5B3.xml new file mode 100644 index 00000000000..fc5342ec3bf --- /dev/null +++ b/data/Petaluma/E5B3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5B4.xml b/data/Petaluma/E5B4.xml new file mode 100644 index 00000000000..ecde004b234 --- /dev/null +++ b/data/Petaluma/E5B4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5B5.xml b/data/Petaluma/E5B5.xml new file mode 100644 index 00000000000..b3d84dc5454 --- /dev/null +++ b/data/Petaluma/E5B5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5B6.xml b/data/Petaluma/E5B6.xml new file mode 100644 index 00000000000..6330cbdaf78 --- /dev/null +++ b/data/Petaluma/E5B6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5B7.xml b/data/Petaluma/E5B7.xml new file mode 100644 index 00000000000..a5c08ddd14f --- /dev/null +++ b/data/Petaluma/E5B7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5B8.xml b/data/Petaluma/E5B8.xml new file mode 100644 index 00000000000..ee8bbd777a6 --- /dev/null +++ b/data/Petaluma/E5B8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5B9.xml b/data/Petaluma/E5B9.xml new file mode 100644 index 00000000000..538bede4c2b --- /dev/null +++ b/data/Petaluma/E5B9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5BA.xml b/data/Petaluma/E5BA.xml new file mode 100644 index 00000000000..ac4e527b865 --- /dev/null +++ b/data/Petaluma/E5BA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5BB.xml b/data/Petaluma/E5BB.xml new file mode 100644 index 00000000000..30514c3d25f --- /dev/null +++ b/data/Petaluma/E5BB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5BC.xml b/data/Petaluma/E5BC.xml new file mode 100644 index 00000000000..0251abfecf1 --- /dev/null +++ b/data/Petaluma/E5BC.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5BD.xml b/data/Petaluma/E5BD.xml new file mode 100644 index 00000000000..182fd6e06ae --- /dev/null +++ b/data/Petaluma/E5BD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5BE.xml b/data/Petaluma/E5BE.xml new file mode 100644 index 00000000000..59898b6f75a --- /dev/null +++ b/data/Petaluma/E5BE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5BF.xml b/data/Petaluma/E5BF.xml new file mode 100644 index 00000000000..6d22abd4052 --- /dev/null +++ b/data/Petaluma/E5BF.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5C0.xml b/data/Petaluma/E5C0.xml new file mode 100644 index 00000000000..92efc8aec2b --- /dev/null +++ b/data/Petaluma/E5C0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5C1.xml b/data/Petaluma/E5C1.xml new file mode 100644 index 00000000000..958f626fbed --- /dev/null +++ b/data/Petaluma/E5C1.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5C2.xml b/data/Petaluma/E5C2.xml new file mode 100644 index 00000000000..9a6de9afb05 --- /dev/null +++ b/data/Petaluma/E5C2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5C3.xml b/data/Petaluma/E5C3.xml new file mode 100644 index 00000000000..d6ef04e8d95 --- /dev/null +++ b/data/Petaluma/E5C3.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5C4.xml b/data/Petaluma/E5C4.xml new file mode 100644 index 00000000000..8d873b386af --- /dev/null +++ b/data/Petaluma/E5C4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5C5.xml b/data/Petaluma/E5C5.xml new file mode 100644 index 00000000000..7821cb272e2 --- /dev/null +++ b/data/Petaluma/E5C5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5C6.xml b/data/Petaluma/E5C6.xml new file mode 100644 index 00000000000..62538bb6000 --- /dev/null +++ b/data/Petaluma/E5C6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5C7.xml b/data/Petaluma/E5C7.xml new file mode 100644 index 00000000000..1770a0f2bde --- /dev/null +++ b/data/Petaluma/E5C7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5C8.xml b/data/Petaluma/E5C8.xml new file mode 100644 index 00000000000..6b094cdf3ff --- /dev/null +++ b/data/Petaluma/E5C8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5E5.xml b/data/Petaluma/E5E5.xml new file mode 100644 index 00000000000..2331b5ae355 --- /dev/null +++ b/data/Petaluma/E5E5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5E6.xml b/data/Petaluma/E5E6.xml new file mode 100644 index 00000000000..f8fad0ea687 --- /dev/null +++ b/data/Petaluma/E5E6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E5E7.xml b/data/Petaluma/E5E7.xml new file mode 100644 index 00000000000..859977dcadb --- /dev/null +++ b/data/Petaluma/E5E7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E610.xml b/data/Petaluma/E610.xml new file mode 100644 index 00000000000..c27cc13e675 --- /dev/null +++ b/data/Petaluma/E610.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E611.xml b/data/Petaluma/E611.xml new file mode 100644 index 00000000000..22a485aa88c --- /dev/null +++ b/data/Petaluma/E611.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E612.xml b/data/Petaluma/E612.xml new file mode 100644 index 00000000000..9ff444328f5 --- /dev/null +++ b/data/Petaluma/E612.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E613.xml b/data/Petaluma/E613.xml new file mode 100644 index 00000000000..bbe25b81533 --- /dev/null +++ b/data/Petaluma/E613.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E614.xml b/data/Petaluma/E614.xml new file mode 100644 index 00000000000..39894d6a32f --- /dev/null +++ b/data/Petaluma/E614.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E630.xml b/data/Petaluma/E630.xml new file mode 100644 index 00000000000..0bf7f685721 --- /dev/null +++ b/data/Petaluma/E630.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E631.xml b/data/Petaluma/E631.xml new file mode 100644 index 00000000000..2c4cc9cee05 --- /dev/null +++ b/data/Petaluma/E631.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E632.xml b/data/Petaluma/E632.xml new file mode 100644 index 00000000000..eb68d0f9645 --- /dev/null +++ b/data/Petaluma/E632.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E633.xml b/data/Petaluma/E633.xml new file mode 100644 index 00000000000..668fa46876c --- /dev/null +++ b/data/Petaluma/E633.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E638.xml b/data/Petaluma/E638.xml new file mode 100644 index 00000000000..4d8fce5bf0a --- /dev/null +++ b/data/Petaluma/E638.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E645.xml b/data/Petaluma/E645.xml new file mode 100644 index 00000000000..b05084a66c3 --- /dev/null +++ b/data/Petaluma/E645.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E650.xml b/data/Petaluma/E650.xml new file mode 100644 index 00000000000..0abd8c57632 --- /dev/null +++ b/data/Petaluma/E650.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E651.xml b/data/Petaluma/E651.xml new file mode 100644 index 00000000000..e3b0e4ebe44 --- /dev/null +++ b/data/Petaluma/E651.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E655.xml b/data/Petaluma/E655.xml new file mode 100644 index 00000000000..28992272f28 --- /dev/null +++ b/data/Petaluma/E655.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E659.xml b/data/Petaluma/E659.xml new file mode 100644 index 00000000000..9efc3de2d79 --- /dev/null +++ b/data/Petaluma/E659.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E65A.xml b/data/Petaluma/E65A.xml new file mode 100644 index 00000000000..3ffb34d33c4 --- /dev/null +++ b/data/Petaluma/E65A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E880.xml b/data/Petaluma/E880.xml new file mode 100644 index 00000000000..284a01ac5c3 --- /dev/null +++ b/data/Petaluma/E880.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E881.xml b/data/Petaluma/E881.xml new file mode 100644 index 00000000000..9848145dcca --- /dev/null +++ b/data/Petaluma/E881.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E882.xml b/data/Petaluma/E882.xml new file mode 100644 index 00000000000..65e7fb9776d --- /dev/null +++ b/data/Petaluma/E882.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E883.xml b/data/Petaluma/E883.xml new file mode 100644 index 00000000000..2c22e5829d3 --- /dev/null +++ b/data/Petaluma/E883.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E884.xml b/data/Petaluma/E884.xml new file mode 100644 index 00000000000..8770c9b0ede --- /dev/null +++ b/data/Petaluma/E884.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E885.xml b/data/Petaluma/E885.xml new file mode 100644 index 00000000000..5f42d98adee --- /dev/null +++ b/data/Petaluma/E885.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E886.xml b/data/Petaluma/E886.xml new file mode 100644 index 00000000000..ad120251dbc --- /dev/null +++ b/data/Petaluma/E886.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E887.xml b/data/Petaluma/E887.xml new file mode 100644 index 00000000000..f9454203688 --- /dev/null +++ b/data/Petaluma/E887.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E888.xml b/data/Petaluma/E888.xml new file mode 100644 index 00000000000..6132d5ae0cb --- /dev/null +++ b/data/Petaluma/E888.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E889.xml b/data/Petaluma/E889.xml new file mode 100644 index 00000000000..bcea5cf17d4 --- /dev/null +++ b/data/Petaluma/E889.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E88A.xml b/data/Petaluma/E88A.xml new file mode 100644 index 00000000000..b0d9c9541b3 --- /dev/null +++ b/data/Petaluma/E88A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E938.xml b/data/Petaluma/E938.xml new file mode 100644 index 00000000000..b930c986864 --- /dev/null +++ b/data/Petaluma/E938.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E939.xml b/data/Petaluma/E939.xml new file mode 100644 index 00000000000..1423ea61a3c --- /dev/null +++ b/data/Petaluma/E939.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E93C.xml b/data/Petaluma/E93C.xml new file mode 100644 index 00000000000..0a528eb9d30 --- /dev/null +++ b/data/Petaluma/E93C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E93D.xml b/data/Petaluma/E93D.xml new file mode 100644 index 00000000000..4bc3e5c8b33 --- /dev/null +++ b/data/Petaluma/E93D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E93E.xml b/data/Petaluma/E93E.xml new file mode 100644 index 00000000000..4e5fcbe4288 --- /dev/null +++ b/data/Petaluma/E93E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E93F.xml b/data/Petaluma/E93F.xml new file mode 100644 index 00000000000..fd01e3a5f20 --- /dev/null +++ b/data/Petaluma/E93F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E949.xml b/data/Petaluma/E949.xml new file mode 100644 index 00000000000..0ebd82b9e4c --- /dev/null +++ b/data/Petaluma/E949.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E94A.xml b/data/Petaluma/E94A.xml new file mode 100644 index 00000000000..ae1f94a046d --- /dev/null +++ b/data/Petaluma/E94A.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E94B.xml b/data/Petaluma/E94B.xml new file mode 100644 index 00000000000..a880ac235b4 --- /dev/null +++ b/data/Petaluma/E94B.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E94C.xml b/data/Petaluma/E94C.xml new file mode 100644 index 00000000000..7b25e47a03f --- /dev/null +++ b/data/Petaluma/E94C.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/EAA4.xml b/data/Petaluma/EAA4.xml new file mode 100644 index 00000000000..78bab80c589 --- /dev/null +++ b/data/Petaluma/EAA4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/EAA9.xml b/data/Petaluma/EAA9.xml new file mode 100644 index 00000000000..3e8971981c3 --- /dev/null +++ b/data/Petaluma/EAA9.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/EAAA.xml b/data/Petaluma/EAAA.xml new file mode 100644 index 00000000000..f4c376e924f --- /dev/null +++ b/data/Petaluma/EAAA.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/EAAD.xml b/data/Petaluma/EAAD.xml new file mode 100644 index 00000000000..f51ecae2c17 --- /dev/null +++ b/data/Petaluma/EAAD.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/EAAE.xml b/data/Petaluma/EAAE.xml new file mode 100644 index 00000000000..03248967aca --- /dev/null +++ b/data/Petaluma/EAAE.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/EAAF.xml b/data/Petaluma/EAAF.xml new file mode 100644 index 00000000000..849eaf602a0 --- /dev/null +++ b/data/Petaluma/EAAF.xml @@ -0,0 +1 @@ + \ No newline at end of file From 34c307b2a6ba348f22c317c97335d4c5603d23c6 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Wed, 26 Jan 2022 11:52:16 +0100 Subject: [PATCH 144/403] update Leipzig metadata file --- data/Leipzig.xml | 86 +- data/Leipzig/EBA7.xml | 2 +- data/Leipzig/EBA8.xml | 2 +- data/Leipzig/EBA9.xml | 2 +- data/Leipzig/EBAA.xml | 2 +- data/Leipzig/EBAB.xml | 2 +- data/Leipzig/EBAC.xml | 2 +- fonts/Leipzig.svg | 47 +- fonts/json/leipzig_metadata.json | 3003 +++++++++++++++--------------- 9 files changed, 1593 insertions(+), 1555 deletions(-) diff --git a/data/Leipzig.xml b/data/Leipzig.xml index 1e5728b9500..8ba34e638fe 100644 --- a/data/Leipzig.xml +++ b/data/Leipzig.xml @@ -1,6 +1,11 @@ - + + + + + + @@ -17,7 +22,12 @@ - + + + + + + @@ -30,10 +40,24 @@ - - - - + + + + + + + + + + + + + + + + + + @@ -136,7 +160,10 @@ - + + + + @@ -230,12 +257,32 @@ - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -312,7 +359,7 @@ - + @@ -337,9 +384,14 @@ - - - + + + + + + + + diff --git a/data/Leipzig/EBA7.xml b/data/Leipzig/EBA7.xml index dca60ece822..adc90d10478 100644 --- a/data/Leipzig/EBA7.xml +++ b/data/Leipzig/EBA7.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBA8.xml b/data/Leipzig/EBA8.xml index 7c0364f751e..4aefb2cf9a5 100644 --- a/data/Leipzig/EBA8.xml +++ b/data/Leipzig/EBA8.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBA9.xml b/data/Leipzig/EBA9.xml index 5af36b72903..2972dcd3470 100644 --- a/data/Leipzig/EBA9.xml +++ b/data/Leipzig/EBA9.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBAA.xml b/data/Leipzig/EBAA.xml index af409240237..71dc4e24390 100644 --- a/data/Leipzig/EBAA.xml +++ b/data/Leipzig/EBAA.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBAB.xml b/data/Leipzig/EBAB.xml index 9a23398540b..8f8863556b5 100644 --- a/data/Leipzig/EBAB.xml +++ b/data/Leipzig/EBAB.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EBAC.xml b/data/Leipzig/EBAC.xml index 2779ebc5975..0e82da64d0e 100644 --- a/data/Leipzig/EBAC.xml +++ b/data/Leipzig/EBAC.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/fonts/Leipzig.svg b/fonts/Leipzig.svg index abef620cf1d..da7fa78b1ff 100644 --- a/fonts/Leipzig.svg +++ b/fonts/Leipzig.svg @@ -2,8 +2,8 @@ -Created by FontForge 20201107 at Tue Jan 18 14:46:26 2022 - By Laurent Pugin +Created by FontForge 20201107 at Wed Jan 26 11:43:59 2022 + By Klaus Rettinghaus Created by Etienne Darbellay, Jean-Francois Marti, Laurent Pugin, and Klaus Rettinghaus. This font is licensed under the SIL Open Font License \(http://scripts.sil.org/OFL\). Version 5.2.66 @@ -1061,32 +1061,28 @@ c-3.05489 -13.2379 -7.12531 -23.5065 -12.3403 -31.8506c-17.7025 -29.873 -43.5079 c-1.52019 0 -2.55487 0.151846 -3.72446 0.151846c-5.08589 0 -8.99941 4.62292 -8.99941 8.99941c0 2.71308 1.63305 4.92365 3.73597 7.02657c6.08035 6.08035 18.6085 10.9996 27.8514 15.621c29.5237 15.746 49.5195 29.4864 66.9755 53.1033 c17.6711 24.5432 27.4372 52.9492 27.4372 81.2492c0 17.607 -2.75619 26.7594 -10.5653 40.4404c-8.59035 13.2529 -22.1772 26.5602 -40.4353 26.5602c-16.4256 0 -28.7492 -8.46116 -36.4676 -19.6099c-6.82344 -10.7226 -10.533 -19.9402 -10.533 -35.3906 c0 -14.8027 7.45053 -27.4278 16.2003 -36.1777c6.4778 -6.4778 13.0667 -9.82293 21.8002 -9.82293c9.45771 0 21.5864 4 31 4z" /> - + +d="M9 771c0 16 0 24 14 24c71 -6 175 -22 208 -28c85 -16 143 -34 173 -56c-12 -27 -21 -42 -25 -42c-1 0 -1 0 -2 1l-104 34c-67 20 -123 30 -165 30c-13 0 -25 -1 -36 -3c-3 -38 -5 -105 -7 -202c-2 -104 -9 -378 -20 -529l-46 1z" /> +d="M0 0l8 740c0 2 1 12 3 32c0 6 4 9 11 9c3 0 12 -1 27 -3c160 -22 267 -54 321 -95c8 -21 13 -44 13 -68c0 -22 -6 -39 -15 -50c0 0 -27 11 -27 16c3 15 5 28 5 37c0 21 -9 38 -30 50c-24 15 -69 29 -133 44l-117 12l3 -88h12c35 0 90 -13 164 -39c81 -29 129 -54 142 -75 +c3 -6 3 -13 3 -21c0 -12 -10 -66 -13 -66c-10 0 -30 5 -30 14v2c4 12 6 22 6 30c0 14 -5 24 -15 30c-53 24 -194 73 -257 73c-2 0 -6 0 -13 -1c-2 -1 -3 -4 -3 -9c2 -2 2 -8 2 -13v-49c0 -11 2 -20 0 -27c3 0 6 1 9 1c43 0 91 -11 151 -31l99 -34c44 -13 66 -34 66 -72 +c0 -11 -3 -26 -6 -42c-2 -2 -4 -3 -6 -3c-4 0 -23 5 -26 5c1 8 4 23 4 29c0 14 -2 24 -8 27c-12 7 -46 18 -102 35c-68 20 -121 31 -159 31c-11 0 -23 -1 -29 -2c-5 -36 -4 -80 -6 -138c-3 -73 -8 -270 -10 -291h-44z" /> +d="M377 435c-10 0 -30 5 -30 14v2c4 12 6 22 6 30c0 14 -5 24 -15 30c-54 25 -196 73 -261 73c-2 0 -6 0 -13 -1c-2 -1 -5 -63 -9 -187c-5 -142 -8 -371 -11 -396h-44l8 740v36c0 6 3 9 8 9l35 -5l80 -9c94 -13 170 -44 239 -88c8 -21 13 -44 13 -68c0 -22 -6 -39 -15 -50 +c0 0 -27 11 -27 16c3 15 5 28 5 37c0 21 -9 38 -30 50c-24 15 -69 29 -133 44l-117 12l3 -88h12c35 0 90 -13 164 -39c81 -29 129 -54 142 -75c3 -6 3 -13 3 -21c0 -12 -10 -66 -13 -66z" /> +d="M0 0l8 740v13s-1 23 -1 24c0 6 3 9 12 9s31 -3 63 -10l87 -17c73 -14 153 -38 200 -73c9 -21 14 -42 14 -63c0 -19 -6 -35 -15 -46c-5 3 -27 10 -27 16c0 10 4 20 4 27c0 22 -12 38 -34 50c-20 11 -62 20 -128 38l-117 16l1 -82h15c37 0 90 -13 160 -38 +c80 -29 127 -55 139 -76c3 -6 4 -12 4 -19c0 -11 -13 -55 -14 -62c-8 2 -30 9 -30 16c0 13 2 29 5 38c0 8 -2 13 -7 17c-4 4 -13 9 -27 13c-54 24 -162 60 -229 60h-11c-6 0 -8 -1 -8 -7c0 -14 1 -38 1 -50c0 -10 0 -18 -2 -25h10c44 0 98 -11 160 -36l105 -43 +c30 -11 45 -26 45 -51c0 -9 -4 -28 -11 -58h-1c-7 0 -25 9 -29 9c2 10 4 26 5 35c0 8 -2 13 -6 16c-15 9 -48 21 -99 39c-68 23 -120 34 -156 34c-11 0 -19 -1 -24 -2v-87c4 0 9 1 13 1c43 0 93 -10 151 -28l99 -33c44 -16 67 -40 67 -79v-3c0 -10 -4 -44 -9 -45 +c-4 0 -28 9 -31 9c1 8 5 25 5 31c0 14 -2 23 -8 27c-13 8 -47 27 -102 43c-68 20 -121 24 -159 24c-8 0 -17 -1 -27 -3c-1 -21 -9 -129 -11 -166l-6 -144z" /> +d="M0 0l3 826v11c0 12 1 16 13 16c1 0 2 -1 3 -1c70 -8 138 -17 200 -34c66 -18 115 -40 148 -65c7 -18 11 -34 11 -48c0 -19 -5 -35 -15 -47c-5 2 -28 9 -28 16c0 19 6 32 6 36c0 16 -10 28 -31 37c-17 7 -61 18 -131 35l-115 11l-1 -64c4 0 8 1 12 1c36 0 91 -12 164 -36 +c81 -27 128 -52 141 -73c3 -7 4 -14 4 -21c0 -8 -11 -65 -13 -65c-10 0 -30 5 -30 13v3c4 11 6 20 6 29c0 14 -5 25 -15 31c-59 26 -191 73 -260 73c-13 0 -14 1 -14 -8c0 -2 1 -7 2 -14c0 -6 -3 -14 -2 -19c2 -9 2 -18 -1 -29h9c44 0 96 -13 163 -40l117 -50 +c27 -11 40 -25 40 -47c-2 -16 -5 -45 -8 -63c-2 -2 -4 -2 -6 -2c-9 0 -19 12 -26 12v40c-1 6 -3 11 -6 13c-19 11 -54 26 -105 44c-70 26 -124 39 -162 39c-9 0 -16 -1 -21 -2c-1 -7 0 -14 0 -20v-60h10c41 0 90 -10 150 -32l103 -37c45 -12 66 -35 66 -73 +c0 -9 -2 -31 -5 -50c-2 -2 -4 -2 -6 -2c-4 0 -22 11 -27 11c1 9 3 26 3 32c0 14 -3 22 -8 25c-15 9 -52 21 -105 38c-68 22 -119 34 -158 34c-12 0 -20 -1 -24 -2l-1 -67c3 0 5 -7 7 -7c44 0 97 -1 158 -25l101 -40c44 -14 67 -41 67 -79c0 -10 -3 -24 -6 -42 +c-3 -2 -5 -2 -7 -2c-4 0 -22 12 -25 12c1 8 3 16 3 22c0 14 -2 23 -8 26c-15 9 -50 21 -104 39c-71 23 -126 35 -163 35c-7 0 -16 4 -25 2c-1 -105 -2 -281 -4 -297z" /> - @@ -1704,5 +1698,8 @@ d="M-30 125h570v-250h-570v250z" /> d="M0 -240v480c0 8 2 10 10 10h30c8 0 10 -2 10 -10v-115h450v-250h-450v-115c0 -8 -2 -10 -10 -10h-30c-8 0 -10 2 -10 10z" /> + diff --git a/fonts/json/leipzig_metadata.json b/fonts/json/leipzig_metadata.json index 584cd388cff..358b3ff0a93 100644 --- a/fonts/json/leipzig_metadata.json +++ b/fonts/json/leipzig_metadata.json @@ -1,5 +1,4 @@ { - "_comment": "Automatically generated Metadata for the Leipzig font. Most (but not all) of these metadata come from the SMuFL specifications.", "engravingDefaults": { "arrowShaftThickness": 0.16, "barlineSeparation": 0.4, @@ -31,7 +30,7 @@ "tupletBracketThickness": 0.16 }, "fontName": "Leipzig", - "fontVersion": "5.2.64", + "fontVersion": "5.2.66", "glyphBBoxes": { "4stringTabClef": { "bBoxNE": [ @@ -113,6 +112,36 @@ -1.356 ] }, + "accidentalDoubleFlat": { + "bBoxNE": [ + 1.552, + 1.876 + ], + "bBoxSW": [ + 0.0, + -0.7 + ] + }, + "accidentalDoubleSharp": { + "bBoxNE": [ + 1.028, + 0.48 + ], + "bBoxSW": [ + 0.0, + -0.48 + ] + }, + "accidentalFlat": { + "bBoxNE": [ + 0.792, + 1.876 + ], + "bBoxSW": [ + 0.0, + -0.7 + ] + }, "accidentalKomaFlat": { "bBoxNE": [ 0.792, @@ -153,6 +182,16 @@ -1.356 ] }, + "accidentalNatural": { + "bBoxNE": [ + 0.628, + 1.404 + ], + "bBoxSW": [ + 0.0, + -1.404 + ] + }, "accidentalNaturalFlat": { "bBoxNE": [ 1.512, @@ -193,6 +232,26 @@ -1.0 ] }, + "accidentalQuarterToneFlatArrowUp": { + "bBoxNE": [ + 0.88, + 2.408 + ], + "bBoxSW": [ + -0.172, + -0.736 + ] + }, + "accidentalQuarterToneFlatNaturalArrowDown": { + "bBoxNE": [ + 0.884, + 1.508 + ], + "bBoxSW": [ + 0.0, + -1.94 + ] + }, "accidentalQuarterToneFlatStein": { "bBoxNE": [ 0.792, @@ -203,6 +262,26 @@ -0.7 ] }, + "accidentalQuarterToneSharpArrowDown": { + "bBoxNE": [ + 0.788, + 1.528 + ], + "bBoxSW": [ + -0.1, + -1.892 + ] + }, + "accidentalQuarterToneSharpNaturalArrowUp": { + "bBoxNE": [ + 0.708, + 1.94 + ], + "bBoxSW": [ + -0.184, + -1.508 + ] + }, "accidentalQuarterToneSharpStein": { "bBoxNE": [ 0.424, @@ -213,6 +292,16 @@ -1.356 ] }, + "accidentalSharp": { + "bBoxNE": [ + 0.788, + 1.42 + ], + "bBoxSW": [ + 0.0, + -1.356 + ] + }, "accidentalSharpSharp": { "bBoxNE": [ 1.648, @@ -223,6 +312,16 @@ -1.356 ] }, + "accidentalThreeQuarterTonesFlatArrowDown": { + "bBoxNE": [ + 0.88, + 1.976 + ], + "bBoxSW": [ + -0.184, + -1.416 + ] + }, "accidentalThreeQuarterTonesFlatZimmermann": { "bBoxNE": [ 1.664, @@ -233,6 +332,16 @@ -0.7 ] }, + "accidentalThreeQuarterTonesSharpArrowUp": { + "bBoxNE": [ + 0.788, + 1.844 + ], + "bBoxSW": [ + -0.096, + -1.456 + ] + }, "accidentalThreeQuarterTonesSharpStein": { "bBoxNE": [ 1.212, @@ -263,6 +372,16 @@ -1.356 ] }, + "articAccentAbove": { + "bBoxNE": [ + 1.388, + 0.944 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "articAccentBelow": { "bBoxNE": [ 1.388, @@ -273,6 +392,16 @@ -0.944 ] }, + "articAccentStaccatoAbove": { + "bBoxNE": [ + 1.388, + 1.384 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "articAccentStaccatoBelow": { "bBoxNE": [ 1.388, @@ -303,6 +432,16 @@ -0.384 ] }, + "articMarcatoAbove": { + "bBoxNE": [ + 1.092, + 1.06 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "articMarcatoBelow": { "bBoxNE": [ 1.096, @@ -313,6 +452,16 @@ -1.06 ] }, + "articMarcatoStaccatoAbove": { + "bBoxNE": [ + 1.092, + 1.5 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "articMarcatoStaccatoBelow": { "bBoxNE": [ 1.096, @@ -363,6 +512,16 @@ -0.944 ] }, + "articStaccatissimoAbove": { + "bBoxNE": [ + 0.4422, + 0.976 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "articStaccatissimoBelow": { "bBoxNE": [ 0.4422, @@ -413,6 +572,16 @@ -0.896 ] }, + "articStaccatoAbove": { + "bBoxNE": [ + 0.38, + 0.376 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "articStaccatoBelow": { "bBoxNE": [ 0.38, @@ -443,6 +612,16 @@ -0.7781 ] }, + "articTenutoAbove": { + "bBoxNE": [ + 1.384, + 0.144 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "articTenutoAccentAbove": { "bBoxNE": [ 1.388, @@ -473,6 +652,16 @@ -0.144 ] }, + "articTenutoStaccatoAbove": { + "bBoxNE": [ + 1.388, + 0.692 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "articTenutoStaccatoBelow": { "bBoxNE": [ 1.388, @@ -503,6 +692,26 @@ -0.668 ] }, + "barlineDouble": { + "bBoxNE": [ + 0.704, + 4.0 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, + "barlineFinal": { + "bBoxNE": [ + 1.052, + 4.0 + ], + "bBoxSW": [ + 0.004, + 0.0 + ] + }, "barlineHeavy": { "bBoxNE": [ 0.5, @@ -523,6 +732,36 @@ 0.0 ] }, + "barlineReverseFinal": { + "bBoxNE": [ + 1.052, + 4.0 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, + "barlineShort": { + "bBoxNE": [ + 0.152, + 4.0 + ], + "bBoxSW": [ + 0.0, + 2.0 + ] + }, + "barlineSingle": { + "bBoxNE": [ + 0.152, + 4.0 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "barlineTick": { "bBoxNE": [ 0.152, @@ -533,6 +772,16 @@ 3.0 ] }, + "brace": { + "bBoxNE": [ + 0.3709, + 3.9954 + ], + "bBoxSW": [ + 0.0004, + 0.0046 + ] + }, "bracketBottom": { "bBoxNE": [ 1.596, @@ -583,6 +832,16 @@ 0.0 ] }, + "breathMarkComma": { + "bBoxNE": [ + 0.72, + 1.2 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "buzzRoll": { "bBoxNE": [ 0.624, @@ -593,6 +852,16 @@ -0.464 ] }, + "cClef": { + "bBoxNE": [ + 2.424, + 2.008 + ], + "bBoxSW": [ + 0.0, + -2.008 + ] + }, "cClef8vb": { "bBoxNE": [ 2.424, @@ -633,6 +902,16 @@ -2.008 ] }, + "chantCclef": { + "bBoxNE": [ + 0.724, + 0.808 + ], + "bBoxSW": [ + -0.004, + -0.808 + ] + }, "chantCustosStemDownPosHigh": { "bBoxNE": [ 0.256, @@ -693,11 +972,21 @@ -0.384 ] }, - "clef15": { + "chantFclef": { "bBoxNE": [ - 0.92, - 0.652 - ], + 0.724, + 0.808 + ], + "bBoxSW": [ + -0.756, + -1.072 + ] + }, + "clef15": { + "bBoxNE": [ + 0.92, + 0.652 + ], "bBoxSW": [ 0.0, -0.008 @@ -713,6 +1002,16 @@ 0.0 ] }, + "coda": { + "bBoxNE": [ + 2.148, + 2.32 + ], + "bBoxSW": [ + 0.0, + -0.292 + ] + }, "codaSquare": { "bBoxNE": [ 2.148, @@ -723,6 +1022,26 @@ -0.292 ] }, + "daCapo": { + "bBoxNE": [ + 3.74, + 1.624 + ], + "bBoxSW": [ + 0.0, + -0.088 + ] + }, + "dalSegno": { + "bBoxNE": [ + 3.44, + 1.616 + ], + "bBoxSW": [ + 0.0, + -0.056 + ] + }, "dynamicFF": { "bBoxNE": [ 2.22, @@ -773,6 +1092,16 @@ -0.892 ] }, + "dynamicForte": { + "bBoxNE": [ + 1.22, + 1.768 + ], + "bBoxSW": [ + -0.572, + -0.892 + ] + }, "dynamicFortePiano": { "bBoxNE": [ 2.26, @@ -813,6 +1142,16 @@ -0.668 ] }, + "dynamicMezzo": { + "bBoxNE": [ + 1.712, + 1.048 + ], + "bBoxSW": [ + -0.176, + -0.072 + ] + }, "dynamicNiente": { "bBoxNE": [ 1.252, @@ -883,6 +1222,26 @@ -0.668 ] }, + "dynamicPiano": { + "bBoxNE": [ + 1.332, + 1.052 + ], + "bBoxSW": [ + -0.196, + -0.668 + ] + }, + "dynamicRinforzando": { + "bBoxNE": [ + 0.9, + 1.036 + ], + "bBoxSW": [ + -0.08, + 0.0 + ] + }, "dynamicRinforzando1": { "bBoxNE": [ 2.12, @@ -903,6 +1262,16 @@ -0.892 ] }, + "dynamicSforzando": { + "bBoxNE": [ + 0.776, + 1.08 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "dynamicSforzando1": { "bBoxNE": [ 1.996, @@ -963,6 +1332,26 @@ -0.892 ] }, + "dynamicZ": { + "bBoxNE": [ + 1.04, + 0.996 + ], + "bBoxSW": [ + -0.144, + -0.064 + ] + }, + "fClef": { + "bBoxNE": [ + 2.792, + 1.004 + ], + "bBoxSW": [ + 0.016, + -2.324 + ] + }, "fClef15ma": { "bBoxNE": [ 2.792, @@ -983,6 +1372,26 @@ -3.02 ] }, + "fClef8va": { + "bBoxNE": [ + 2.792, + 1.868 + ], + "bBoxSW": [ + 0.016, + -2.324 + ] + }, + "fClef8vb": { + "bBoxNE": [ + 2.792, + 1.004 + ], + "bBoxSW": [ + 0.016, + -3.0 + ] + }, "fClefChange": { "bBoxNE": [ 1.848, @@ -1013,6 +1422,26 @@ -2.324 ] }, + "fermataAbove": { + "bBoxNE": [ + 2.42, + 1.28 + ], + "bBoxSW": [ + 0.0, + -0.012 + ] + }, + "fermataBelow": { + "bBoxNE": [ + 2.42, + 0.012 + ], + "bBoxSW": [ + 0.0, + -1.28 + ] + }, "fermataLongAbove": { "bBoxNE": [ 3.156, @@ -1263,6 +1692,16 @@ -2.28 ] }, + "flag128thUp": { + "bBoxNE": [ + 1.104, + 2.28 + ], + "bBoxSW": [ + 0.0, + -3.116 + ] + }, "flag16thDown": { "bBoxNE": [ 1.104, @@ -1273,6 +1712,16 @@ 0.0 ] }, + "flag16thUp": { + "bBoxNE": [ + 1.104, + 0.0 + ], + "bBoxSW": [ + 0.0, + -3.116 + ] + }, "flag256thDown": { "bBoxNE": [ 1.104, @@ -1303,6 +1752,16 @@ -0.76 ] }, + "flag32ndUp": { + "bBoxNE": [ + 1.104, + 0.76 + ], + "bBoxSW": [ + 0.0, + -3.116 + ] + }, "flag512thDown": { "bBoxNE": [ 1.108, @@ -1333,6 +1792,16 @@ -1.52 ] }, + "flag64thUp": { + "bBoxNE": [ + 1.104, + 1.52 + ], + "bBoxSW": [ + 0.0, + -3.116 + ] + }, "flag8thDown": { "bBoxNE": [ 1.104, @@ -1343,6 +1812,26 @@ 0.0 ] }, + "flag8thUp": { + "bBoxNE": [ + 1.104, + 0.0 + ], + "bBoxSW": [ + 0.0, + -2.776 + ] + }, + "gClef": { + "bBoxNE": [ + 2.584, + 4.332 + ], + "bBoxSW": [ + -0.004, + -2.62 + ] + }, "gClef15ma": { "bBoxNE": [ 2.6, @@ -1363,6 +1852,26 @@ -3.572 ] }, + "gClef8va": { + "bBoxNE": [ + 2.584, + 5.268 + ], + "bBoxSW": [ + -0.004, + -2.62 + ] + }, + "gClef8vb": { + "bBoxNE": [ + 2.584, + 4.332 + ], + "bBoxSW": [ + -0.004, + -3.56 + ] + }, "gClef8vbCClef": { "bBoxNE": [ 3.052, @@ -1433,6 +1942,16 @@ 0.0 ] }, + "keyboardPedalPed": { + "bBoxNE": [ + 2.78, + 2.056 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "keyboardPedalS": { "bBoxNE": [ 1.512, @@ -1453,6 +1972,16 @@ -0.056 ] }, + "keyboardPedalUp": { + "bBoxNE": [ + 1.724, + 1.672 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "leftRepeatSmall": { "bBoxNE": [ 1.86, @@ -1466,291 +1995,301 @@ "luteDuration16th": { "bBoxNE": [ 1.568, - 2.544 + 3.144 ], "bBoxSW": [ - -0.0, - 0.0 + 0.0, + -0.004 ] }, "luteDuration32nd": { "bBoxNE": [ 1.544, - 2.812 + 3.412 ], "bBoxSW": [ - 0.004, + 0.0, -0.004 ] }, "luteDuration8th": { "bBoxNE": [ 1.568, - 2.524 + 3.124 ], "bBoxSW": [ - -0.0, - -0.0 + 0.0, + 0.0 + ] + }, + "luteDurationDoubleWhole": { + "bBoxNE": [ + 0.368, + 3.164 + ], + "bBoxSW": [ + -0.328, + 0.0 ] }, "luteDurationHalf": { "bBoxNE": [ 1.616, - 2.58 + 3.18 ], "bBoxSW": [ - -0.0, - -0.004 + -0.004, + 0.0 ] }, "luteDurationQuarter": { "bBoxNE": [ 1.56, - 2.54 + 3.14 ], "bBoxSW": [ - -0.0, - -0.0 + 0.0, + 0.0 ] }, "luteDurationWhole": { "bBoxNE": [ 0.352, - 2.564 + 3.164 ], "bBoxSW": [ - -0.328, - -0.0 + 0.0, + 0.0 ] }, "luteFrenchFretA": { "bBoxNE": [ - 1.34, - 0.924 + 1.116, + 0.8112 ], "bBoxSW": [ - -0.0, - -0.04 + -0.0024, + 0.0 ] }, "luteFrenchFretB": { "bBoxNE": [ - 0.944, - 1.5 + 0.9064, + 1.2528 ], "bBoxSW": [ - -0.144, - -0.016 + -0.004, + -0.0 ] }, "luteFrenchFretC": { "bBoxNE": [ - 0.892, - 1.116 + 1.0088, + 0.936 ], "bBoxSW": [ - -0.316, - 0.0 + 0.0024, + 0.0032 ] }, "luteFrenchFretD": { "bBoxNE": [ - 1.028, - 1.48 + 1.6536, + 1.2256 ], "bBoxSW": [ - -0.988, - -0.0 + 0.0008, + 0.0016 ] }, "luteFrenchFretE": { "bBoxNE": [ - 0.888, - 1.332 + 0.7504, + 1.1056 ], "bBoxSW": [ - -0.0, + 0.0, 0.0 ] }, "luteFrenchFretF": { "bBoxNE": [ - 1.016, - 1.416 + 0.847, + 1.42 ], "bBoxSW": [ - 0.0, - -0.388 + -0.0, + 0.0 ] }, "luteFrenchFretG": { "bBoxNE": [ - 1.192, - 0.768 + 1.284, + 1.2776 ], "bBoxSW": [ - -0.364, - -0.78 + -0.0008, + -0.0009 ] }, "luteFrenchFretH": { "bBoxNE": [ - 0.996, - 1.408 + 1.156, + 1.312 ], "bBoxSW": [ - -0.4, - -0.184 + 0.0, + -0.0 ] }, "luteFrenchFretI": { "bBoxNE": [ - 0.492, - 1.272 + 0.608, + 1.068 ], "bBoxSW": [ - -0.216, - -0.012 + 0.004, + 0.0 ] }, "luteFrenchFretK": { "bBoxNE": [ - 0.748, - 1.764 + 0.644, + 1.42 ], "bBoxSW": [ - -0.004, - -0.008 + 0.0, + 0.0 ] }, "luteFrenchFretL": { "bBoxNE": [ - 0.788, - 1.692 + 0.932, + 1.392 ], "bBoxSW": [ - -0.324, + 0.004, -0.0 ] }, "luteFrenchFretM": { "bBoxNE": [ - 2.156, - 1.088 + 2.196, + 0.9128 ], "bBoxSW": [ - -0.544, - -0.008 + -0.004, + -0.004 ] }, "luteFrenchFretN": { "bBoxNE": [ - 1.224, - 1.004 + 1.3656, + 0.8424 ], "bBoxSW": [ - -0.432, - 0.0 + 0.0008, + -0.0008 ] }, "luteItalianFret0": { "bBoxNE": [ - 0.88, - 0.984 + 0.892, + 0.996 ], "bBoxSW": [ - -0.0, - -0.0 + -0.012, + -0.012 ] }, "luteItalianFret1": { "bBoxNE": [ - 0.6, - 0.984 + 0.612, + 0.996 ], "bBoxSW": [ - 0.004, - -0.004 + -0.0084, + -0.016 ] }, "luteItalianFret2": { "bBoxNE": [ - 0.664, - 0.984 + 0.676, + 0.996 ], "bBoxSW": [ - -0.0038, - 0.0 + -0.0156, + -0.012 ] }, "luteItalianFret3": { "bBoxNE": [ - 0.664, - 0.984 + 0.676, + 0.996 ], "bBoxSW": [ - 0.0, - 0.0 + -0.012, + -0.012 ] }, "luteItalianFret4": { "bBoxNE": [ - 0.792, - 0.984 + 0.804, + 0.996 ], "bBoxSW": [ - -0.004, - 0.0 + -0.016, + -0.0121 ] }, "luteItalianFret5": { "bBoxNE": [ - 0.596, - 1.004 + 0.608, + 1.016 ], "bBoxSW": [ - -0.0, - -0.0 + -0.012, + -0.012 ] }, "luteItalianFret6": { "bBoxNE": [ - 0.704, - 0.984 + 0.716, + 0.996 ], "bBoxSW": [ - 0.0, - -0.0 + -0.012, + -0.012 ] }, "luteItalianFret7": { "bBoxNE": [ - 0.648, - 0.984 + 0.66, + 0.996 ], "bBoxSW": [ - 0.0, - 0.0 + -0.0121, + -0.012 ] }, "luteItalianFret8": { "bBoxNE": [ - 0.752, - 0.984 + 0.764, + 0.996 ], "bBoxSW": [ - -0.0, - 0.0 + -0.012, + -0.012 ] }, "luteItalianFret9": { "bBoxNE": [ - 0.716, - 0.984 + 0.728, + 0.996 ], "bBoxSW": [ - -0.0, - -0.0006 + -0.012, + -0.0126 ] }, "medRenFlatHardB": { @@ -1763,6 +2302,16 @@ -0.56 ] }, + "medRenFlatSoftB": { + "bBoxNE": [ + 0.868, + 1.652 + ], + "bBoxSW": [ + 0.0, + -0.56 + ] + }, "medRenNatural": { "bBoxNE": [ 0.408, @@ -1773,6 +2322,16 @@ -1.016 ] }, + "medRenSharpCroix": { + "bBoxNE": [ + 1.168, + 0.4963 + ], + "bBoxSW": [ + 0.0, + -0.4963 + ] + }, "mensuralCclefPetrucciPosHigh": { "bBoxNE": [ 0.8263, @@ -1943,6 +2502,26 @@ -0.768 ] }, + "mensuralNoteheadSemibrevisBlack": { + "bBoxNE": [ + 1.248, + 0.776 + ], + "bBoxSW": [ + 0.0, + -0.768 + ] + }, + "mensuralNoteheadSemibrevisVoid": { + "bBoxNE": [ + 1.248, + 0.776 + ], + "bBoxSW": [ + 0.0, + -0.768 + ] + }, "mensuralNoteheadSemiminimaWhite": { "bBoxNE": [ 1.248, @@ -1953,6 +2532,26 @@ -0.768 ] }, + "mensuralProlation1": { + "bBoxNE": [ + 1.92, + 0.96 + ], + "bBoxSW": [ + 0.0, + -0.96 + ] + }, + "mensuralProlation10": { + "bBoxNE": [ + 1.92, + 1.632 + ], + "bBoxSW": [ + 0.12, + -1.632 + ] + }, "mensuralProlation11": { "bBoxNE": [ 1.92, @@ -1963,6 +2562,26 @@ -0.96 ] }, + "mensuralProlation2": { + "bBoxNE": [ + 1.92, + 0.96 + ], + "bBoxSW": [ + 0.0, + -0.96 + ] + }, + "mensuralProlation3": { + "bBoxNE": [ + 1.92, + 1.632 + ], + "bBoxSW": [ + 0.0, + -1.632 + ] + }, "mensuralProlation4": { "bBoxNE": [ 1.92, @@ -1973,6 +2592,36 @@ -1.632 ] }, + "mensuralProlation5": { + "bBoxNE": [ + 1.8, + 0.96 + ], + "bBoxSW": [ + 0.0, + -0.96 + ] + }, + "mensuralProlation6": { + "bBoxNE": [ + 1.8, + 0.96 + ], + "bBoxSW": [ + 0.0, + -0.96 + ] + }, + "mensuralProlation7": { + "bBoxNE": [ + 1.92, + 0.96 + ], + "bBoxSW": [ + 0.12, + -0.96 + ] + }, "mensuralProlation8": { "bBoxNE": [ 1.8, @@ -1983,6 +2632,16 @@ -1.632 ] }, + "mensuralProlation9": { + "bBoxNE": [ + 1.8, + 1.632 + ], + "bBoxSW": [ + 0.0, + -1.632 + ] + }, "mensuralProlationCombiningDot": { "bBoxNE": [ 0.504, @@ -2093,6 +2752,16 @@ -1.064 ] }, + "mensuralRestBrevis": { + "bBoxNE": [ + 0.16, + 1.0 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "mensuralRestFusa": { "bBoxNE": [ 0.472, @@ -2103,44 +2772,104 @@ 0.0 ] }, - "mensuralRestMaxima": { + "mensuralRestLongaImperfecta": { "bBoxNE": [ - 0.52, - 2.0 + 0.16, + 1.0 ], "bBoxSW": [ 0.0, - -2.0 + -1.0 ] }, - "mensuralRestSemifusa": { + "mensuralRestLongaPerfecta": { "bBoxNE": [ - 0.472, - 0.56 + 0.16, + 2.0 ], "bBoxSW": [ 0.0, - 0.0 + -2.0 ] }, - "noteheadDiamondBlack": { + "mensuralRestMaxima": { "bBoxNE": [ - 1.256, - 0.64 + 0.52, + 2.0 ], "bBoxSW": [ 0.0, - -0.64 + -2.0 ] }, - "noteheadDiamondBlackWide": { + "mensuralRestMinima": { "bBoxNE": [ - 1.4, - 0.5 + 0.16, + 0.56 ], "bBoxSW": [ 0.0, - -0.5 + 0.0 + ] + }, + "mensuralRestSemibrevis": { + "bBoxNE": [ + 0.16, + 1.0 + ], + "bBoxSW": [ + 0.0, + 0.44 + ] + }, + "mensuralRestSemifusa": { + "bBoxNE": [ + 0.472, + 0.56 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, + "mensuralRestSemiminima": { + "bBoxNE": [ + 0.472, + 0.56 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, + "noteheadBlack": { + "bBoxNE": [ + 1.256, + 0.532 + ], + "bBoxSW": [ + 0.0, + -0.532 + ] + }, + "noteheadDiamondBlack": { + "bBoxNE": [ + 1.256, + 0.64 + ], + "bBoxSW": [ + 0.0, + -0.64 + ] + }, + "noteheadDiamondBlackWide": { + "bBoxNE": [ + 1.4, + 0.5 + ], + "bBoxSW": [ + 0.0, + -0.5 ] }, "noteheadDiamondHalf": { @@ -2203,6 +2932,16 @@ -0.68 ] }, + "noteheadHalf": { + "bBoxNE": [ + 1.256, + 0.552 + ], + "bBoxSW": [ + 0.0, + -0.528 + ] + }, "noteheadHalfWithX": { "bBoxNE": [ 1.256, @@ -2233,6 +2972,26 @@ -0.96 ] }, + "noteheadPlusBlack": { + "bBoxNE": [ + 1.064, + 0.532 + ], + "bBoxSW": [ + -0.004, + -0.532 + ] + }, + "noteheadSlashHorizontalEnds": { + "bBoxNE": [ + 1.84, + 1.0 + ], + "bBoxSW": [ + 0.0, + -1.0 + ] + }, "noteheadSlashWhiteHalf": { "bBoxNE": [ 2.94, @@ -2303,6 +3062,16 @@ -0.532 ] }, + "noteheadXBlack": { + "bBoxNE": [ + 1.16, + 0.5 + ], + "bBoxSW": [ + 0.0, + -0.5 + ] + }, "octaveParensLeft": { "bBoxNE": [ 0.46, @@ -2333,6 +3102,16 @@ -0.428 ] }, + "ornamentLeftVerticalStroke": { + "bBoxNE": [ + 0.12, + 1.6 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "ornamentMordent": { "bBoxNE": [ 2.344, @@ -2623,6 +3402,56 @@ -0.004 ] }, + "ornamentTrill": { + "bBoxNE": [ + 1.728, + 1.456 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, + "ornamentTurn": { + "bBoxNE": [ + 1.872, + 0.976 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, + "ornamentTurnInverted": { + "bBoxNE": [ + 1.872, + 0.976 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, + "ornamentTurnSlash": { + "bBoxNE": [ + 1.872, + 1.276 + ], + "bBoxSW": [ + 0.0, + -0.324 + ] + }, + "ornamentTurnUp": { + "bBoxNE": [ + 0.976, + 1.872 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "ornamentTurnUpS": { "bBoxNE": [ 0.976, @@ -2643,6 +3472,26 @@ 0.0 ] }, + "ornamentZigZagLineNoRightEnd": { + "bBoxNE": [ + 1.224, + 0.768 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, + "ornamentZigZagLineWithRightEnd": { + "bBoxNE": [ + 1.5, + 0.768 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "ottava": { "bBoxNE": [ 1.064, @@ -2653,6 +3502,26 @@ 0.004 ] }, + "ottavaAlta": { + "bBoxNE": [ + 2.628, + 1.4 + ], + "bBoxSW": [ + 0.0, + 0.004 + ] + }, + "ottavaBassa": { + "bBoxNE": [ + 2.6, + 1.328 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "ottavaBassaBa": { "bBoxNE": [ 2.496, @@ -2683,6 +3552,16 @@ 0.0 ] }, + "pluckedDamp": { + "bBoxNE": [ + 1.32, + 1.32 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "pluckedLeftHandPizzicato": { "bBoxNE": [ 1.32, @@ -2703,6 +3582,16 @@ 0.0 ] }, + "pluckedSnapPizzicatoBelow": { + "bBoxNE": [ + 0.824, + 1.064 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "quindicesima": { "bBoxNE": [ 1.704, @@ -2713,6 +3602,26 @@ -0.032 ] }, + "quindicesimaAlta": { + "bBoxNE": [ + 3.704, + 1.308 + ], + "bBoxSW": [ + 0.012, + -0.032 + ] + }, + "quindicesimaBassa": { + "bBoxNE": [ + 3.664, + 1.284 + ], + "bBoxSW": [ + 0.012, + -0.032 + ] + }, "quindicesimaBassaMb": { "bBoxNE": [ 3.536, @@ -2723,6 +3632,26 @@ -0.032 ] }, + "repeat1Bar": { + "bBoxNE": [ + 2.032, + 0.968 + ], + "bBoxSW": [ + 0.0, + -0.968 + ] + }, + "repeat2Bars": { + "bBoxNE": [ + 3.0, + 0.968 + ], + "bBoxSW": [ + 0.0, + -0.968 + ] + }, "repeat4Bars": { "bBoxNE": [ 4.936, @@ -2773,36 +3702,96 @@ -0.2 ] }, - "repeatRightLeft": { + "repeatDots": { "bBoxNE": [ - 3.124, - 4.0 + 0.4, + 2.7 ], "bBoxSW": [ 0.0, - 0.0 + 1.3 ] }, - "rest1024th": { + "repeatLeft": { "bBoxNE": [ - 3.176, - 4.576 + 1.812, + 4.0 ], "bBoxSW": [ - -0.004, - -3.82 + 0.0, + 0.0 ] }, - "rest256th": { + "repeatRight": { "bBoxNE": [ - 2.564, - 2.708 + 1.812, + 4.0 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, + "repeatRightLeft": { + "bBoxNE": [ + 3.124, + 4.0 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, + "rest1024th": { + "bBoxNE": [ + 3.176, + 4.576 + ], + "bBoxSW": [ + -0.004, + -3.82 + ] + }, + "rest128th": { + "bBoxNE": [ + 2.316, + 2.708 + ], + "bBoxSW": [ + 0.028, + -2.936 + ] + }, + "rest16th": { + "bBoxNE": [ + 1.3, + 0.696 + ], + "bBoxSW": [ + 0.004, + -1.968 + ] + }, + "rest256th": { + "bBoxNE": [ + 2.564, + 2.708 ], "bBoxSW": [ -0.004, -3.82 ] }, + "rest32nd": { + "bBoxNE": [ + 1.596, + 1.652 + ], + "bBoxSW": [ + 0.004, + -1.94 + ] + }, "rest512th": { "bBoxNE": [ 2.88, @@ -2813,6 +3802,36 @@ -3.82 ] }, + "rest64th": { + "bBoxNE": [ + 1.92, + 1.652 + ], + "bBoxSW": [ + 0.008, + -2.872 + ] + }, + "rest8th": { + "bBoxNE": [ + 1.104, + 0.732 + ], + "bBoxSW": [ + 0.0, + -1.0 + ] + }, + "restDoubleWhole": { + "bBoxNE": [ + 0.5, + 1.0 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "restDoubleWholeLegerLine": { "bBoxNE": [ 1.044, @@ -2823,6 +3842,16 @@ -0.064 ] }, + "restHBar": { + "bBoxNE": [ + 3.0, + 1.0 + ], + "bBoxSW": [ + 0.0, + -1.0 + ] + }, "restHBarLeft": { "bBoxNE": [ 2.0, @@ -2853,6 +3882,16 @@ -1.0 ] }, + "restHalf": { + "bBoxNE": [ + 1.2, + 0.5 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "restHalfLegerLine": { "bBoxNE": [ 1.744, @@ -2883,6 +3922,16 @@ -1.0 ] }, + "restQuarter": { + "bBoxNE": [ + 1.22, + 1.488 + ], + "bBoxSW": [ + -0.0, + -1.552 + ] + }, "restQuarterOld": { "bBoxNE": [ 1.104, @@ -2903,6 +3952,16 @@ -1.04 ] }, + "restWhole": { + "bBoxNE": [ + 1.2, + 0.0 + ], + "bBoxSW": [ + 0.0, + -0.5 + ] + }, "restWholeLegerLine": { "bBoxNE": [ 1.744, @@ -2923,6 +3982,16 @@ 0.5 ] }, + "segno": { + "bBoxNE": [ + 1.644, + 2.052 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "segnoSerpent2": { "bBoxNE": [ 1.8, @@ -2933,6 +4002,16 @@ -0.136 ] }, + "stringsDownBow": { + "bBoxNE": [ + 1.24, + 0.96 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "stringsDownBowTurned": { "bBoxNE": [ 1.24, @@ -2943,6 +4022,26 @@ 0.0 ] }, + "stringsHarmonic": { + "bBoxNE": [ + 0.824, + 0.824 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, + "stringsUpBow": { + "bBoxNE": [ + 1.132, + 1.352 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "stringsUpBowTurned": { "bBoxNE": [ 1.132, @@ -3053,6 +4152,26 @@ -1.0 ] }, + "timeSigCommon": { + "bBoxNE": [ + 1.656, + 1.004 + ], + "bBoxSW": [ + 0.0, + -0.996 + ] + }, + "timeSigCutCommon": { + "bBoxNE": [ + 1.668, + 1.272 + ], + "bBoxSW": [ + 0.0, + -1.276 + ] + }, "timeSigEquals": { "bBoxNE": [ 1.368, @@ -3153,6 +4272,36 @@ -0.504 ] }, + "tremolo1": { + "bBoxNE": [ + 0.652, + 0.5 + ], + "bBoxSW": [ + -0.652, + -0.496 + ] + }, + "tremolo2": { + "bBoxNE": [ + 0.652, + 0.772 + ], + "bBoxSW": [ + -0.652, + -0.772 + ] + }, + "tremolo3": { + "bBoxNE": [ + 0.648, + 1.032 + ], + "bBoxSW": [ + -0.648, + -1.032 + ] + }, "tremolo4": { "bBoxNE": [ 0.648, @@ -3283,1237 +4432,77 @@ 0.2 ] }, - "uniE000": { + "unpitchedPercussionClef1": { "bBoxNE": [ - 0.3709, - 3.9954 + 1.3, + 1.0 ], "bBoxSW": [ - 0.0004, - 0.0046 + 0.0, + -1.0 ] }, - "uniE030": { + "unpitchedPercussionClef2": { "bBoxNE": [ - 0.152, - 4.0 + 1.028, + 1.58 ], "bBoxSW": [ 0.0, - 0.0 + -1.584 ] }, - "uniE031": { + "ventiduesima": { "bBoxNE": [ - 0.704, - 4.0 + 2.016, + 1.244 ], "bBoxSW": [ 0.0, - 0.0 + -0.06 ] }, - "uniE032": { + "ventiduesimaAlta": { "bBoxNE": [ - 1.052, - 4.0 + 4.084, + 1.268 ], "bBoxSW": [ - 0.004, - 0.0 + 0.0, + -0.06 ] }, - "uniE033": { + "ventiduesimaBassa": { "bBoxNE": [ - 1.052, - 4.0 + 3.964, + 1.244 ], "bBoxSW": [ 0.0, - 0.0 + -0.06 ] }, - "uniE038": { + "ventiduesimaBassaMb": { "bBoxNE": [ - 0.152, - 4.0 + 3.836, + 1.244 ], "bBoxSW": [ 0.0, - 2.0 + -0.06 ] }, - "uniE040": { + "vocalSprechgesang": { "bBoxNE": [ - 1.812, - 4.0 + 0.6, + 1.2 ], "bBoxSW": [ - 0.0, + -0.6, 0.0 ] }, - "uniE041": { - "bBoxNE": [ - 1.812, - 4.0 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE043": { - "bBoxNE": [ - 0.4, - 2.7 - ], - "bBoxSW": [ - 0.0, - 1.3 - ] - }, - "uniE045": { - "bBoxNE": [ - 3.44, - 1.616 - ], - "bBoxSW": [ - 0.0, - -0.056 - ] - }, - "uniE046": { - "bBoxNE": [ - 3.74, - 1.624 - ], - "bBoxSW": [ - 0.0, - -0.088 - ] - }, - "uniE047": { - "bBoxNE": [ - 1.644, - 2.052 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE048": { - "bBoxNE": [ - 2.148, - 2.32 - ], - "bBoxSW": [ - 0.0, - -0.292 - ] - }, - "uniE050": { - "bBoxNE": [ - 2.584, - 4.332 - ], - "bBoxSW": [ - -0.004, - -2.62 - ] - }, - "uniE052": { - "bBoxNE": [ - 2.584, - 4.332 - ], - "bBoxSW": [ - -0.004, - -3.56 - ] - }, - "uniE053": { - "bBoxNE": [ - 2.584, - 5.268 - ], - "bBoxSW": [ - -0.004, - -2.62 - ] - }, - "uniE05C": { - "bBoxNE": [ - 2.424, - 2.008 - ], - "bBoxSW": [ - 0.0, - -2.008 - ] - }, - "uniE062": { - "bBoxNE": [ - 2.792, - 1.004 - ], - "bBoxSW": [ - 0.016, - -2.324 - ] - }, - "uniE064": { - "bBoxNE": [ - 2.792, - 1.004 - ], - "bBoxSW": [ - 0.016, - -3.0 - ] - }, - "uniE065": { - "bBoxNE": [ - 2.792, - 1.868 - ], - "bBoxSW": [ - 0.016, - -2.324 - ] - }, - "uniE069": { - "bBoxNE": [ - 1.3, - 1.0 - ], - "bBoxSW": [ - 0.0, - -1.0 - ] - }, - "uniE06A": { - "bBoxNE": [ - 1.028, - 1.58 - ], - "bBoxSW": [ - 0.0, - -1.584 - ] - }, - "uniE08A": { - "bBoxNE": [ - 1.656, - 1.004 - ], - "bBoxSW": [ - 0.0, - -0.996 - ] - }, - "uniE08B": { - "bBoxNE": [ - 1.668, - 1.272 - ], - "bBoxSW": [ - 0.0, - -1.276 - ] - }, - "uniE0A3": { - "bBoxNE": [ - 1.256, - 0.552 - ], - "bBoxSW": [ - 0.0, - -0.528 - ] - }, - "uniE0A4": { - "bBoxNE": [ - 1.256, - 0.532 - ], - "bBoxSW": [ - 0.0, - -0.532 - ] - }, - "uniE0A5": { - "bBoxNE": [ - 0.0, - 0.0 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE0A9": { - "bBoxNE": [ - 1.16, - 0.5 - ], - "bBoxSW": [ - 0.0, - -0.5 - ] - }, - "uniE0AF": { - "bBoxNE": [ - 1.064, - 0.532 - ], - "bBoxSW": [ - -0.004, - -0.532 - ] - }, - "uniE101": { - "bBoxNE": [ - 1.84, - 1.0 - ], - "bBoxSW": [ - 0.0, - -1.0 - ] - }, - "uniE220": { - "bBoxNE": [ - 0.652, - 0.5 - ], - "bBoxSW": [ - -0.652, - -0.496 - ] - }, - "uniE221": { - "bBoxNE": [ - 0.652, - 0.772 - ], - "bBoxSW": [ - -0.652, - -0.772 - ] - }, - "uniE222": { - "bBoxNE": [ - 0.648, - 1.032 - ], - "bBoxSW": [ - -0.648, - -1.032 - ] - }, - "uniE240": { - "bBoxNE": [ - 1.104, - 0.0 - ], - "bBoxSW": [ - 0.0, - -2.776 - ] - }, - "uniE242": { - "bBoxNE": [ - 1.104, - 0.0 - ], - "bBoxSW": [ - 0.0, - -3.116 - ] - }, - "uniE244": { - "bBoxNE": [ - 1.104, - 0.76 - ], - "bBoxSW": [ - 0.0, - -3.116 - ] - }, - "uniE246": { - "bBoxNE": [ - 1.104, - 1.52 - ], - "bBoxSW": [ - 0.0, - -3.116 - ] - }, - "uniE248": { - "bBoxNE": [ - 1.104, - 2.28 - ], - "bBoxSW": [ - 0.0, - -3.116 - ] - }, - "uniE260": { - "bBoxNE": [ - 0.792, - 1.876 - ], - "bBoxSW": [ - 0.0, - -0.7 - ] - }, - "uniE261": { - "bBoxNE": [ - 0.628, - 1.404 - ], - "bBoxSW": [ - 0.0, - -1.404 - ] - }, - "uniE262": { - "bBoxNE": [ - 0.788, - 1.42 - ], - "bBoxSW": [ - 0.0, - -1.356 - ] - }, - "uniE263": { - "bBoxNE": [ - 1.028, - 0.48 - ], - "bBoxSW": [ - 0.0, - -0.48 - ] - }, - "uniE264": { - "bBoxNE": [ - 1.552, - 1.876 - ], - "bBoxSW": [ - 0.0, - -0.7 - ] - }, - "uniE270": { - "bBoxNE": [ - 0.88, - 2.408 - ], - "bBoxSW": [ - -0.172, - -0.736 - ] - }, - "uniE271": { - "bBoxNE": [ - 0.88, - 1.976 - ], - "bBoxSW": [ - -0.184, - -1.416 - ] - }, - "uniE272": { - "bBoxNE": [ - 0.708, - 1.94 - ], - "bBoxSW": [ - -0.184, - -1.508 - ] - }, - "uniE273": { - "bBoxNE": [ - 0.884, - 1.508 - ], - "bBoxSW": [ - 0.0, - -1.94 - ] - }, - "uniE274": { - "bBoxNE": [ - 0.788, - 1.844 - ], - "bBoxSW": [ - -0.096, - -1.456 - ] - }, - "uniE275": { - "bBoxNE": [ - 0.788, - 1.528 - ], - "bBoxSW": [ - -0.1, - -1.892 - ] - }, - "uniE4A0": { - "bBoxNE": [ - 1.388, - 0.944 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE4A2": { - "bBoxNE": [ - 0.38, - 0.376 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE4A4": { - "bBoxNE": [ - 1.384, - 0.144 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE4A6": { - "bBoxNE": [ - 0.4422, - 0.976 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE4AC": { - "bBoxNE": [ - 1.092, - 1.06 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE4AE": { - "bBoxNE": [ - 1.092, - 1.5 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE4B0": { - "bBoxNE": [ - 1.388, - 1.384 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE4B2": { - "bBoxNE": [ - 1.388, - 0.692 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE4C0": { - "bBoxNE": [ - 2.42, - 1.28 - ], - "bBoxSW": [ - 0.0, - -0.012 - ] - }, - "uniE4C1": { - "bBoxNE": [ - 2.42, - 0.012 - ], - "bBoxSW": [ - 0.0, - -1.28 - ] - }, - "uniE4CE": { - "bBoxNE": [ - 0.72, - 1.2 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE4E2": { - "bBoxNE": [ - 0.5, - 1.0 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE4E3": { - "bBoxNE": [ - 1.2, - 0.0 - ], - "bBoxSW": [ - 0.0, - -0.5 - ] - }, - "uniE4E4": { - "bBoxNE": [ - 1.2, - 0.5 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE4E5": { - "bBoxNE": [ - 1.22, - 1.488 - ], - "bBoxSW": [ - -0.0, - -1.552 - ] - }, - "uniE4E6": { - "bBoxNE": [ - 1.104, - 0.732 - ], - "bBoxSW": [ - 0.0, - -1.0 - ] - }, - "uniE4E7": { - "bBoxNE": [ - 1.3, - 0.696 - ], - "bBoxSW": [ - 0.004, - -1.968 - ] - }, - "uniE4E8": { - "bBoxNE": [ - 1.596, - 1.652 - ], - "bBoxSW": [ - 0.004, - -1.94 - ] - }, - "uniE4E9": { - "bBoxNE": [ - 1.92, - 1.652 - ], - "bBoxSW": [ - 0.008, - -2.872 - ] - }, - "uniE4EA": { - "bBoxNE": [ - 2.316, - 2.708 - ], - "bBoxSW": [ - 0.028, - -2.936 - ] - }, - "uniE4EE": { - "bBoxNE": [ - 3.0, - 1.0 - ], - "bBoxSW": [ - 0.0, - -1.0 - ] - }, - "uniE500": { - "bBoxNE": [ - 2.032, - 0.968 - ], - "bBoxSW": [ - 0.0, - -0.968 - ] - }, - "uniE501": { - "bBoxNE": [ - 3.0, - 0.968 - ], - "bBoxSW": [ - 0.0, - -0.968 - ] - }, - "uniE511": { - "bBoxNE": [ - 2.628, - 1.4 - ], - "bBoxSW": [ - 0.0, - 0.004 - ] - }, - "uniE512": { - "bBoxNE": [ - 2.6, - 1.328 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE515": { - "bBoxNE": [ - 3.704, - 1.308 - ], - "bBoxSW": [ - 0.012, - -0.032 - ] - }, - "uniE516": { - "bBoxNE": [ - 3.664, - 1.284 - ], - "bBoxSW": [ - 0.012, - -0.032 - ] - }, - "uniE520": { - "bBoxNE": [ - 1.332, - 1.052 - ], - "bBoxSW": [ - -0.196, - -0.668 - ] - }, - "uniE521": { - "bBoxNE": [ - 1.712, - 1.048 - ], - "bBoxSW": [ - -0.176, - -0.072 - ] - }, - "uniE522": { - "bBoxNE": [ - 1.22, - 1.768 - ], - "bBoxSW": [ - -0.572, - -0.892 - ] - }, - "uniE523": { - "bBoxNE": [ - 0.9, - 1.036 - ], - "bBoxSW": [ - -0.08, - 0.0 - ] - }, - "uniE524": { - "bBoxNE": [ - 0.776, - 1.08 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE525": { - "bBoxNE": [ - 1.04, - 0.996 - ], - "bBoxSW": [ - -0.144, - -0.064 - ] - }, - "uniE566": { - "bBoxNE": [ - 1.728, - 1.456 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE567": { - "bBoxNE": [ - 1.872, - 0.976 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE568": { - "bBoxNE": [ - 1.872, - 0.976 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE569": { - "bBoxNE": [ - 1.872, - 1.276 - ], - "bBoxSW": [ - 0.0, - -0.324 - ] - }, - "uniE56A": { - "bBoxNE": [ - 0.976, - 1.872 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE594": { - "bBoxNE": [ - 0.12, - 1.6 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE59D": { - "bBoxNE": [ - 1.224, - 0.768 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE59E": { - "bBoxNE": [ - 1.5, - 0.768 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE610": { - "bBoxNE": [ - 1.24, - 0.96 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE612": { - "bBoxNE": [ - 1.132, - 1.352 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE614": { - "bBoxNE": [ - 0.824, - 0.824 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE630": { - "bBoxNE": [ - 0.824, - 1.064 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE638": { - "bBoxNE": [ - 1.32, - 1.32 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE650": { - "bBoxNE": [ - 2.78, - 2.056 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE655": { - "bBoxNE": [ - 1.724, - 1.672 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE902": { - "bBoxNE": [ - 0.724, - 0.808 - ], - "bBoxSW": [ - -0.756, - -1.072 - ] - }, - "uniE906": { - "bBoxNE": [ - 0.724, - 0.808 - ], - "bBoxSW": [ - -0.004, - -0.808 - ] - }, - "uniE910": { - "bBoxNE": [ - 1.92, - 0.96 - ], - "bBoxSW": [ - 0.0, - -0.96 - ] - }, - "uniE911": { - "bBoxNE": [ - 1.92, - 0.96 - ], - "bBoxSW": [ - 0.0, - -0.96 - ] - }, - "uniE912": { - "bBoxNE": [ - 1.92, - 1.632 - ], - "bBoxSW": [ - 0.0, - -1.632 - ] - }, - "uniE914": { - "bBoxNE": [ - 1.8, - 0.96 - ], - "bBoxSW": [ - 0.0, - -0.96 - ] - }, - "uniE915": { - "bBoxNE": [ - 1.8, - 0.96 - ], - "bBoxSW": [ - 0.0, - -0.96 - ] - }, - "uniE916": { - "bBoxNE": [ - 1.92, - 0.96 - ], - "bBoxSW": [ - 0.12, - -0.96 - ] - }, - "uniE918": { - "bBoxNE": [ - 1.8, - 1.632 - ], - "bBoxSW": [ - 0.0, - -1.632 - ] - }, - "uniE919": { - "bBoxNE": [ - 1.92, - 1.632 - ], - "bBoxSW": [ - 0.12, - -1.632 - ] - }, - "uniE938": { - "bBoxNE": [ - 1.248, - 0.776 - ], - "bBoxSW": [ - 0.0, - -0.768 - ] - }, - "uniE939": { - "bBoxNE": [ - 1.248, - 0.776 - ], - "bBoxSW": [ - 0.0, - -0.768 - ] - }, - "uniE9E0": { - "bBoxNE": [ - 0.868, - 1.652 - ], - "bBoxSW": [ - 0.0, - -0.56 - ] - }, - "uniE9E3": { - "bBoxNE": [ - 1.168, - 0.4963 - ], - "bBoxSW": [ - 0.0, - -0.4963 - ] - }, - "uniE9F1": { - "bBoxNE": [ - 0.16, - 2.0 - ], - "bBoxSW": [ - 0.0, - -2.0 - ] - }, - "uniE9F2": { - "bBoxNE": [ - 0.16, - 1.0 - ], - "bBoxSW": [ - 0.0, - -1.0 - ] - }, - "uniE9F3": { - "bBoxNE": [ - 0.16, - 1.0 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE9F4": { - "bBoxNE": [ - 0.16, - 1.0 - ], - "bBoxSW": [ - 0.0, - 0.44 - ] - }, - "uniE9F5": { - "bBoxNE": [ - 0.16, - 0.56 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE9F6": { - "bBoxNE": [ - 0.472, - 0.56 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "uniE9F9": { - "bBoxNE": [ - 0.0, - 0.0 - ], - "bBoxSW": [ - 0.0, - 0.0 - ] - }, - "ventiduesima": { - "bBoxNE": [ - 2.016, - 1.244 - ], - "bBoxSW": [ - 0.0, - -0.06 - ] - }, - "ventiduesimaAlta": { - "bBoxNE": [ - 4.084, - 1.268 - ], - "bBoxSW": [ - 0.0, - -0.06 - ] - }, - "ventiduesimaBassa": { - "bBoxNE": [ - 3.964, - 1.244 - ], - "bBoxSW": [ - 0.0, - -0.06 - ] - }, - "ventiduesimaBassaMb": { - "bBoxNE": [ - 3.836, - 1.244 - ], - "bBoxSW": [ - 0.0, - -0.06 - ] - }, - "vocalSprechgesang": { - "bBoxNE": [ - 0.6, - 1.2 - ], - "bBoxSW": [ - -0.6, - 0.0 - ] - }, - "wiggleArpeggiatoDown": { + "wiggleArpeggiatoDown": { "bBoxNE": [ 0.8174, 0.448 @@ -4631,6 +4620,26 @@ -0.82 ] }, + "accidentalDoubleFlat": { + "cutOutNE": [ + 0.856, + 0.56 + ], + "cutOutSE": [ + 1.232, + -0.3 + ] + }, + "accidentalFlat": { + "cutOutNE": [ + 0.096, + 0.564 + ], + "cutOutSE": [ + 0.432, + -0.344 + ] + }, "accidentalKomaFlat": { "cutOutNW": [ 0.7, @@ -4687,6 +4696,16 @@ -0.812 ] }, + "accidentalNatural": { + "cutOutNE": [ + 0.08, + 0.736 + ], + "cutOutSW": [ + 0.548, + -0.76 + ] + }, "accidentalNaturalFlat": { "cutOutNE": [ 0.816, @@ -4715,14 +4734,58 @@ -0.772 ] }, + "accidentalQuarterToneFlatArrowUp": { + "cutOutNE": [ + 0.564, + 0.572 + ], + "cutOutSE": [ + 0.504, + -0.364 + ] + }, + "accidentalQuarterToneFlatNaturalArrowDown": { + "cutOutNE": [ + 0.08, + 0.772 + ], + "cutOutSW": [ + 0.268, + -0.828 + ] + }, "accidentalQuarterToneFlatStein": { "cutOutNW": [ 0.7, 0.584 ], "cutOutSW": [ - 0.368, - -0.332 + 0.368, + -0.332 + ] + }, + "accidentalQuarterToneSharpArrowDown": { + "cutOutNE": [ + 0.624, + 0.864 + ], + "cutOutNW": [ + 0.16, + 0.696 + ], + "cutOutSE": [ + 0.62, + -0.684 + ] + }, + "accidentalQuarterToneSharpNaturalArrowUp": { + "cutOutNE": [ + 0.468, + 0.784 + ], + "cutOutSW": [ + 0.632, + -0.828 ] }, "accidentalQuarterToneSharpStein": { @@ -4743,6 +4806,24 @@ -0.812 ] }, + "accidentalSharp": { + "cutOutNE": [ + 0.624, + 0.844 + ], + "cutOutNW": [ + 0.16, + 0.644 + ], + "cutOutSE": [ + 0.624, + -0.64 + ], + "cutOutSW": [ + 0.16, + -0.82 + ] + }, "accidentalSharpSharp": { "cutOutNE": [ 1.48, @@ -4761,6 +4842,16 @@ -0.82 ] }, + "accidentalThreeQuarterTonesFlatArrowDown": { + "cutOutNE": [ + 0.188, + 0.58 + ], + "cutOutSE": [ + 0.588, + -0.272 + ] + }, "accidentalThreeQuarterTonesFlatZimmermann": { "cutOutNE": [ 0.972, @@ -4779,6 +4870,20 @@ -0.32 ] }, + "accidentalThreeQuarterTonesSharpArrowUp": { + "cutOutNE": [ + 0.62, + 0.88 + ], + "cutOutSE": [ + 0.624, + -0.688 + ], + "cutOutSW": [ + 0.164, + -0.872 + ] + }, "accidentalThreeQuarterTonesSharpStein": { "cutOutNE": [ 1.052, @@ -4825,6 +4930,24 @@ -0.5 ] }, + "noteheadBlack": { + "cutOutNW": [ + 0.144, + 0.24 + ], + "cutOutSE": [ + 1.088, + -0.244 + ], + "stemDownNW": [ + -0.0, + -0.156 + ], + "stemUpSE": [ + 1.256, + 0.156 + ] + }, "noteheadDiamondBlack": { "stemDownNW": [ 0.0, @@ -4885,6 +5008,24 @@ -0.0 ] }, + "noteheadHalf": { + "cutOutNW": [ + 0.14, + 0.24 + ], + "cutOutSE": [ + 1.076, + -0.24 + ], + "stemDownNW": [ + 0.0, + -0.144 + ], + "stemUpSE": [ + 1.256, + 0.164 + ] + }, "noteheadHalfWithX": { "cutOutNW": [ 0.14, @@ -4903,6 +5044,26 @@ 0.164 ] }, + "noteheadPlusBlack": { + "stemDownNW": [ + 0.0, + 0.0 + ], + "stemUpSE": [ + 1.064, + 0.0 + ] + }, + "noteheadSlashHorizontalEnds": { + "stemDownNW": [ + 0.0, + -1.0 + ], + "stemUpSE": [ + 1.84, + 1.0 + ] + }, "noteheadSlashWhiteHalf": { "stemDownNW": [ 0.0, @@ -4989,43 +5150,7 @@ 0.0 ] }, - "uniE0A3": { - "cutOutNW": [ - 0.14, - 0.24 - ], - "cutOutSE": [ - 1.076, - -0.24 - ], - "stemDownNW": [ - 0.0, - -0.144 - ], - "stemUpSE": [ - 1.256, - 0.164 - ] - }, - "uniE0A4": { - "cutOutNW": [ - 0.144, - 0.24 - ], - "cutOutSE": [ - 1.088, - -0.244 - ], - "stemDownNW": [ - -0.0, - -0.156 - ], - "stemUpSE": [ - 1.256, - 0.156 - ] - }, - "uniE0A9": { + "noteheadXBlack": { "stemDownNW": [ 0.0, -0.44 @@ -5034,142 +5159,6 @@ 1.16, 0.444 ] - }, - "uniE0AF": { - "stemDownNW": [ - 0.0, - 0.0 - ], - "stemUpSE": [ - 1.064, - 0.0 - ] - }, - "uniE101": { - "stemDownNW": [ - 0.0, - -1.0 - ], - "stemUpSE": [ - 1.84, - 1.0 - ] - }, - "uniE260": { - "cutOutNE": [ - 0.096, - 0.564 - ], - "cutOutSE": [ - 0.432, - -0.344 - ] - }, - "uniE261": { - "cutOutNE": [ - 0.08, - 0.736 - ], - "cutOutSW": [ - 0.548, - -0.76 - ] - }, - "uniE262": { - "cutOutNE": [ - 0.624, - 0.844 - ], - "cutOutNW": [ - 0.16, - 0.644 - ], - "cutOutSE": [ - 0.624, - -0.64 - ], - "cutOutSW": [ - 0.16, - -0.82 - ] - }, - "uniE264": { - "cutOutNE": [ - 0.856, - 0.56 - ], - "cutOutSE": [ - 1.232, - -0.3 - ] - }, - "uniE270": { - "cutOutNE": [ - 0.564, - 0.572 - ], - "cutOutSE": [ - 0.504, - -0.364 - ] - }, - "uniE271": { - "cutOutNE": [ - 0.188, - 0.58 - ], - "cutOutSE": [ - 0.588, - -0.272 - ] - }, - "uniE272": { - "cutOutNE": [ - 0.468, - 0.784 - ], - "cutOutSW": [ - 0.632, - -0.828 - ] - }, - "uniE273": { - "cutOutNE": [ - 0.08, - 0.772 - ], - "cutOutSW": [ - 0.268, - -0.828 - ] - }, - "uniE274": { - "cutOutNE": [ - 0.62, - 0.88 - ], - "cutOutSE": [ - 0.624, - -0.688 - ], - "cutOutSW": [ - 0.164, - -0.872 - ] - }, - "uniE275": { - "cutOutNE": [ - 0.624, - 0.864 - ], - "cutOutNW": [ - 0.16, - 0.696 - ], - "cutOutSE": [ - 0.62, - -0.684 - ] } } } \ No newline at end of file From 0d14795a6befd821a013f47f699bd7ade05807fe Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Wed, 26 Jan 2022 12:49:44 +0100 Subject: [PATCH 145/403] use double --- src/iomei.cpp | 2 +- src/options.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/iomei.cpp b/src/iomei.cpp index f0d770ab87b..ecc2dcfad61 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -3662,7 +3662,7 @@ bool MEIInput::ReadPage(Object *parent, pugi::xml_node page) page.remove_attribute("surface"); } if (page.attribute("ppu")) { - vrvPage->m_PPUFactor = page.attribute("ppu").as_float(); + vrvPage->m_PPUFactor = page.attribute("ppu").as_double(); } parent->AddChild(vrvPage); diff --git a/src/options.cpp b/src/options.cpp index 5fb3ad9042e..caa33e8fec9 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -240,7 +240,7 @@ void OptionDbl::Init(double defaultValue, double minValue, double maxValue) bool OptionDbl::SetValue(const std::string &value) { - return SetValue(std::stof(value)); + return SetValue(std::stod(value)); } std::string OptionDbl::GetStrValue() const From 18c70f22868f88f04523f57f78883f32263dde7d Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Wed, 26 Jan 2022 13:46:27 +0100 Subject: [PATCH 146/403] change to float --- src/vrv.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vrv.cpp b/src/vrv.cpp index ec97b2f6aad..78e1e1b4322 100644 --- a/src/vrv.cpp +++ b/src/vrv.cpp @@ -229,7 +229,7 @@ bool Resources::LoadFont(const std::string &fontName) smuflCode, unitsPerEm); continue; } - double x = 0.0, y = 0.0, width = 0.0, height = 0.0; + float x = 0.0, y = 0.0, width = 0.0, height = 0.0; // Not check for missing values... if (current.attribute("x")) x = current.attribute("x").as_float(); if (current.attribute("y")) y = current.attribute("y").as_float(); @@ -285,7 +285,7 @@ bool Resources::InitTextFont(const std::string &fontName, const StyleAttributes // We create a glyph with only the units per em which is the only info we need for // the bounding boxes; path and codeStr will remain [unset] Glyph glyph(unitsPerEm); - double x = 0.0, y = 0.0, width = 0.0, height = 0.0; + float x = 0.0, y = 0.0, width = 0.0, height = 0.0; // Not check for missing values... if (current.attribute("x")) x = current.attribute("x").as_float(); if (current.attribute("y")) y = current.attribute("y").as_float(); From 026f23f271245123b6d73bc83b46a4a9d8829b8e Mon Sep 17 00:00:00 2001 From: David Bauer Date: Wed, 26 Jan 2022 18:15:06 +0100 Subject: [PATCH 147/403] Refine calculation of end points for slurs starting at a single grace note --- src/slur.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/slur.cpp b/src/slur.cpp index 5aca94d57ce..3c0f40611c4 100644 --- a/src/slur.cpp +++ b/src/slur.cpp @@ -1025,13 +1025,11 @@ std::pair Slur::AdjustCoordinates( x2 += 2 * doc->GetDrawingStemWidth(staff->m_drawingStaffSize); } } - else if ((end->GetContentTop() >= start->GetContentTop()) - && (end->GetContentBottom() <= start->GetContentTop())) { - y2 = end->GetDrawingY() + unit * 3; - } else { - y2 = end->GetDrawingTop(doc, staff->m_drawingStaffSize); - x2 += endRadius - doc->GetDrawingStemWidth(staff->m_drawingStaffSize); + const int yMin = y1 - unit * 4; + const int yTop = end->GetDrawingTop(doc, staff->m_drawingStaffSize); + y2 = std::max(end->GetDrawingY() + unit * 2, yMin); + y2 = std::min(yTop - unit, y2); } } // portato slurs @@ -1084,7 +1082,15 @@ std::pair Slur::AdjustCoordinates( } } else { - x2 -= endRadius + 2 * doc->GetDrawingStemWidth(staff->m_drawingStaffSize); + const int yMax = y1 + unit; + const int yBottom = end->GetDrawingBottom(doc, staff->m_drawingStaffSize); + y2 = std::min(end->GetDrawingY(), yMax); + if (y2 < yBottom + unit) { + y2 = yBottom + unit; + } + else { + x2 -= endRadius + 2 * doc->GetDrawingStemWidth(staff->m_drawingStaffSize); + } } } // portato slurs From c73047decf67b181f7d7e50ca7b64b82694da857 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 27 Jan 2022 11:46:28 +0100 Subject: [PATCH 148/403] Remove unused params --- include/vrv/functorparams.h | 11 ++++------- src/measure.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 307c0111b8e..bb3be7025e6 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -988,9 +988,10 @@ class CalcDotsParams : public FunctorParams { //---------------------------------------------------------------------------- /** - * member 0: std::vector: a stack of maximum duration filled by the functor - * member 1: double: the duration of the current measure - * member 2: the current bpm + * member 0: the current score time + * member 1: the current time in seconds + * member 2: the current tempo + * member 3: the tempo adjustment **/ class CalcMaxMeasureDurationParams : public FunctorParams { @@ -999,15 +1000,11 @@ class CalcMaxMeasureDurationParams : public FunctorParams { { m_currentScoreTime = 0.0; m_currentRealTimeSeconds = 0.0; - m_maxCurrentScoreTime = 0.0; - m_maxCurrentRealTimeSeconds = 0.0; m_currentTempo = 120.0; m_tempoAdjustment = 1.0; } double m_currentScoreTime; double m_currentRealTimeSeconds; - double m_maxCurrentScoreTime; - double m_maxCurrentRealTimeSeconds; double m_currentTempo; double m_tempoAdjustment; }; diff --git a/src/measure.cpp b/src/measure.cpp index a18ffca3372..e2dcbd37277 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -1562,8 +1562,8 @@ int Measure::CalcMaxMeasureDuration(FunctorParams *functorParams) assert(params); m_scoreTimeOffset.clear(); - m_scoreTimeOffset.push_back(params->m_maxCurrentScoreTime); - params->m_maxCurrentScoreTime += m_measureAligner.GetRightAlignment()->GetTime() * DURATION_4 / DUR_MAX; + m_scoreTimeOffset.push_back(params->m_currentScoreTime); + params->m_currentScoreTime += m_measureAligner.GetRightAlignment()->GetTime() * DURATION_4 / DUR_MAX; // search for tempo marks in the measure Tempo *tempo = dynamic_cast(this->FindDescendantByType(TEMPO)); @@ -1585,8 +1585,8 @@ int Measure::CalcMaxMeasureDuration(FunctorParams *functorParams) m_realTimeOffsetMilliseconds.clear(); // m_realTimeOffsetMilliseconds.push_back(int(params->m_maxCurrentRealTimeSeconds * 1000.0 + 0.5)); - m_realTimeOffsetMilliseconds.push_back(params->m_maxCurrentRealTimeSeconds * 1000.0); - params->m_maxCurrentRealTimeSeconds + m_realTimeOffsetMilliseconds.push_back(params->m_currentRealTimeSeconds * 1000.0); + params->m_currentRealTimeSeconds += (m_measureAligner.GetRightAlignment()->GetTime() * DURATION_4 / DUR_MAX) * 60.0 / m_currentTempo; return FUNCTOR_CONTINUE; From c55223e94cddc08b9be7ab44961b4c5a5241eb6f Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 27 Jan 2022 13:25:43 +0100 Subject: [PATCH 149/403] Include multi rest factor --- include/vrv/functorparams.h | 3 +++ include/vrv/layerelement.h | 5 +++++ include/vrv/measure.h | 3 +++ include/vrv/object.h | 3 ++- src/doc.cpp | 3 ++- src/layerelement.cpp | 14 ++++++++++++++ src/measure.cpp | 17 ++++++++++++++--- 7 files changed, 43 insertions(+), 5 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index bb3be7025e6..35998d0e533 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -992,6 +992,7 @@ class CalcDotsParams : public FunctorParams { * member 1: the current time in seconds * member 2: the current tempo * member 3: the tempo adjustment + * member 4: factor for multibar rests **/ class CalcMaxMeasureDurationParams : public FunctorParams { @@ -1002,11 +1003,13 @@ class CalcMaxMeasureDurationParams : public FunctorParams { m_currentRealTimeSeconds = 0.0; m_currentTempo = 120.0; m_tempoAdjustment = 1.0; + m_multiRestFactor = 1; } double m_currentScoreTime; double m_currentRealTimeSeconds; double m_currentTempo; double m_tempoAdjustment; + int m_multiRestFactor; }; //---------------------------------------------------------------------------- diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index 94a8cc5ea7f..36bf469b38e 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -391,6 +391,11 @@ class LayerElement : public Object, */ int GenerateTimemap(FunctorParams *functorParams) override; + /** + * See Object::CalcMaxMeasureDuration + */ + int CalcMaxMeasureDuration(FunctorParams *functorParams) override; + /** * See Object::ResetDrawing */ diff --git a/include/vrv/measure.h b/include/vrv/measure.h index ab17c80da87..d1ae1e067ef 100644 --- a/include/vrv/measure.h +++ b/include/vrv/measure.h @@ -458,7 +458,10 @@ class Measure : public Object, /** * See Object::CalcMaxMeasureDuration */ + ///@{ int CalcMaxMeasureDuration(FunctorParams *functorParams) override; + int CalcMaxMeasureDurationEnd(FunctorParams *functorParams) override; + ///@} /** * See Object::CalcOnsetOffset diff --git a/include/vrv/object.h b/include/vrv/object.h index e6a03d3aaae..e1526da1a21 100644 --- a/include/vrv/object.h +++ b/include/vrv/object.h @@ -1289,8 +1289,9 @@ class Object : public BoundingBox { /** * Calculate the maximum duration of each measure. */ + ///@{ virtual int CalcMaxMeasureDuration(FunctorParams *) { return FUNCTOR_CONTINUE; } - + virtual int CalcMaxMeasureDurationEnd(FunctorParams *) { return FUNCTOR_CONTINUE; } ///@} /** diff --git a/src/doc.cpp b/src/doc.cpp index f266071b504..7ff5ed17d43 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -274,7 +274,8 @@ void Doc::CalculateMidiTimemap() calcMaxMeasureDurationParams.m_currentTempo = tempo; calcMaxMeasureDurationParams.m_tempoAdjustment = m_options->m_midiTempoAdjustment.GetValue(); Functor calcMaxMeasureDuration(&Object::CalcMaxMeasureDuration); - this->Process(&calcMaxMeasureDuration, &calcMaxMeasureDurationParams); + Functor calcMaxMeasureDurationEnd(&Object::CalcMaxMeasureDurationEnd); + this->Process(&calcMaxMeasureDuration, &calcMaxMeasureDurationParams, &calcMaxMeasureDurationEnd); // Then calculate the onset and offset times (w.r.t. the measure) for every note CalcOnsetOffsetParams calcOnsetOffsetParams; diff --git a/src/layerelement.cpp b/src/layerelement.cpp index e1fdc978a16..e11b050a2b3 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -2514,6 +2514,20 @@ int LayerElement::GenerateTimemap(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int LayerElement::CalcMaxMeasureDuration(FunctorParams *functorParams) +{ + CalcMaxMeasureDurationParams *params = vrv_params_cast(functorParams); + assert(params); + + if (this->Is(MULTIREST)) { + MultiRest *multiRest = vrv_cast(this); + assert(multiRest); + params->m_multiRestFactor = multiRest->GetNum(); + } + + return FUNCTOR_SIBLINGS; +} + int LayerElement::ResetDrawing(FunctorParams *functorParams) { m_drawingCueSize = false; diff --git a/src/measure.cpp b/src/measure.cpp index e2dcbd37277..1d2e0142faf 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -1563,7 +1563,6 @@ int Measure::CalcMaxMeasureDuration(FunctorParams *functorParams) m_scoreTimeOffset.clear(); m_scoreTimeOffset.push_back(params->m_currentScoreTime); - params->m_currentScoreTime += m_measureAligner.GetRightAlignment()->GetTime() * DURATION_4 / DUR_MAX; // search for tempo marks in the measure Tempo *tempo = dynamic_cast(this->FindDescendantByType(TEMPO)); @@ -1586,8 +1585,20 @@ int Measure::CalcMaxMeasureDuration(FunctorParams *functorParams) m_realTimeOffsetMilliseconds.clear(); // m_realTimeOffsetMilliseconds.push_back(int(params->m_maxCurrentRealTimeSeconds * 1000.0 + 0.5)); m_realTimeOffsetMilliseconds.push_back(params->m_currentRealTimeSeconds * 1000.0); - params->m_currentRealTimeSeconds - += (m_measureAligner.GetRightAlignment()->GetTime() * DURATION_4 / DUR_MAX) * 60.0 / m_currentTempo; + + return FUNCTOR_CONTINUE; +} + +int Measure::CalcMaxMeasureDurationEnd(FunctorParams *functorParams) +{ + CalcMaxMeasureDurationParams *params = vrv_params_cast(functorParams); + assert(params); + + const double scoreTimeIncrement + = m_measureAligner.GetRightAlignment()->GetTime() * params->m_multiRestFactor * DURATION_4 / DUR_MAX; + params->m_currentScoreTime += scoreTimeIncrement; + params->m_currentRealTimeSeconds += scoreTimeIncrement * 60.0 / m_currentTempo; + params->m_multiRestFactor = 1; return FUNCTOR_CONTINUE; } From 41206fddaf26468ee0dea1991d5bf7779382482d Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Thu, 27 Jan 2022 13:57:03 +0100 Subject: [PATCH 150/403] Add StemSameasDrawingRole member to note --- include/vrv/note.h | 13 +++++++-- include/vrv/vrvdef.h | 6 ++++ src/note.cpp | 68 +++++++++++++++++++++++++++++++++++++------- 3 files changed, 74 insertions(+), 13 deletions(-) diff --git a/include/vrv/note.h b/include/vrv/note.h index cb11ad6f7bd..f07e9bcc7fd 100644 --- a/include/vrv/note.h +++ b/include/vrv/note.h @@ -245,8 +245,8 @@ class Note : public LayerElement, /** * Resovle @stem.sameas links by instanciating Note::m_stemSameas (*Note). * Called twice from Object::PrepareLinks. Once to fill uuid / note pairs, - * and once to resolve the link. The direction of the link depends on the - * stem direction and not on the presence of the @stem.sameas + * and once to resolve the link. The link is bi-directional, which means + * that both notes have their m_stemSameas pointer instanciated. */ void ResolveStemSameas(PrepareLinkingParams *params); @@ -443,6 +443,15 @@ class Note : public LayerElement, * It means that the pointing note is not necessary the note carrying the @stem.sameas. */ Note *m_stemSameas; + + /** + * The role in a stem.sameas situation. + * Set in Note::ResolveStemSameas and then in Note::CalcStemDirForSameasNote + * Used to determine if the note is the primary one (normal stem, e.g., with flag) + * or the secondary one (linking both notes). This depends on the drawing stem direction, + * which can be encoded but otherwise calculated by CalcStemDirForSameasNote + */ + StemSameasDrawingRole m_stemSameasRole; }; //---------------------------------------------------------------------------- diff --git a/include/vrv/vrvdef.h b/include/vrv/vrvdef.h index 9925c2123f2..3a2499ab921 100644 --- a/include/vrv/vrvdef.h +++ b/include/vrv/vrvdef.h @@ -603,6 +603,12 @@ enum Accessor { SELF = 0, CONTENT }; enum { KEY_LEFT = 37, KEY_UP = 38, KEY_RIGHT = 39, KEY_DOWN = 40 }; +//---------------------------------------------------------------------------- +// Stem sameas drawing role +//---------------------------------------------------------------------------- + +enum StemSameasDrawingRole { SAMEAS_NONE = 0, SAMEAS_UNSET, SAMEAS_PRIMARY, SAMEAS_SECONDARY }; + //---------------------------------------------------------------------------- // Legacy Wolfgang defines //---------------------------------------------------------------------------- diff --git a/src/note.cpp b/src/note.cpp index cb9afe7954c..b7d3bf5e884 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -125,6 +125,7 @@ void Note::Reset() m_scoreTimeTiedDuration = 0.0; m_stemSameas = NULL; + m_stemSameasRole = SAMEAS_NONE; } bool Note::IsSupportedChild(Object *child) @@ -566,23 +567,65 @@ void Note::ResolveStemSameas(PrepareLinkingParams *params) else { const std::string uuid = this->GetUuid(); if (params->m_stemSameasUuidPairs.count(uuid)) { - Note *noteWithStemSameas = params->m_stemSameasUuidPairs.at(uuid); - // By default (stem up) the pointing note is the one with @stem.sameas (lower) - Note *targetNote = noteWithStemSameas; - if (this->HasStemDir() && this->GetStemDir() == STEMDIRECTION_down) { - this->SetStemSameasNote(noteWithStemSameas); - targetNote = this; - } - else { - noteWithStemSameas->SetStemSameasNote(this); + Note *noteStemSameas = params->m_stemSameasUuidPairs.at(uuid); + // Instanciate the bi-directional references and mark the roles as unset + this->SetStemSameasNote(noteStemSameas); + this->m_stemSameasRole = SAMEAS_UNSET; + noteStemSameas->SetStemSameasNote(this); + noteStemSameas->m_stemSameasRole = SAMEAS_UNSET; + // Also resovle beams and instanciate the bi-directional references + Beam *beamStemSameas = noteStemSameas->IsInBeam(); + if (beamStemSameas) { + Beam *thisBeam = this->IsInBeam(); + if (!thisBeam) { + // This is one thing that can go wrong. We can have many others here... + // E.g., not the same number of notes, conflicting durations, not all notes sharing stems, ... + // Not sure everything could be checked here. + LogError("Notes with @stem.sameas in a beam should refer only to a note also in beam."); + } + else { + thisBeam->SetStemSameasBeam(beamStemSameas); + beamStemSameas->SetStemSameasBeam(thisBeam); + } } - Beam *beam = targetNote->IsInBeam(); - if (beam) beam->SetStemSameasNotes(true); params->m_stemSameasUuidPairs.erase(uuid); } } } +data_STEMDIRECTION Note::CalcStemDirForSameasNote(int verticalCenter) +{ + assert(m_stemSameas); + assert(m_stemSameas->HasStemSameasNote()); + assert(m_stemSameas->GetStemSameasNote() == this); + + // This is the first of the of the note pair, we need to calculate and set the stem direction + if (m_stemSameasRole == SAMEAS_UNSET) { + data_STEMDIRECTION stemDir = STEMDIRECTION_up; + Note *topNote = (this->GetDrawingY() > m_stemSameas->GetDrawingY()) ? this : m_stemSameas; + Note *bottomNote = (this->GetDrawingY() > m_stemSameas->GetDrawingY()) ? m_stemSameas : this; + // First check if we have an encoded stem direction + if (this->HasStemDir()) { + stemDir = this->GetStemDir(); + } + // Otherwise auto determine it + else { + const int topY = topNote->GetDrawingY(); + const int bottomY = bottomNote->GetDrawingY(); + const int middlePoint = (topY + bottomY) / 2; + stemDir = (middlePoint > verticalCenter) ? STEMDIRECTION_down : STEMDIRECTION_up; + } + // We also set the role to both notes accordingly + topNote->m_stemSameasRole = (stemDir == STEMDIRECTION_up) ? SAMEAS_PRIMARY : SAMEAS_SECONDARY; + bottomNote->m_stemSameasRole = (stemDir == STEMDIRECTION_up) ? SAMEAS_SECONDARY : SAMEAS_PRIMARY; + return stemDir; + } + else { + // Otherwise use the stem direction set for the other note previously when this method was called for it + return m_stemSameas->GetDrawingStemDir(); + } +} + bool Note::IsEnharmonicWith(Note *note) { return (this->GetMIDIPitch() == note->GetMIDIPitch()); @@ -1371,6 +1414,7 @@ int Note::ResetDrawing(FunctorParams *functorParams) m_drawingLoc = 0; m_flippedNotehead = false; m_stemSameas = NULL; + m_stemSameasRole = SAMEAS_NONE; return FUNCTOR_CONTINUE; } @@ -1382,6 +1426,8 @@ int Note::ResetHorizontalAlignment(FunctorParams *functorParams) m_drawingLoc = 0; m_flippedNotehead = false; + // Re-mark the role as unsed if we have a shared stem + if (this->HasStemSameasNote()) m_stemSameasRole = SAMEAS_UNSET; return FUNCTOR_CONTINUE; } From 79a989b3872bddf6b6f979bcc4b26d8af7eb02e1 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 27 Jan 2022 13:58:10 +0100 Subject: [PATCH 151/403] Move tempo handling --- include/vrv/tempo.h | 5 +++++ src/measure.cpp | 19 +------------------ src/tempo.cpp | 23 +++++++++++++++++++++++ 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/include/vrv/tempo.h b/include/vrv/tempo.h index 7f7ee62fee4..5d87a1c717d 100644 --- a/include/vrv/tempo.h +++ b/include/vrv/tempo.h @@ -77,6 +77,11 @@ class Tempo : public ControlElement, */ int ResetDrawing(FunctorParams *functorParams) override; + /** + * See Object::CalcMaxMeasureDuration + */ + int CalcMaxMeasureDuration(FunctorParams *functorParams) override; + private: // public: diff --git a/src/measure.cpp b/src/measure.cpp index 1d2e0142faf..53f3cb8324a 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -1564,24 +1564,6 @@ int Measure::CalcMaxMeasureDuration(FunctorParams *functorParams) m_scoreTimeOffset.clear(); m_scoreTimeOffset.push_back(params->m_currentScoreTime); - // search for tempo marks in the measure - Tempo *tempo = dynamic_cast(this->FindDescendantByType(TEMPO)); - if (tempo && tempo->HasMidiBpm()) { - params->m_currentTempo = tempo->GetMidiBpm(); - } - else if (tempo && tempo->HasMm()) { - double mm = tempo->GetMm(); - int mmUnit = 4; - if (tempo->HasMmUnit() && (tempo->GetMmUnit() > DURATION_breve)) { - mmUnit = pow(2, (int)tempo->GetMmUnit() - 2); - } - if (tempo->HasMmDots()) { - mmUnit = 2 * mmUnit - (mmUnit / pow(2, tempo->GetMmDots())); - } - params->m_currentTempo = mm * 4.0 / mmUnit + 0.5; - } - m_currentTempo = params->m_currentTempo * params->m_tempoAdjustment; - m_realTimeOffsetMilliseconds.clear(); // m_realTimeOffsetMilliseconds.push_back(int(params->m_maxCurrentRealTimeSeconds * 1000.0 + 0.5)); m_realTimeOffsetMilliseconds.push_back(params->m_currentRealTimeSeconds * 1000.0); @@ -1596,6 +1578,7 @@ int Measure::CalcMaxMeasureDurationEnd(FunctorParams *functorParams) const double scoreTimeIncrement = m_measureAligner.GetRightAlignment()->GetTime() * params->m_multiRestFactor * DURATION_4 / DUR_MAX; + m_currentTempo = params->m_currentTempo * params->m_tempoAdjustment; params->m_currentScoreTime += scoreTimeIncrement; params->m_currentRealTimeSeconds += scoreTimeIncrement * 60.0 / m_currentTempo; params->m_multiRestFactor = 1; diff --git a/src/tempo.cpp b/src/tempo.cpp index 60f7105fada..890e3f25183 100644 --- a/src/tempo.cpp +++ b/src/tempo.cpp @@ -127,4 +127,27 @@ int Tempo::ResetDrawing(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int Tempo::CalcMaxMeasureDuration(FunctorParams *functorParams) +{ + CalcMaxMeasureDurationParams *params = vrv_params_cast(functorParams); + assert(params); + + if (this->HasMidiBpm()) { + params->m_currentTempo = this->GetMidiBpm(); + } + else if (this->HasMm()) { + double mm = this->GetMm(); + int mmUnit = 4; + if (this->HasMmUnit() && (this->GetMmUnit() > DURATION_breve)) { + mmUnit = pow(2, (int)this->GetMmUnit() - 2); + } + if (this->HasMmDots()) { + mmUnit = 2 * mmUnit - (mmUnit / pow(2, this->GetMmDots())); + } + params->m_currentTempo = mm * 4.0 / mmUnit + 0.5; + } + + return FUNCTOR_CONTINUE; +} + } // namespace vrv From 8df8f603a69f4d95ad5dff74df76d17a4a81d539 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Thu, 27 Jan 2022 13:58:16 +0100 Subject: [PATCH 152/403] Use m_stemSameasRole members in stem direction calculation --- include/vrv/note.h | 8 ++++++++ src/note.cpp | 11 ++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/include/vrv/note.h b/include/vrv/note.h index f07e9bcc7fd..0298f6bc530 100644 --- a/include/vrv/note.h +++ b/include/vrv/note.h @@ -250,6 +250,14 @@ class Note : public LayerElement, */ void ResolveStemSameas(PrepareLinkingParams *params); + /** + * Calculate the stem direction of the pair of notes. + * The presence of a StemSameasNote() needs to be check before calling it. + * Encoded stem direction on the calling note is taken into account. + * Called from Note::CalcStem + */ + data_STEMDIRECTION CalcStemDirForSameasNote(int verticalCenter); + public: //----------------// // Static methods // diff --git a/src/note.cpp b/src/note.cpp index b7d3bf5e884..16cb2b6e0ce 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -1034,7 +1034,7 @@ int Note::CalcStem(FunctorParams *functorParams) // Stems have been calculated previously in Beam or fTrem - siblings because flags do not need to // be processed either - except when there is a stemSameasNote - if ((this->IsInBeam() || this->IsInFTrem()) && !this->HasStemSameasNote()) { + if ((this->IsInBeam() || this->IsInFTrem())) { return FUNCTOR_SIBLINGS; } @@ -1069,7 +1069,7 @@ int Note::CalcStem(FunctorParams *functorParams) params->m_interface = this; params->m_dur = this->GetActualDur(); params->m_isGraceNote = this->IsGraceNote(); - params->m_stemSameas = this->HasStemSameasNote(); + params->m_stemSameas = false; int staffSize = staff->m_drawingStaffSize; @@ -1082,8 +1082,7 @@ int Note::CalcStem(FunctorParams *functorParams) data_STEMDIRECTION stemDir = STEMDIRECTION_NONE; if (this->HasStemSameasNote()) { - // for stem same as notes, the direction is up if the note also carries the @stem.sameas attribute (default) - stemDir = (this->HasStemSameas()) ? STEMDIRECTION_up : STEMDIRECTION_down; + stemDir = this->CalcStemDirForSameasNote(params->m_verticalCenter); } else if (stem->HasStemDir()) { stemDir = stem->GetStemDir(); @@ -1104,8 +1103,10 @@ int Note::CalcStem(FunctorParams *functorParams) stem->SetDrawingYRel(0); // Use the params->m_chordStemLength for the length of the stem beetween the notes - if (this->HasStemSameasNote()) { + // The value of m_stemSameasRole is set by Note::CalcStemDirForSameasNote + if (this->HasStemSameasNote() && m_stemSameasRole == SAMEAS_SECONDARY) { params->m_chordStemLength = -std::abs(this->GetDrawingY() - this->GetStemSameasNote()->GetDrawingY()); + params->m_stemSameas = true; } return FUNCTOR_CONTINUE; From ee8fe829ddcaaa9371b9c9c516cf9871d956a327 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Thu, 27 Jan 2022 13:59:18 +0100 Subject: [PATCH 153/403] Add m_stemSameas pointer to Beam (bi-directional) --- include/vrv/beam.h | 8 ++++++-- src/beam.cpp | 5 +++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 8accf201ea4..85a5dc61967 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -220,8 +220,12 @@ class Beam : public LayerElement, int CalcLayerOverlap(Doc *doc, Object *beam, int directionBias, int y1, int y2); private: - /** A flag indicating that we have notes with stem shared and that it should not be drawn */ - bool m_stemSameAsNotes; + /** + * A pointer to the beam with which stem are shared. + * The pointer is bi-directional (each beam points to the other one. + * It is the in Note::ResovleStemSameas() + */ + Beam *m_stemSameas; public: /** */ diff --git a/src/beam.cpp b/src/beam.cpp index 93aef952975..5d817c4db76 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1215,7 +1215,7 @@ void Beam::Reset() ResetColor(); ResetCue(); - m_stemSameAsNotes = false; + m_stemSameas = NULL; } bool Beam::IsSupportedChild(Object *child) @@ -1692,9 +1692,10 @@ int Beam::ResetDrawing(FunctorParams *functorParams) { // Call parent one too LayerElement::ResetDrawing(functorParams); + BeamDrawingInterface::Reset(); m_beamSegment.Reset(); - m_stemSameAsNotes = false; + m_stemSameas = NULL; // We want the list of the ObjectListInterface to be re-generated this->Modify(); From f4af9fb8a74ee67ccf03e1fd7e5a2c18500d2ba1 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Thu, 27 Jan 2022 14:00:00 +0100 Subject: [PATCH 154/403] Adjust selection of referenced notes when removing IDs in MEI output --- src/object.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/object.cpp b/src/object.cpp index f708fff7246..2e724060b5e 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -1467,14 +1467,9 @@ int Object::FindAllReferencedObjects(FunctorParams *functorParams) if (this->Is(NOTE)) { Note *note = vrv_cast(this); assert(note); - if (note->HasStemSameasNote()) { - // We need to check where the @stem.sameas attribute actually is because of the handling - // of share stem pointers depending on the stem direction. - // If it is on this note, then the reference we want to keep is the other note. - // Otherwise it means that the @stem.sameas is on the other note that we already have - // the one that is actually referenced - if (note->HasStemSameas()) note = note->GetStemSameasNote(); - params->m_elements->push_back(note); + // The note has a stem.sameas that was resolved the a note, then that one is referenced + if (note->HasStemSameas() && note->HasStemSameasNote()) { + params->m_elements->push_back(note->GetStemSameasNote()); } } // These will also be referred to as milestones in page-based MEI From 1d60b788d17bd51d6a4f6e76e464e9d446ac82b7 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Thu, 27 Jan 2022 14:01:59 +0100 Subject: [PATCH 155/403] Add m_stemSameasRole to Beam and use them for beam place calculation --- include/vrv/beam.h | 48 +++++++++++++++- src/beam.cpp | 133 ++++++++++++++++++++++++++++++++++++--------- src/view_beam.cpp | 15 +++-- 3 files changed, 162 insertions(+), 34 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 85a5dc61967..2fdbfa19d31 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -77,12 +77,34 @@ class BeamSegment { int GetStartingY() const; ///@} + /** + * @name Getters for the stem same as role. + */ + ///@{ + bool StemSameas() const { return (m_stemSameasRole != SAMEAS_NONE); } + bool StemSameasIsUnset() const { return (m_stemSameasRole == SAMEAS_UNSET); } + bool StemSameasIsPrimary() const { return (m_stemSameasRole == SAMEAS_PRIMARY); } + bool StemSameasIsSecondary() const { return (m_stemSameasRole == SAMEAS_SECONDARY); } + ///@} + + /** + * @name Methods to intialize and update the role for stem.sameas context + * Before the drawing beam place has been calculated, the role is marked as unset. + * Then it is marked as primary or secondary depending on the beam place. + */ + ///@{ + void InitSameasRoles(Beam *sameasBeam, data_BEAMPLACE &drawingPlace); + void UpdateSameasRoles(data_BEAMPLACE place); + ///@} + private: // Helper to adjust beam positioning with regards to ledger lines (top and bottom of the staff) void AdjustBeamToLedgerLines(Doc *doc, Staff *staff, BeamDrawingInterface *beamInterface); void CalcBeamInit(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place); + void CalcBeamInitForNotePair(Note *note1, Note *note2, Staff *staff, int &yMax, int &yMin); + bool CalcBeamSlope( Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, bool &shorten, int &step); @@ -130,6 +152,20 @@ class BeamSegment { * An array of coordinates for each element **/ ArrayOfBeamElementCoords m_beamElementCoordRefs; + + /** + * @name The role in a stem.sameas situation. + * Set in BeamSegment::InitSameasRoles and then in UpdateSameasRoles + * Used to determine if the beam is the primary one (normal stems and beams) + * or the secondary one (linking both notes). This depends on the drawing stem direction, + * which can be encoded but otherwise calculated by CalcBeamPlace. + * The pointer to the other beam m_stemSameasReverseRole is set only for the first of the + * two beam and is not bi-directional. Is is set in InitSameasRoles. + */ + ///@{ + StemSameasDrawingRole m_stemSameasRole; + StemSameasDrawingRole *m_stemSameasReverseRole; + ///@} }; //---------------------------------------------------------------------------- @@ -175,11 +211,12 @@ class Beam : public LayerElement, bool IsTabBeam(); /** - * @name Setter and getter for the stemSameasNote flag + * @name Checker, getter and setter for a beam with which the stems are shared */ ///@{ - void SetStemSameasNotes(bool stemSameasNotes) { m_stemSameAsNotes = stemSameasNotes; } - bool GetStemSameasNotes() const { return m_stemSameAsNotes; } + bool HasStemSameasBeam() const { return (m_stemSameas); } + Beam *GetStemSameasBeam() const { return m_stemSameas; } + void SetStemSameasBeam(Beam *stemSameas) { m_stemSameas = stemSameas; } ///@} //----------// @@ -201,6 +238,11 @@ class Beam : public LayerElement, */ int CalcStem(FunctorParams *functorParams) override; + /** + * See Object::ResetHorizontalAlignment + */ + int ResetHorizontalAlignment(FunctorParams *functorParams) override; + /** * See Object::ResetDrawing */ diff --git a/src/beam.cpp b/src/beam.cpp index 5d817c4db76..049efa08f70 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -62,6 +62,9 @@ void BeamSegment::Reset() m_firstNoteOrChord = NULL; m_lastNoteOrChord = NULL; + + m_stemSameasRole = SAMEAS_NONE; + m_stemSameasReverseRole = NULL; } const ArrayOfBeamElementCoords *BeamSegment::GetElementCoordRefs() const @@ -443,39 +446,37 @@ void BeamSegment::CalcBeamInit( m_nbNotesOrChords++; } + int chordYMax = 0; + int chordYMin = 0; + if (coord->m_element->Is(CHORD)) { - int max = 0; - int min = 0; Chord *chord = vrv_cast(coord->m_element); assert(chord); - chord->GetYExtremes(max, min); - - SetExtrema(max); - SetExtrema(min); - - int linesAbove = 0; - int linesBelow = 0; Note *bottomNote = chord->GetBottomNote(); assert(bottomNote); - if (bottomNote->HasLedgerLines(linesAbove, linesBelow, staff)) { - m_ledgerLinesBelow += linesBelow; - } Note *topNote = chord->GetTopNote(); assert(topNote); - if (topNote->HasLedgerLines(linesAbove, linesBelow, staff)) { - m_ledgerLinesAbove += linesAbove; - } + this->CalcBeamInitForNotePair(bottomNote, topNote, staff, chordYMax, chordYMin); + SetExtrema(chordYMax); + SetExtrema(chordYMin); } else if (coord->m_element->Is(NOTE)) { Note *note = vrv_cast(coord->m_element); assert(note); - SetExtrema(note->GetDrawingY()); - - int linesAbove = 0; - int linesBelow = 0; - if (note->HasLedgerLines(linesAbove, linesBelow, staff)) { - m_ledgerLinesBelow += linesBelow; - m_ledgerLinesAbove += linesAbove; + // In a stem.sameas context, use both notes to determine the beam place (e,g, same as a chord) + if (note->HasStemSameasNote()) { + this->CalcBeamInitForNotePair(note, note->GetStemSameasNote(), staff, chordYMax, chordYMin); + SetExtrema(chordYMax); + SetExtrema(chordYMin); + } + else { + SetExtrema(note->GetDrawingY()); + int linesAbove = 0; + int linesBelow = 0; + if (note->HasLedgerLines(linesAbove, linesBelow, staff)) { + m_ledgerLinesBelow += linesBelow; + m_ledgerLinesAbove += linesAbove; + } } } else { @@ -486,6 +487,27 @@ void BeamSegment::CalcBeamInit( m_weightedPlace = ((m_verticalCenter - yMin) > (yMax - m_verticalCenter)) ? BEAMPLACE_above : BEAMPLACE_below; } +void BeamSegment::CalcBeamInitForNotePair(Note *note1, Note *note2, Staff *staff, int &yMax, int &yMin) +{ + assert(note1); + assert(note2); + + Note *bottomNote = (note1->GetDrawingY() > note2->GetDrawingY()) ? note2 : note1; + Note *topNote = (note1->GetDrawingY() > note2->GetDrawingY()) ? note1 : note2; + + yMax = bottomNote->GetDrawingY(); + yMin = topNote->GetDrawingY(); + + int linesAbove = 0; + int linesBelow = 0; + if (bottomNote->HasLedgerLines(linesAbove, linesBelow, staff)) { + m_ledgerLinesBelow += linesBelow; + } + if (topNote->HasLedgerLines(linesAbove, linesBelow, staff)) { + m_ledgerLinesAbove += linesAbove; + } +} + bool BeamSegment::CalcBeamSlope( Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, bool &shorten, int &step) { @@ -1020,7 +1042,9 @@ void BeamSegment::CalcBeamPlace(Layer *layer, BeamDrawingInterface *beamInterfac } // Look at the layer direction or, finally, at the note position else { - data_STEMDIRECTION layerStemDir = layer->GetDrawingStemDir(&m_beamElementCoordRefs); + data_STEMDIRECTION layerStemDir = STEMDIRECTION_NONE; + // Do not look at the layer context when notes from different layers are stemmed together + if (!this->StemSameas()) layerStemDir = layer->GetDrawingStemDir(&m_beamElementCoordRefs); // Layer direction ? if (layerStemDir == STEMDIRECTION_NONE) { if (m_ledgerLinesBelow != m_ledgerLinesAbove) { @@ -1037,6 +1061,12 @@ void BeamSegment::CalcBeamPlace(Layer *layer, BeamDrawingInterface *beamInterfac } } + // If we have a stem.sameas context and it is unset, update the roles. + // This will update the roles for both beams + if (this->StemSameasIsUnset()) { + this->UpdateSameasRoles(beamInterface->m_drawingPlace); + } + // For now force it above // if (beamInterface->m_drawingPlace == BEAMPLACE_mixed) beamInterface->m_drawingPlace = BEAMPLACE_above; } @@ -1188,6 +1218,46 @@ int BeamSegment::GetStartingY() const return (m_beamElementCoordRefs.empty() ? 0 : m_beamElementCoordRefs.at(0)->m_yBeam); } +void BeamSegment::InitSameasRoles(Beam *sameasBeam, data_BEAMPLACE &initialPlace) +{ + if (!sameasBeam) return; + + // This is the first time and the first beam for which we are calling it. + // All we need to do is setting the pointer to the role of the other beam + // and make both of them as unset + if (m_stemSameasRole == SAMEAS_NONE) { + m_stemSameasReverseRole = &sameasBeam->m_beamSegment.m_stemSameasRole; + m_stemSameasRole = SAMEAS_UNSET; + (*m_stemSameasReverseRole) = SAMEAS_UNSET; + } + // The reverse role is not set, which means we are calling it from the second beam. + // We need to set the initial place of the beam as previously calculated for the first one. + // If the role of the second beam (this) has been mark as is primary, it means the beam + // has been place below, above if secondary. + else if (!m_stemSameasReverseRole) { + initialPlace = (this->StemSameasIsPrimary()) ? BEAMPLACE_below : BEAMPLACE_above; + } + // Otherwise, calling it (again) from the first beam, nothing to do. +} + +void BeamSegment::UpdateSameasRoles(data_BEAMPLACE place) +{ + if (!m_stemSameasReverseRole || !this->StemSameasIsUnset()) return; + + // Because m_stemSameasReverseRole is instanciated, then it means we are in + // the first of the beams sharing the stems. + // The beam is placed above, this one is primary, the other secondary. + if (place == BEAMPLACE_above) { + m_stemSameasRole = SAMEAS_PRIMARY; + (*m_stemSameasReverseRole) = SAMEAS_SECONDARY; + } + // The beam is placed below, this one is secondary, the other primary. + else { + m_stemSameasRole = SAMEAS_SECONDARY; + (*m_stemSameasReverseRole) = SAMEAS_PRIMARY; + } +} + //---------------------------------------------------------------------------- // Beam //---------------------------------------------------------------------------- @@ -1667,7 +1737,7 @@ int Beam::CalcStem(FunctorParams *functorParams) CalcStemParams *params = vrv_params_cast(functorParams); assert(params); - if (this->IsTabBeam() || this->GetStemSameasNotes()) return FUNCTOR_CONTINUE; + if (this->IsTabBeam()) return FUNCTOR_CONTINUE; const ArrayOfObjects *beamChildren = this->GetList(this); @@ -1678,12 +1748,25 @@ int Beam::CalcStem(FunctorParams *functorParams) m_beamSegment.InitCoordRefs(this->GetElementCoords()); + data_BEAMPLACE initialPlace = this->GetPlace(); + if (this->HasStemSameasBeam()) m_beamSegment.InitSameasRoles(this->GetStemSameasBeam(), initialPlace); + Layer *layer = vrv_cast(this->GetFirstAncestor(LAYER)); assert(layer); Staff *staff = vrv_cast(layer->GetFirstAncestor(STAFF)); assert(staff); - m_beamSegment.CalcBeam(layer, staff, params->m_doc, this, this->GetPlace()); + m_beamSegment.CalcBeam(layer, staff, params->m_doc, this, initialPlace); + + return FUNCTOR_CONTINUE; +} + +int Beam::ResetHorizontalAlignment(FunctorParams *functorParams) +{ + LayerElement::ResetHorizontalAlignment(functorParams); + + m_beamSegment.m_stemSameasRole = SAMEAS_NONE; + m_beamSegment.m_stemSameasReverseRole = NULL; return FUNCTOR_CONTINUE; } diff --git a/src/view_beam.cpp b/src/view_beam.cpp index 08195e76810..8439f63b122 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -42,7 +42,6 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf assert(beam); const bool isTabBeam = beam->IsTabBeam(); - const bool hasStemSameas = beam->GetStemSameasNotes(); /******************************************************************/ // initialization @@ -56,14 +55,17 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf beam->m_beamSegment.InitCoordRefs(beam->GetElementCoords()); + data_BEAMPLACE initialPlace = beam->GetPlace(); + if (beam->HasStemSameasBeam()) beam->m_beamSegment.InitSameasRoles(beam->GetStemSameasBeam(), initialPlace); + /******************************************************************/ // Calculate the beam slope and position if (isTabBeam) { - beam->m_beamSegment.CalcTabBeam(layer, beam->m_beamStaff, m_doc, beam, beam->GetPlace()); + beam->m_beamSegment.CalcTabBeam(layer, beam->m_beamStaff, m_doc, beam, initialPlace); } - else if (!hasStemSameas) { - beam->m_beamSegment.CalcBeam(layer, beam->m_beamStaff, m_doc, beam, beam->GetPlace()); + else if (!beam->m_beamSegment.StemSameasIsSecondary()) { + beam->m_beamSegment.CalcBeam(layer, beam->m_beamStaff, m_doc, beam, initialPlace); } /******************************************************************/ @@ -77,9 +79,10 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf DrawLayerChildren(dc, beam, layer, staff, measure); /******************************************************************/ - // Draw the beamSegment + // Draw the beamSegment - but not if it is a secondary beam in a stem.sameas - if (!hasStemSameas) DrawBeamSegment(dc, &beam->m_beamSegment, beam, layer, staff, measure); + if (!beam->m_beamSegment.StemSameasIsSecondary()) + DrawBeamSegment(dc, &beam->m_beamSegment, beam, layer, staff, measure); dc->EndGraphic(element, this); } From 0c719163ed60ebd3637ab94fe5aec4d5bfc90d2f Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Thu, 27 Jan 2022 14:02:34 +0100 Subject: [PATCH 156/403] Adjust rendering for secondary beam with shared stems --- src/beam.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/beam.cpp b/src/beam.cpp index 049efa08f70..c4279c58406 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -187,14 +187,40 @@ void BeamSegment::CalcBeam( assert(beamInterface); assert(coord->m_closestNote); + y1 = coord->m_yBeam; + bool isStemSameas = false; + + // With stem.sameas the y is not the beam one but the one of the other note + // We also need to adjust the length differently (below) + if (this->StemSameasIsSecondary() && el->Is(NOTE)) { + Note *note = vrv_cast(el); + assert(note); + if (note->HasStemSameasNote()) { + y1 = note->GetStemSameasNote()->GetDrawingY(); + isStemSameas = true; + } + } + y2 = coord->m_closestNote->GetDrawingY(); if (beamInterface->m_drawingPlace == BEAMPLACE_above) { - y1 -= doc->GetDrawingStemWidth(staff->m_drawingStaffSize); + if (isStemSameas) { + // Move up according to the cut-outs + y1 += stemmedInterface->GetStemUpSE(doc, staff->m_drawingStaffSize, beamInterface->m_cueSize).y; + } + else { + // Move down to ensure the stem is slightly shorter than the top-beam + y1 -= doc->GetDrawingStemWidth(staff->m_drawingStaffSize); + } y2 += stemmedInterface->GetStemUpSE(doc, staff->m_drawingStaffSize, beamInterface->m_cueSize).y; } else if (beamInterface->m_drawingPlace == BEAMPLACE_below) { - y1 += doc->GetDrawingStemWidth(staff->m_drawingStaffSize); + if (isStemSameas) { + y1 += stemmedInterface->GetStemDownNW(doc, staff->m_drawingStaffSize, beamInterface->m_cueSize).y; + } + else { + y1 += doc->GetDrawingStemWidth(staff->m_drawingStaffSize); + } y2 += stemmedInterface->GetStemDownNW(doc, staff->m_drawingStaffSize, beamInterface->m_cueSize).y; } else if (beamInterface->m_drawingPlace == BEAMPLACE_mixed) { From 5095559272f3e8c0162f026a5d744dab893c438e Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Thu, 27 Jan 2022 14:29:20 +0100 Subject: [PATCH 157/403] Adjust code comments --- include/vrv/beam.h | 10 +++++----- include/vrv/functorparams.h | 4 ++-- include/vrv/note.h | 8 ++------ src/beam.cpp | 2 +- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 2fdbfa19d31..3ffd24a57ef 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -157,10 +157,10 @@ class BeamSegment { * @name The role in a stem.sameas situation. * Set in BeamSegment::InitSameasRoles and then in UpdateSameasRoles * Used to determine if the beam is the primary one (normal stems and beams) - * or the secondary one (linking both notes). This depends on the drawing stem direction, + * or the secondary one (linking both notes). This depends on the drawing beam place, * which can be encoded but otherwise calculated by CalcBeamPlace. * The pointer to the other beam m_stemSameasReverseRole is set only for the first of the - * two beam and is not bi-directional. Is is set in InitSameasRoles. + * two beams and is not bi-directional. Is is set in InitSameasRoles. */ ///@{ StemSameasDrawingRole m_stemSameasRole; @@ -263,9 +263,9 @@ class Beam : public LayerElement, private: /** - * A pointer to the beam with which stem are shared. - * The pointer is bi-directional (each beam points to the other one. - * It is the in Note::ResovleStemSameas() + * A pointer to the beam with which stems are shared. + * The pointer is bi-directional – each beam points to the other one. + * It is set in Note::ResovleStemSameas() */ Beam *m_stemSameas; diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 38981cf7a69..39d308a3e5e 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -461,8 +461,8 @@ class AdjustHarmGrpsSpacingParams : public FunctorParams { * member 4: the doc * member 5: a pointer to the functor for passing it to the system aligner * member 6: a pointer to the end functor for passing it to the system aligner - * member 7: flag whether element is in unison - * member 8: flag whether element (note) has as stem same as note + * member 7: flag whether the element is in unison + * member 8: flag whether the element (note) has as stem.sameas note * member 9: the total shift of the current note or chord **/ diff --git a/include/vrv/note.h b/include/vrv/note.h index 0298f6bc530..56a2c7af9e7 100644 --- a/include/vrv/note.h +++ b/include/vrv/note.h @@ -443,12 +443,8 @@ class Note : public LayerElement, /** * A pointer to a note with which the note shares its stem and implementing @stem.sameas. - * The other note is always the one with the stem going outward (up or down). This means - * that the note pointing to it will have a stem linking the two notes. - * The current implementation requires the notes with the @stem.sameas to be in a lower layer. - * The note in the upper layer has no attribute. By default, stems go up but the @stem.dir - * value is supported. If the stem is going down, the upper note will have a m_stemSameas Note. - * It means that the pointing note is not necessary the note carrying the @stem.sameas. + * The pointer is bi-directional (both notes point to each other). + * It is set in Note::ResolveStemSameas */ Note *m_stemSameas; diff --git a/src/beam.cpp b/src/beam.cpp index c4279c58406..a98a5005a7c 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1250,7 +1250,7 @@ void BeamSegment::InitSameasRoles(Beam *sameasBeam, data_BEAMPLACE &initialPlace // This is the first time and the first beam for which we are calling it. // All we need to do is setting the pointer to the role of the other beam - // and make both of them as unset + // and mark both of them as unset if (m_stemSameasRole == SAMEAS_NONE) { m_stemSameasReverseRole = &sameasBeam->m_beamSegment.m_stemSameasRole; m_stemSameasRole = SAMEAS_UNSET; From 044455d3a03aaf0dbaa10b9da61003bf3ba6533b Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 27 Jan 2022 15:11:26 +0100 Subject: [PATCH 158/403] Further improvement --- src/slur.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/slur.cpp b/src/slur.cpp index 3c0f40611c4..0c0235715d4 100644 --- a/src/slur.cpp +++ b/src/slur.cpp @@ -1029,7 +1029,10 @@ std::pair Slur::AdjustCoordinates( const int yMin = y1 - unit * 4; const int yTop = end->GetDrawingTop(doc, staff->m_drawingStaffSize); y2 = std::max(end->GetDrawingY() + unit * 2, yMin); - y2 = std::min(yTop - unit, y2); + if (y2 > yTop - unit * 2) { + y2 = yTop; + x2 += endRadius - doc->GetDrawingStemWidth(staff->m_drawingStaffSize); + } } } // portato slurs @@ -1086,7 +1089,7 @@ std::pair Slur::AdjustCoordinates( const int yBottom = end->GetDrawingBottom(doc, staff->m_drawingStaffSize); y2 = std::min(end->GetDrawingY(), yMax); if (y2 < yBottom + unit) { - y2 = yBottom + unit; + y2 = yBottom + unit * 2; } else { x2 -= endRadius + 2 * doc->GetDrawingStemWidth(staff->m_drawingStaffSize); From 113f32fb443f84168da2fefa2b7c1a904f2726b0 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Thu, 27 Jan 2022 22:14:00 +0100 Subject: [PATCH 159/403] Move note onset / offset members to the DurationInterface and instanciate them for rests --- include/vrv/durationinterface.h | 70 ++++++++++++++++++++ include/vrv/note.h | 53 --------------- include/vrv/rest.h | 9 ++- src/durationinterface.cpp | 112 ++++++++++++++++++++++++++++++++ src/layerelement.cpp | 9 +++ src/note.cpp | 90 +------------------------ src/rest.cpp | 8 +++ 7 files changed, 207 insertions(+), 144 deletions(-) diff --git a/include/vrv/durationinterface.h b/include/vrv/durationinterface.h index c99bf1eb68d..324643b6056 100644 --- a/include/vrv/durationinterface.h +++ b/include/vrv/durationinterface.h @@ -15,6 +15,7 @@ namespace vrv { +class FunctorParams; class Mensur; class Object; @@ -108,6 +109,39 @@ class DurationInterface : public Interface, */ bool HasIdenticalDurationInterface(DurationInterface *otherDurationInterface); + /** + * MIDI timing information + */ + ///@{ + void SetScoreTimeOnset(double scoreTime); + void SetRealTimeOnsetSeconds(double timeInSeconds); + void SetScoreTimeOffset(double scoreTime); + void SetRealTimeOffsetSeconds(double timeInSeconds); + void SetScoreTimeTiedDuration(double timeInSeconds); + double GetScoreTimeOnset() const; + double GetRealTimeOnsetMilliseconds() const; + double GetScoreTimeOffset() const; + double GetScoreTimeTiedDuration() const; + double GetRealTimeOffsetMilliseconds() const; + double GetScoreTimeDuration() const; + ///@} + + //-----------------// + // Pseudo functors // + //-----------------// + + /** + * We have functors in the interface for avoiding code duplication in each implementation class. + * Since we are in an interface, we need to pass the Object (implementation) to + * the functor methods. These are not called by the Process/Call loop but by the implementation + * classes explicitely. See FloatingObject::FillStaffCurrentTimeSpanning for an example. + */ + + /** + * See Object::GenerateTimemap + */ + virtual int InterfaceGenerateTimemap(FunctorParams *functorParams, Object *object); + private: /** * Calculate the actual duration => translate mensural values @@ -117,6 +151,42 @@ class DurationInterface : public Interface, public: // private: + /** + * The score-time onset of the note in the measure (duration from the start of measure in + * quarter notes). + */ + double m_scoreTimeOnset; + + /** + * The score-time off-time of the note in the measure (duration from the start of the measure + * in quarter notes). This is the duration of the printed note. If the note is the start of + * a tied group, the score time of the tied group is this variable plus m_scoreTimeTiedDuration. + * If this note is a secondary note in a tied group, then this value is the score time end + * of the printed note, and the m_scoreTimeTiedDuration is -1.0 to indicate that it should not + * be exported when creating a MIDI file. + */ + double m_scoreTimeOffset; + + /** + * The time in milliseconds since the start of the measure element that contains the note. + */ + double m_realTimeOnsetMilliseconds; + + /** + * The time in milliseconds since the start of the measure element to end of printed note. + * The real-time duration of a tied group is not currently tracked (this gets complicated + * if there is a tempo change during a note sustain, which is currently not supported). + */ + double m_realTimeOffsetMilliseconds; + + /** + * If the note is the first in a tied group, then m_scoreTimeTiedDuration contains the + * score-time duration (in quarter notes) of all tied notes in the group after this note. + * If the note is a secondary note in a tied group, then this variable is set to -1.0 to + * indicate that it should not be written to MIDI output. + */ + double m_scoreTimeTiedDuration; + /** * The default duration: extracted from scoreDef/staffDef and used when no duration attribute is given */ diff --git a/include/vrv/note.h b/include/vrv/note.h index ae131487a7b..b700ec87022 100644 --- a/include/vrv/note.h +++ b/include/vrv/note.h @@ -210,23 +210,6 @@ class Note : public LayerElement, */ bool IsVisible() const; - /** - * MIDI timing information - */ - ///@{ - void SetScoreTimeOnset(double scoreTime); - void SetRealTimeOnsetSeconds(double timeInSeconds); - void SetScoreTimeOffset(double scoreTime); - void SetRealTimeOffsetSeconds(double timeInSeconds); - void SetScoreTimeTiedDuration(double timeInSeconds); - double GetScoreTimeOnset() const; - double GetRealTimeOnsetMilliseconds() const; - double GetScoreTimeOffset() const; - double GetScoreTimeTiedDuration() const; - double GetRealTimeOffsetMilliseconds() const; - double GetScoreTimeDuration() const; - ///@} - /** * MIDI pitch */ @@ -378,42 +361,6 @@ class Note : public LayerElement, * Position in the cluster (1-indexed position in said cluster; 0 if does not have position) */ int m_clusterPosition; - - /** - * The score-time onset of the note in the measure (duration from the start of measure in - * quarter notes). - */ - double m_scoreTimeOnset; - - /** - * The score-time off-time of the note in the measure (duration from the start of the measure - * in quarter notes). This is the duration of the printed note. If the note is the start of - * a tied group, the score time of the tied group is this variable plus m_scoreTimeTiedDuration. - * If this note is a secondary note in a tied group, then this value is the score time end - * of the printed note, and the m_scoreTimeTiedDuration is -1.0 to indicate that it should not - * be exported when creating a MIDI file. - */ - double m_scoreTimeOffset; - - /** - * The time in milliseconds since the start of the measure element that contains the note. - */ - double m_realTimeOnsetMilliseconds; - - /** - * The time in milliseconds since the start of the measure element to end of printed note. - * The real-time duration of a tied group is not currently tracked (this gets complicated - * if there is a tempo change during a note sustain, which is currently not supported). - */ - double m_realTimeOffsetMilliseconds; - - /** - * If the note is the first in a tied group, then m_scoreTimeTiedDuration contains the - * score-time duration (in quarter notes) of all tied notes in the group after this note. - * If the note is a secondary note in a tied group, then this variable is set to -1.0 to - * indicate that it should not be written to MIDI output. - */ - double m_scoreTimeTiedDuration; }; //---------------------------------------------------------------------------- diff --git a/include/vrv/rest.h b/include/vrv/rest.h index 1861145c8cc..f93dce58561 100644 --- a/include/vrv/rest.h +++ b/include/vrv/rest.h @@ -84,6 +84,11 @@ class Rest : public LayerElement, wchar_t GetRestGlyph(int duration) const; ///@} + /** + * Get the vertical location for the rests that are located on other layers + */ + int GetOptimalLayerLocation(Staff *staff, Layer *layer, int defaultLocation); + //----------// // Functors // //----------// @@ -124,9 +129,9 @@ class Rest : public LayerElement, int Transpose(FunctorParams *functorParams) override; /** - * Get the vertical location for the rests that are located on other layers + * See Object::GenerateTimemap */ - int GetOptimalLayerLocation(Staff *staff, Layer *layer, int defaultLocation); + int GenerateTimemap(FunctorParams *functorParams) override; private: /** diff --git a/src/durationinterface.cpp b/src/durationinterface.cpp index 72ebb5a6839..7f8fae8b122 100644 --- a/src/durationinterface.cpp +++ b/src/durationinterface.cpp @@ -17,6 +17,7 @@ #include "beam.h" #include "chord.h" +#include "functorparams.h" #include "mensur.h" #include "note.h" #include "vrv.h" @@ -64,6 +65,12 @@ void DurationInterface::Reset() ResetStaffIdent(); m_durDefault = DURATION_NONE; + + m_scoreTimeOnset = 0.0; + m_scoreTimeOffset = 0.0; + m_realTimeOnsetMilliseconds = 0; + m_realTimeOffsetMilliseconds = 0; + m_scoreTimeTiedDuration = 0.0; } double DurationInterface::GetInterfaceAlignmentDuration(int num, int numBase) @@ -235,4 +242,109 @@ bool DurationInterface::HasIdenticalDurationInterface(DurationInterface *otherDu */ } +void DurationInterface::SetScoreTimeOnset(double scoreTime) +{ + m_scoreTimeOnset = scoreTime; +} + +void DurationInterface::SetRealTimeOnsetSeconds(double timeInSeconds) +{ + // m_realTimeOnsetMilliseconds = int(timeInSeconds * 1000.0 + 0.5); + m_realTimeOnsetMilliseconds = timeInSeconds * 1000.0; +} + +void DurationInterface::SetScoreTimeOffset(double scoreTime) +{ + m_scoreTimeOffset = scoreTime; +} + +void DurationInterface::SetRealTimeOffsetSeconds(double timeInSeconds) +{ + // m_realTimeOffsetMilliseconds = int(timeInSeconds * 1000.0 + 0.5); + m_realTimeOffsetMilliseconds = timeInSeconds * 1000.0; +} + +void DurationInterface::SetScoreTimeTiedDuration(double scoreTime) +{ + m_scoreTimeTiedDuration = scoreTime; +} + +double DurationInterface::GetScoreTimeOnset() const +{ + return m_scoreTimeOnset; +} + +double DurationInterface::GetRealTimeOnsetMilliseconds() const +{ + return m_realTimeOnsetMilliseconds; +} + +double DurationInterface::GetScoreTimeOffset() const +{ + return m_scoreTimeOffset; +} + +double DurationInterface::GetRealTimeOffsetMilliseconds() const +{ + return m_realTimeOffsetMilliseconds; +} + +double DurationInterface::GetScoreTimeTiedDuration() const +{ + return m_scoreTimeTiedDuration; +} + +double DurationInterface::GetScoreTimeDuration() const +{ + return this->GetScoreTimeOffset() - this->GetScoreTimeOnset(); +} + +//---------------------------------------------------------------------------- +// Interface pseudo functor (redirected) +//---------------------------------------------------------------------------- + +int DurationInterface::InterfaceGenerateTimemap(FunctorParams *functorParams, Object *object) +{ + GenerateTimemapParams *params = vrv_params_cast(functorParams); + assert(params); + + double realTimeStart = params->m_realTimeOffsetMilliseconds + this->GetRealTimeOnsetMilliseconds(); + double scoreTimeStart = params->m_scoreTimeOffset + this->GetScoreTimeOnset(); + + double realTimeEnd = params->m_realTimeOffsetMilliseconds + this->GetRealTimeOffsetMilliseconds(); + double scoreTimeEnd = params->m_scoreTimeOffset + this->GetScoreTimeOffset(); + + bool isRest = (object->Is(REST)); + + TimemapEntry startEntry; + if (params->m_timemap.count(realTimeStart) > 0) startEntry = params->m_timemap.at(realTimeStart); + + // Should check if value for realTimeStart already exists and if so, then + // ensure that it is equal to scoreTimeStart: + startEntry.qstamp = scoreTimeStart; + + // Store the element ID in list to turn on at given time - note or rest + if (!isRest) startEntry.notesOn.push_back(object->GetUuid()); + if (isRest) startEntry.restsOn.push_back(object->GetUuid()); + + TimemapEntry endEntry; + if (params->m_timemap.count(realTimeEnd) > 0) endEntry = params->m_timemap.at(realTimeEnd); + + // Should check if value for realTimeEnd already exists and if so, then + // ensure that it is equal to scoreTimeEnd: + endEntry.qstamp = scoreTimeEnd; + + // Store the element ID in list to turn off at given time - notes or rest + if (!isRest) endEntry.notesOff.push_back(object->GetUuid()); + if (isRest) endEntry.restsOff.push_back(object->GetUuid()); + + startEntry.tempo = params->m_currentTempo; + + // Update the timemap + params->m_timemap[realTimeStart] = startEntry; + params->m_timemap[realTimeEnd] = endEntry; + + return FUNCTOR_SIBLINGS; +} + } // namespace vrv diff --git a/src/layerelement.cpp b/src/layerelement.cpp index e1fdc978a16..9867c23c4cf 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -2406,6 +2406,15 @@ int LayerElement::CalcOnsetOffset(FunctorParams *functorParams) incrementScoreTime = incrementScoreTime / (DUR_MAX / DURATION_4); params->m_currentScoreTime += incrementScoreTime; params->m_currentRealTimeSeconds += incrementScoreTime * 60.0 / params->m_currentTempo; + // For rests to be possibly added to the timemap + if (element->Is(REST)) { + Rest *rest = vrv_cast(element); + double realTimeIncrementSeconds = incrementScoreTime * 60.0 / params->m_currentTempo; + rest->SetScoreTimeOnset(params->m_currentScoreTime); + rest->SetRealTimeOnsetSeconds(params->m_currentRealTimeSeconds); + rest->SetScoreTimeOffset(params->m_currentScoreTime + incrementScoreTime); + rest->SetRealTimeOffsetSeconds(params->m_currentRealTimeSeconds + realTimeIncrementSeconds); + } } else if (element->Is(NOTE)) { Note *note = vrv_cast(element); diff --git a/src/note.cpp b/src/note.cpp index a1f791e82af..222d4b9d233 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -117,12 +117,6 @@ void Note::Reset() m_drawingLoc = 0; m_flippedNotehead = false; - - m_scoreTimeOnset = 0.0; - m_scoreTimeOffset = 0.0; - m_realTimeOnsetMilliseconds = 0; - m_realTimeOffsetMilliseconds = 0; - m_scoreTimeTiedDuration = 0.0; } bool Note::IsSupportedChild(Object *child) @@ -554,33 +548,6 @@ bool Note::IsEnharmonicWith(Note *note) return (this->GetMIDIPitch() == note->GetMIDIPitch()); } -void Note::SetScoreTimeOnset(double scoreTime) -{ - m_scoreTimeOnset = scoreTime; -} - -void Note::SetRealTimeOnsetSeconds(double timeInSeconds) -{ - // m_realTimeOnsetMilliseconds = int(timeInSeconds * 1000.0 + 0.5); - m_realTimeOnsetMilliseconds = timeInSeconds * 1000.0; -} - -void Note::SetScoreTimeOffset(double scoreTime) -{ - m_scoreTimeOffset = scoreTime; -} - -void Note::SetRealTimeOffsetSeconds(double timeInSeconds) -{ - // m_realTimeOffsetMilliseconds = int(timeInSeconds * 1000.0 + 0.5); - m_realTimeOffsetMilliseconds = timeInSeconds * 1000.0; -} - -void Note::SetScoreTimeTiedDuration(double scoreTime) -{ - m_scoreTimeTiedDuration = scoreTime; -} - int Note::GetMIDIPitch(const int shift) { int pitch = 0; @@ -624,36 +591,6 @@ int Note::GetMIDIPitch(const int shift) return pitch + shift; } -double Note::GetScoreTimeOnset() const -{ - return m_scoreTimeOnset; -} - -double Note::GetRealTimeOnsetMilliseconds() const -{ - return m_realTimeOnsetMilliseconds; -} - -double Note::GetScoreTimeOffset() const -{ - return m_scoreTimeOffset; -} - -double Note::GetRealTimeOffsetMilliseconds() const -{ - return m_realTimeOffsetMilliseconds; -} - -double Note::GetScoreTimeTiedDuration() const -{ - return m_scoreTimeTiedDuration; -} - -double Note::GetScoreTimeDuration() const -{ - return this->GetScoreTimeOffset() - this->GetScoreTimeOnset(); -} - int Note::GetChromaticAlteration() { Accid *accid = this->GetDrawingAccid(); @@ -1457,35 +1394,10 @@ int Note::GenerateMIDI(FunctorParams *functorParams) int Note::GenerateTimemap(FunctorParams *functorParams) { - GenerateTimemapParams *params = vrv_params_cast(functorParams); - assert(params); - Note *note = vrv_cast(this->ThisOrSameasAsLink()); assert(note); - double realTimeStart = params->m_realTimeOffsetMilliseconds + note->GetRealTimeOnsetMilliseconds(); - double scoreTimeStart = params->m_scoreTimeOffset + note->GetScoreTimeOnset(); - - double realTimeEnd = params->m_realTimeOffsetMilliseconds + note->GetRealTimeOffsetMilliseconds(); - double scoreTimeEnd = params->m_scoreTimeOffset + note->GetScoreTimeOffset(); - - // Should check if value for realTimeStart already exists and if so, then - // ensure that it is equal to scoreTimeStart: - params->realTimeToScoreTime[realTimeStart] = scoreTimeStart; - - // Store the element ID in list to turn on at given time. - params->realTimeToOnElements[realTimeStart].push_back(this->GetUuid()); - - // Should check if value for realTimeEnd already exists and if so, then - // ensure that it is equal to scoreTimeEnd: - params->realTimeToScoreTime[realTimeEnd] = scoreTimeEnd; - - // Store the element ID in list to turn off at given time. - params->realTimeToOffElements[realTimeEnd].push_back(this->GetUuid()); - - params->realTimeToTempo[realTimeStart] = params->m_currentTempo; - - return FUNCTOR_SIBLINGS; + return note->InterfaceGenerateTimemap(functorParams, note); } int Note::Transpose(FunctorParams *functorParams) diff --git a/src/rest.cpp b/src/rest.cpp index 8c997932944..45a79c21152 100644 --- a/src/rest.cpp +++ b/src/rest.cpp @@ -732,4 +732,12 @@ int Rest::Transpose(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } +int Rest::GenerateTimemap(FunctorParams *functorParams) +{ + GenerateTimemapParams *params = vrv_params_cast(functorParams); + assert(params); + + return this->InterfaceGenerateTimemap(functorParams, this); +} + } // namespace vrv From 3ed7876ba7499f277795f119f4943254e1ea18b6 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Thu, 27 Jan 2022 22:15:33 +0100 Subject: [PATCH 160/403] Add parameters to Toolkit::RenderToTimemap and use jsonxx for the timemap generation --- emscripten/verovio-proxy.js | 6 +- include/vrv/doc.h | 5 +- include/vrv/functorparams.h | 30 ++++++--- include/vrv/toolkit.h | 6 +- src/doc.cpp | 130 ++++++++++++++++-------------------- src/measure.cpp | 16 +++++ src/toolkit.cpp | 28 ++++++-- 7 files changed, 121 insertions(+), 100 deletions(-) diff --git a/emscripten/verovio-proxy.js b/emscripten/verovio-proxy.js index 481f19b2d15..6f585983949 100644 --- a/emscripten/verovio-proxy.js +++ b/emscripten/verovio-proxy.js @@ -97,7 +97,7 @@ verovio.vrvToolkit.renderToPAE = Module.cwrap( 'vrvToolkit_renderToPAE', 'string verovio.vrvToolkit.renderToSVG = Module.cwrap( 'vrvToolkit_renderToSVG', 'string', ['number', 'number', 'string'] ); // char *renderToTimemap(Toolkit *ic) -verovio.vrvToolkit.renderToTimemap = Module.cwrap( 'vrvToolkit_renderToTimemap', 'string', ['number'] ); +verovio.vrvToolkit.renderToTimemap = Module.cwrap( 'vrvToolkit_renderToTimemap', 'string', ['number', 'string'] ); // void resetXmlIdSeed(Toolkit *ic, int seed) verovio.vrvToolkit.resetXmlIdSeed = Module.cwrap( 'vrvToolkit_resetXmlIdSeed', null, ['number', 'number'] ); @@ -295,9 +295,9 @@ verovio.toolkit.prototype.renderToSVG = function ( pageNo, options ) return verovio.vrvToolkit.renderToSVG( this.ptr, pageNo, JSON.stringify( options ) ); }; -verovio.toolkit.prototype.renderToTimemap = function () +verovio.toolkit.prototype.renderToTimemap = function ( options = {}) { - return JSON.parse( verovio.vrvToolkit.renderToTimemap( this.ptr ) ); + return JSON.parse( verovio.vrvToolkit.renderToTimemap( this.ptr, JSON.stringify( options ) ) ); }; verovio.toolkit.prototype.resetXmlIdSeed = function ( seed ) diff --git a/include/vrv/doc.h b/include/vrv/doc.h index 84fdc82194e..7e9032d1c9a 100644 --- a/include/vrv/doc.h +++ b/include/vrv/doc.h @@ -222,10 +222,7 @@ class Doc : public Object { * Extract a timemap from the document to a JSON string. * Run trough all the layers and fill the timemap file content. */ - bool ExportTimemap(std::string &output); - void PrepareJsonTimemap(std::string &output, std::map &realTimeToScoreTime, - std::map> &realTimeToOnElements, - std::map> &realTimeToOffElements, std::map &realTimeToTempo); + bool ExportTimemap(std::string &output, bool includeRests, bool includeMeasures); /** * Extract music features to JSON string. diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 307c0111b8e..0088f2cfaa9 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1626,13 +1626,24 @@ class GenerateMIDIParams : public FunctorParams { //---------------------------------------------------------------------------- /** - * member 0: mapping of real times to score times - * member 1: mapping of real times to elements which should be highlighted at time - * member 2: mapping of real times to elements which should be unhighlighted at time - * member 3: mapping of real times to tempos - * member 4: Score time from the start of the piece to previous barline in quarter notes - * member 5: Real time from the start of the piece to previous barline in ms - * member 6: Currently active tempo + * Helper struct to store timemap entries + */ +struct TimemapEntry { + double tempo = -1000.0; + double qstamp; + std::vector notesOn; + std::vector notesOff; + std::vector restsOn; + std::vector restsOff; + std::string measureOn; +}; + +/** + * member 0: mapping of real times with TimemapEntry + * member 1: Score time from the start of the piece to previous barline in quarter notes + * member 2: Real time from the start of the piece to previous barline in ms + * member 3: Currently active tempo + * member 4: The functor for redirection **/ class GenerateTimemapParams : public FunctorParams { @@ -1644,10 +1655,7 @@ class GenerateTimemapParams : public FunctorParams { m_currentTempo = 120.0; m_functor = functor; } - std::map realTimeToScoreTime; - std::map> realTimeToOnElements; - std::map> realTimeToOffElements; - std::map realTimeToTempo; + std::map m_timemap; double m_scoreTimeOffset; double m_realTimeOffsetMilliseconds; double m_currentTempo; diff --git a/include/vrv/toolkit.h b/include/vrv/toolkit.h index 3734f912456..18d38e7919b 100644 --- a/include/vrv/toolkit.h +++ b/include/vrv/toolkit.h @@ -380,9 +380,10 @@ class Toolkit { /** * Render a document to a timemap * + * @param jsonOptions A stringified JSON objects with the timemap options * @return The timemap as a string */ - std::string RenderToTimemap(); + std::string RenderToTimemap(const std::string &jsonOptions = ""); /** * Render a document to timemap and save it to the file @@ -390,9 +391,10 @@ class Toolkit { * This methods is not available in the JavaScript version of the toolkit. * * @param @filename The output filename + * @param jsonOptions A stringified JSON objects with the timemap options * @return True if the file was successfully written */ - bool RenderToTimemapFile(const std::string &filename); + bool RenderToTimemapFile(const std::string &filename, const std::string &jsonOptions = ""); //@} diff --git a/src/doc.cpp b/src/doc.cpp index f266071b504..0c1c8da42d7 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -395,7 +395,7 @@ void Doc::ExportMIDI(smf::MidiFile *midiFile) } } -bool Doc::ExportTimemap(std::string &output) +bool Doc::ExportTimemap(std::string &output, bool includeRests, bool includeMeasures) { if (!Doc::HasMidiTimemap()) { // generate MIDI timemap before progressing @@ -410,8 +410,62 @@ bool Doc::ExportTimemap(std::string &output) GenerateTimemapParams generateTimemapParams(&generateTimemap); this->Process(&generateTimemap, &generateTimemapParams); - PrepareJsonTimemap(output, generateTimemapParams.realTimeToScoreTime, generateTimemapParams.realTimeToOnElements, - generateTimemapParams.realTimeToOffElements, generateTimemapParams.realTimeToTempo); + includeRests = true; + includeMeasures = true; + + double currentTempo = -1000.0; + double newTempo; + + jsonxx::Array timemap; + + for (auto &[tstamp, entry] : generateTimemapParams.m_timemap) { + jsonxx::Object o; + o << "tstamp" << tstamp; + o << "qstamp" << entry.qstamp; + + // on / off + if (!entry.notesOn.empty()) { + jsonxx::Array notesOn; + for (auto note : entry.notesOn) notesOn << note; + o << "on" << notesOn; + } + if (!entry.notesOff.empty()) { + jsonxx::Array notesOff; + for (auto note : entry.notesOff) notesOff << note; + o << "off" << notesOff; + } + + // restsOn / restsOff + if (includeRests) { + if (!entry.restsOn.empty()) { + jsonxx::Array restsOn; + for (auto rest : entry.restsOn) restsOn << rest; + o << "restsOn" << restsOn; + } + if (!entry.restsOff.empty()) { + jsonxx::Array restsOff; + for (auto rest : entry.restsOff) restsOff << rest; + o << "restsOff" << restsOff; + } + } + + // tempo + if (entry.tempo != -1000.0) { + newTempo = entry.tempo; + if (newTempo != currentTempo) { + currentTempo = newTempo; + o << "tempo" << std::to_string(currentTempo); + } + } + + // measureOn + if (includeMeasures && !entry.measureOn.empty()) { + o << "measureOn" << entry.measureOn; + } + + timemap << o; + } + output = timemap.json(); return true; } @@ -436,76 +490,6 @@ bool Doc::ExportFeatures(std::string &output, const std::string &options) return true; } -void Doc::PrepareJsonTimemap(std::string &output, std::map &realTimeToScoreTime, - std::map> &realTimeToOnElements, - std::map> &realTimeToOffElements, std::map &realTimeToTempo) -{ - - double currentTempo = -1000.0; - double newTempo; - int mapsize = (int)realTimeToScoreTime.size(); - output = ""; - output.reserve(mapsize * 100); // Estimate 100 characters for each entry. - output += "[\n"; - auto lastit = realTimeToScoreTime.end(); - lastit--; - for (auto it = realTimeToScoreTime.begin(); it != realTimeToScoreTime.end(); ++it) { - output += "\t{\n"; - output += "\t\t\"tstamp\":\t"; - output += std::to_string(it->first); - output += ",\n"; - output += "\t\t\"qstamp\":\t"; - output += std::to_string(it->second); - - auto ittempo = realTimeToTempo.find(it->first); - if (ittempo != realTimeToTempo.end()) { - newTempo = ittempo->second; - if (newTempo != currentTempo) { - currentTempo = newTempo; - output += ",\n\t\t\"tempo\":\t"; - output += std::to_string(currentTempo); - } - } - - auto iton = realTimeToOnElements.find(it->first); - if (iton != realTimeToOnElements.end()) { - output += ",\n\t\t\"on\":\t["; - for (int ion = 0; ion < (int)iton->second.size(); ++ion) { - output += "\""; - output += iton->second[ion]; - output += "\""; - if (ion < (int)iton->second.size() - 1) { - output += ", "; - } - } - output += "]"; - } - - auto itoff = realTimeToOffElements.find(it->first); - if (itoff != realTimeToOffElements.end()) { - output += ",\n\t\t\"off\":\t["; - for (int ioff = 0; ioff < (int)itoff->second.size(); ++ioff) { - output += "\""; - output += itoff->second[ioff]; - output += "\""; - if (ioff < (int)itoff->second.size() - 1) { - output += ", "; - } - } - output += "]"; - } - - output += "\n\t}"; - if (it == lastit) { - output += "\n"; - } - else { - output += ",\n"; - } - } - output += "]\n"; -} - void Doc::PrepareDrawing() { if (m_drawingPreparationDone) { diff --git a/src/measure.cpp b/src/measure.cpp index a18ffca3372..dca7d7155e1 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -1553,6 +1553,22 @@ int Measure::GenerateTimemap(FunctorParams *functorParams) params->m_realTimeOffsetMilliseconds = m_realTimeOffsetMilliseconds.back(); params->m_currentTempo = m_currentTempo; + double scoreTimeStart = params->m_scoreTimeOffset; + double realTimeStart = params->m_realTimeOffsetMilliseconds; + + TimemapEntry startEntry; + if (params->m_timemap.count(realTimeStart) > 0) startEntry = params->m_timemap.at(realTimeStart); + + // Should check if value for realTimeStart already exists and if so, then + // ensure that it is equal to scoreTimeStart: + startEntry.qstamp = scoreTimeStart; + + // Add the measureOn + startEntry.measureOn = this->GetUuid(); + + // Update the timemap + params->m_timemap[realTimeStart] = startEntry; + return FUNCTOR_CONTINUE; } diff --git a/src/toolkit.cpp b/src/toolkit.cpp index d482e7360dd..d81cce1c301 100644 --- a/src/toolkit.cpp +++ b/src/toolkit.cpp @@ -1399,12 +1399,29 @@ bool Toolkit::RenderToPAEFile(const std::string &filename) return true; } -std::string Toolkit::RenderToTimemap() +std::string Toolkit::RenderToTimemap(const std::string &jsonOptions) { + bool includeMeasures = true; + bool includeRests = true; + + jsonxx::Object json; + + // Read JSON options if not empty + if (!jsonOptions.empty()) { + if (!json.parse(jsonOptions)) { + LogWarning("Cannot parse JSON std::string. Using default options."); + } + else { + if (json.has("includeMeasures")) + includeMeasures = json.get("includeMeasures"); + if (json.has("includeRests")) includeRests = json.get("includeRests"); + } + } + this->ResetLogBuffer(); std::string output; - m_doc.ExportTimemap(output); + m_doc.ExportTimemap(output, includeRests, includeMeasures); return output; } @@ -1476,12 +1493,9 @@ bool Toolkit::RenderToMIDIFile(const std::string &filename) return true; } -bool Toolkit::RenderToTimemapFile(const std::string &filename) +bool Toolkit::RenderToTimemapFile(const std::string &filename, const std::string &jsonOptions) { - this->ResetLogBuffer(); - - std::string outputString; - m_doc.ExportTimemap(outputString); + std::string outputString = this->RenderToTimemap(jsonOptions); std::ofstream output(filename.c_str()); if (!output.is_open()) { From de3ef2f5d82ec55e38075a3ac5b1a90d1f0b199c Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Thu, 27 Jan 2022 22:28:49 +0100 Subject: [PATCH 161/403] Remove parameters overwrite --- src/doc.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/doc.cpp b/src/doc.cpp index 0c1c8da42d7..cf816616616 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -410,9 +410,6 @@ bool Doc::ExportTimemap(std::string &output, bool includeRests, bool includeMeas GenerateTimemapParams generateTimemapParams(&generateTimemap); this->Process(&generateTimemap, &generateTimemapParams); - includeRests = true; - includeMeasures = true; - double currentTempo = -1000.0; double newTempo; From 67782e485ca72d5228c3e605e915ceda67194988 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Thu, 27 Jan 2022 22:40:39 +0100 Subject: [PATCH 162/403] Fix order for rests (add values before incrementation) --- src/layerelement.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 9867c23c4cf..715aac25a97 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -2404,8 +2404,6 @@ int LayerElement::CalcOnsetOffset(FunctorParams *functorParams) incrementScoreTime = element->GetAlignmentDuration( params->m_currentMensur, params->m_currentMeterSig, true, params->m_notationType); incrementScoreTime = incrementScoreTime / (DUR_MAX / DURATION_4); - params->m_currentScoreTime += incrementScoreTime; - params->m_currentRealTimeSeconds += incrementScoreTime * 60.0 / params->m_currentTempo; // For rests to be possibly added to the timemap if (element->Is(REST)) { Rest *rest = vrv_cast(element); @@ -2415,6 +2413,8 @@ int LayerElement::CalcOnsetOffset(FunctorParams *functorParams) rest->SetScoreTimeOffset(params->m_currentScoreTime + incrementScoreTime); rest->SetRealTimeOffsetSeconds(params->m_currentRealTimeSeconds + realTimeIncrementSeconds); } + params->m_currentScoreTime += incrementScoreTime; + params->m_currentRealTimeSeconds += incrementScoreTime * 60.0 / params->m_currentTempo; } else if (element->Is(NOTE)) { Note *note = vrv_cast(element); From d2a7a1b9431a34f642f3a4078c8a6972831a7d58 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 28 Jan 2022 08:38:35 +0100 Subject: [PATCH 163/403] Remove unused variable --- src/rest.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/rest.cpp b/src/rest.cpp index 45a79c21152..02b4774de9b 100644 --- a/src/rest.cpp +++ b/src/rest.cpp @@ -734,9 +734,6 @@ int Rest::Transpose(FunctorParams *functorParams) int Rest::GenerateTimemap(FunctorParams *functorParams) { - GenerateTimemapParams *params = vrv_params_cast(functorParams); - assert(params); - return this->InterfaceGenerateTimemap(functorParams, this); } From 2c16bb8e247b2ad2df8e8b5305f568956ca6294a Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 28 Jan 2022 08:58:02 +0100 Subject: [PATCH 164/403] Adjust Toolkit::GetElementsAtTime to include rests and measure --- include/vrv/comparison.h | 13 +++++++------ src/toolkit.cpp | 26 +++++++++++++++++--------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/include/vrv/comparison.h b/include/vrv/comparison.h index ae0b46c723e..fce69e014d3 100644 --- a/include/vrv/comparison.h +++ b/include/vrv/comparison.h @@ -454,25 +454,26 @@ class MeasureOnsetOffsetComparison : public ClassIdComparison { }; //---------------------------------------------------------------------------- -// NoteOnsetOffsetComparison +// NoteOrRestOnsetOffsetComparison //---------------------------------------------------------------------------- /** * This class evaluates if the object is a note being played at the given time. */ -class NoteOnsetOffsetComparison : public ClassIdComparison { +class NoteOrRestOnsetOffsetComparison : public ClassIdsComparison { public: - NoteOnsetOffsetComparison(const int time) : ClassIdComparison(NOTE) { m_time = time; } + NoteOrRestOnsetOffsetComparison(const int time) : ClassIdsComparison({ NOTE, REST }) { m_time = time; } void SetTime(int time) { m_time = time; } bool operator()(Object *object) override { if (!MatchesType(object)) return false; - Note *note = vrv_cast(object); - assert(note); - return ((m_time >= note->GetRealTimeOnsetMilliseconds()) && (m_time <= note->GetRealTimeOffsetMilliseconds())); + DurationInterface *interface = object->GetDurationInterface(); + assert(interface); + return ((m_time >= interface->GetRealTimeOnsetMilliseconds()) + && (m_time <= interface->GetRealTimeOffsetMilliseconds())); } private: diff --git a/src/toolkit.cpp b/src/toolkit.cpp index d81cce1c301..4a4ec89ad10 100644 --- a/src/toolkit.cpp +++ b/src/toolkit.cpp @@ -1432,6 +1432,7 @@ std::string Toolkit::GetElementsAtTime(int millisec) jsonxx::Object o; jsonxx::Array noteArray; jsonxx::Array chordArray; + jsonxx::Array restArray; // Here we need to check that the midi timemap is done if (!m_doc.HasMidiTimemap()) { @@ -1454,19 +1455,24 @@ std::string Toolkit::GetElementsAtTime(int millisec) Page *page = dynamic_cast(measure->GetFirstAncestor(PAGE)); if (page) pageNo = page->GetIdx() + 1; - NoteOnsetOffsetComparison matchNoteTime(millisec - measureTimeOffset); - ListOfObjects notes; + NoteOrRestOnsetOffsetComparison matchTime(millisec - measureTimeOffset); + ListOfObjects notesOrRests; ListOfObjects chords; - measure->FindAllDescendantsByComparison(¬es, &matchNoteTime); + measure->FindAllDescendantsByComparison(¬esOrRests, &matchTime); // Fill the JSON object - for (auto const item : notes) { - noteArray << item->GetUuid(); - Note *note = vrv_cast(item); - assert(note); - Chord *chord = note->IsChordTone(); - if (chord) chords.push_back(chord); + for (auto const item : notesOrRests) { + if (item->Is(NOTE)) { + noteArray << item->GetUuid(); + Note *note = vrv_cast(item); + assert(note); + Chord *chord = note->IsChordTone(); + if (chord) chords.push_back(chord); + } + else if (item->Is(REST)) { + restArray << item->GetUuid(); + } } chords.unique(); for (auto const item : chords) { @@ -1475,7 +1481,9 @@ std::string Toolkit::GetElementsAtTime(int millisec) o << "notes" << noteArray; o << "chords" << chordArray; + o << "rests" << restArray; o << "page" << pageNo; + o << "measure" << measure->GetUuid(); return o.json(); } From 96f4bdbafd77ce489ac130283e3cc85043862221 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 28 Jan 2022 10:46:56 +0100 Subject: [PATCH 165/403] Fix typos --- include/vrv/page.h | 2 +- src/system.cpp | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/include/vrv/page.h b/include/vrv/page.h index 7d754cef5cf..d139609bd66 100644 --- a/include/vrv/page.h +++ b/include/vrv/page.h @@ -100,7 +100,7 @@ class Page : public Object { void LayOutHorizontally(); /** - * Layout out the measures horizontally using the cached values. + * Lay out the measures horizontally using the cached values. * This should be done in preparation of cast-off which is based on measure positioning. * The content of the measures is not laid out and keeps previously cached positioning. */ diff --git a/src/system.cpp b/src/system.cpp index f7d4ab52a41..24889e0339a 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -1003,8 +1003,6 @@ int System::CastOffPages(FunctorParams *functorParams) currentShift += params->m_pgHead2Height + params->m_pgFoot2Height; } - // LogMessage("System: %d", this->GetHeight()); - const int systemMaxPerPage = params->m_doc->GetOptions()->m_systemMaxPerPage.GetValue(); const int childCount = params->m_currentPage->GetChildCount(); if ((systemMaxPerPage && systemMaxPerPage == childCount) From cb0ad5f87ccd010423ed1162e5185e893a2b3608 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sat, 29 Jan 2022 13:53:56 +0100 Subject: [PATCH 166/403] Remove DurationInterface GenerateTimemap pseudo functor --- include/vrv/durationinterface.h | 5 ---- src/durationinterface.cpp | 44 --------------------------------- 2 files changed, 49 deletions(-) diff --git a/include/vrv/durationinterface.h b/include/vrv/durationinterface.h index 324643b6056..d58a72c0bf6 100644 --- a/include/vrv/durationinterface.h +++ b/include/vrv/durationinterface.h @@ -137,11 +137,6 @@ class DurationInterface : public Interface, * classes explicitely. See FloatingObject::FillStaffCurrentTimeSpanning for an example. */ - /** - * See Object::GenerateTimemap - */ - virtual int InterfaceGenerateTimemap(FunctorParams *functorParams, Object *object); - private: /** * Calculate the actual duration => translate mensural values diff --git a/src/durationinterface.cpp b/src/durationinterface.cpp index 7f8fae8b122..8e8b2d9ea1e 100644 --- a/src/durationinterface.cpp +++ b/src/durationinterface.cpp @@ -303,48 +303,4 @@ double DurationInterface::GetScoreTimeDuration() const // Interface pseudo functor (redirected) //---------------------------------------------------------------------------- -int DurationInterface::InterfaceGenerateTimemap(FunctorParams *functorParams, Object *object) -{ - GenerateTimemapParams *params = vrv_params_cast(functorParams); - assert(params); - - double realTimeStart = params->m_realTimeOffsetMilliseconds + this->GetRealTimeOnsetMilliseconds(); - double scoreTimeStart = params->m_scoreTimeOffset + this->GetScoreTimeOnset(); - - double realTimeEnd = params->m_realTimeOffsetMilliseconds + this->GetRealTimeOffsetMilliseconds(); - double scoreTimeEnd = params->m_scoreTimeOffset + this->GetScoreTimeOffset(); - - bool isRest = (object->Is(REST)); - - TimemapEntry startEntry; - if (params->m_timemap.count(realTimeStart) > 0) startEntry = params->m_timemap.at(realTimeStart); - - // Should check if value for realTimeStart already exists and if so, then - // ensure that it is equal to scoreTimeStart: - startEntry.qstamp = scoreTimeStart; - - // Store the element ID in list to turn on at given time - note or rest - if (!isRest) startEntry.notesOn.push_back(object->GetUuid()); - if (isRest) startEntry.restsOn.push_back(object->GetUuid()); - - TimemapEntry endEntry; - if (params->m_timemap.count(realTimeEnd) > 0) endEntry = params->m_timemap.at(realTimeEnd); - - // Should check if value for realTimeEnd already exists and if so, then - // ensure that it is equal to scoreTimeEnd: - endEntry.qstamp = scoreTimeEnd; - - // Store the element ID in list to turn off at given time - notes or rest - if (!isRest) endEntry.notesOff.push_back(object->GetUuid()); - if (isRest) endEntry.restsOff.push_back(object->GetUuid()); - - startEntry.tempo = params->m_currentTempo; - - // Update the timemap - params->m_timemap[realTimeStart] = startEntry; - params->m_timemap[realTimeEnd] = endEntry; - - return FUNCTOR_SIBLINGS; -} - } // namespace vrv From 7bd6fa666c0b7b3ce7ddd4bd25062ce98d6c8219 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sat, 29 Jan 2022 13:54:43 +0100 Subject: [PATCH 167/403] Change GenerateTimemapParams to use Timemap class --- include/vrv/functorparams.h | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 606fe040643..03617319926 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -57,6 +57,7 @@ class StemmedDrawingInterface; class Syl; class System; class SystemAligner; +class Timemap; class Transposer; class TupletNum; class Turn; @@ -1631,19 +1632,6 @@ class GenerateMIDIParams : public FunctorParams { // GenerateTimemapParams //---------------------------------------------------------------------------- -/** - * Helper struct to store timemap entries - */ -struct TimemapEntry { - double tempo = -1000.0; - double qstamp; - std::vector notesOn; - std::vector notesOff; - std::vector restsOn; - std::vector restsOff; - std::string measureOn; -}; - /** * member 0: mapping of real times with TimemapEntry * member 1: Score time from the start of the piece to previous barline in quarter notes @@ -1654,17 +1642,18 @@ struct TimemapEntry { class GenerateTimemapParams : public FunctorParams { public: - GenerateTimemapParams(Functor *functor) + GenerateTimemapParams(Timemap *timemap, Functor *functor) { m_scoreTimeOffset = 0.0; m_realTimeOffsetMilliseconds = 0; m_currentTempo = 120.0; + m_timemap = timemap; m_functor = functor; } - std::map m_timemap; double m_scoreTimeOffset; double m_realTimeOffsetMilliseconds; double m_currentTempo; + Timemap *m_timemap; Functor *m_functor; }; From 070895b892aa63c4e91692fbe58fa7eedc572eb0 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sat, 29 Jan 2022 13:55:38 +0100 Subject: [PATCH 168/403] Add Timemap class --- Verovio.xcodeproj/project.pbxproj | 16 +++ include/vrv/timemap.h | 79 +++++++++++++ src/timemap.cpp | 177 ++++++++++++++++++++++++++++++ 3 files changed, 272 insertions(+) create mode 100644 include/vrv/timemap.h create mode 100644 src/timemap.cpp diff --git a/Verovio.xcodeproj/project.pbxproj b/Verovio.xcodeproj/project.pbxproj index b4c2e36b470..e905a8ea6d3 100644 --- a/Verovio.xcodeproj/project.pbxproj +++ b/Verovio.xcodeproj/project.pbxproj @@ -648,6 +648,12 @@ 4DCB7AA426D3C9600047F01D /* crc.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DCB7AA226D3C9600047F01D /* crc.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4DD11DC42240E78B00A405D8 /* c_wrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DD11DC22240E78B00A405D8 /* c_wrapper.cpp */; }; 4DD11DC52240E78B00A405D8 /* c_wrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DD11DC32240E78B00A405D8 /* c_wrapper.h */; }; + 4DD7C0FC27A55CEA00B9C017 /* timemap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DD7C0FB27A55CEA00B9C017 /* timemap.cpp */; }; + 4DD7C0FD27A55CEA00B9C017 /* timemap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DD7C0FB27A55CEA00B9C017 /* timemap.cpp */; }; + 4DD7C0FF27A55CFD00B9C017 /* timemap.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DD7C0FE27A55CFD00B9C017 /* timemap.h */; }; + 4DD7C10027A55CFD00B9C017 /* timemap.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DD7C0FE27A55CFD00B9C017 /* timemap.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4DD7C10127A5650600B9C017 /* timemap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DD7C0FB27A55CEA00B9C017 /* timemap.cpp */; }; + 4DD7C10227A5650600B9C017 /* timemap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DD7C0FB27A55CEA00B9C017 /* timemap.cpp */; }; 4DDBBB571C7AE43E00054AFF /* hairpin.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DDBBB551C7AE43E00054AFF /* hairpin.h */; }; 4DDBBB581C7AE43E00054AFF /* dynam.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DDBBB561C7AE43E00054AFF /* dynam.h */; }; 4DDBBB5B1C7AE45900054AFF /* dynam.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DDBBB591C7AE45900054AFF /* dynam.cpp */; }; @@ -1547,6 +1553,8 @@ 4DCB7AA226D3C9600047F01D /* crc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = crc.h; path = include/crc/crc.h; sourceTree = SOURCE_ROOT; }; 4DD11DC22240E78B00A405D8 /* c_wrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = c_wrapper.cpp; path = tools/c_wrapper.cpp; sourceTree = ""; }; 4DD11DC32240E78B00A405D8 /* c_wrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = c_wrapper.h; path = tools/c_wrapper.h; sourceTree = ""; }; + 4DD7C0FB27A55CEA00B9C017 /* timemap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = timemap.cpp; path = src/timemap.cpp; sourceTree = ""; }; + 4DD7C0FE27A55CFD00B9C017 /* timemap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = timemap.h; path = include/vrv/timemap.h; sourceTree = ""; }; 4DDBBB551C7AE43E00054AFF /* hairpin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hairpin.h; path = include/vrv/hairpin.h; sourceTree = ""; }; 4DDBBB561C7AE43E00054AFF /* dynam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dynam.h; path = include/vrv/dynam.h; sourceTree = ""; }; 4DDBBB591C7AE45900054AFF /* dynam.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dynam.cpp; path = src/dynam.cpp; sourceTree = ""; }; @@ -2210,6 +2218,8 @@ E79ADDC326BD1AE900527E4B /* runtimeclock.h */, 4D98CCDA25D26E3C00DC7A2C /* smufl.cpp */, 4D1D733B1A1D0390001E08F6 /* smufl.h */, + 4DD7C0FB27A55CEA00B9C017 /* timemap.cpp */, + 4DD7C0FE27A55CFD00B9C017 /* timemap.h */, 8F086EBF188539540037FD8E /* toolkit.cpp */, 8F59291618854BF800FE51AD /* toolkit.h */, 4DC3B9E4239E2ABE007F185E /* transposition.cpp */, @@ -2618,6 +2628,7 @@ 4D1BE7821C69434C0086DC0E /* MidiFile.h in Headers */, 4D9C53121B52E4AE0003C6EC /* core.h in Headers */, 4DEC4DD221C8295700D1D273 /* supplied.h in Headers */, + 4DD7C0FF27A55CFD00B9C017 /* timemap.h in Headers */, 4D1BD1B921908D78000D35B2 /* halfmrpt.h in Headers */, 4DF4407A1D3D085600152B7E /* functorparams.h in Headers */, 4DA0EADD22BB77AF00A7EBEB /* zone.h in Headers */, @@ -2709,6 +2720,7 @@ 4D79642726C167200026288B /* pagemilestone.h in Headers */, BB4C4B1C22A932CF001F6AF0 /* arpeg.h in Headers */, BB4C4B2A22A932CF001F6AF0 /* harm.h in Headers */, + 4DD7C10027A55CFD00B9C017 /* timemap.h in Headers */, BB4C4AAC22A932A0001F6AF0 /* svgdevicecontext.h in Headers */, BB4C4ADE22A932BC001F6AF0 /* add.h in Headers */, BB4C4B4C22A932D7001F6AF0 /* custos.h in Headers */, @@ -3066,6 +3078,7 @@ 4D1694071E3A44F300569BF4 /* iomusxml.cpp in Sources */, 4D7927D120ECCC6D0002A45D /* view_slur.cpp in Sources */, 4DF21D1322B3D17D009821DE /* ioabc.cpp in Sources */, + 4DD7C10127A5650600B9C017 /* timemap.cpp in Sources */, 4D1694081E3A44F300569BF4 /* iopae.cpp in Sources */, 4D1694091E3A44F300569BF4 /* atts_critapp.cpp in Sources */, 4D16940A1E3A44F300569BF4 /* fermata.cpp in Sources */, @@ -3323,6 +3336,7 @@ 4D5FA9111E16A93F00F3B919 /* boundingbox.cpp in Sources */, 4DC12A841F741110000440E9 /* pgfoot2.cpp in Sources */, 8F086EF9188539540037FD8E /* object.cpp in Sources */, + 4DD7C10227A5650600B9C017 /* timemap.cpp in Sources */, 8F086EFA188539540037FD8E /* page.cpp in Sources */, 8F086EFB188539540037FD8E /* pitchinterface.cpp in Sources */, BDEF9EC726725234008A3A47 /* caesura.cpp in Sources */, @@ -3495,6 +3509,7 @@ 4D4FCD141F54570E0009C455 /* staffdef.cpp in Sources */, 4DEC4D7C21C8048700D1D273 /* abbr.cpp in Sources */, 403BEFF9206C00FF00D022D5 /* beatrpt.cpp in Sources */, + 4DD7C0FC27A55CEA00B9C017 /* timemap.cpp in Sources */, 8F3DD33C18854B2E0051330C /* barline.cpp in Sources */, 4DB3D8D51F83D12B00B5FC2B /* tempo.cpp in Sources */, 4DEC4DA021C81E9400D1D273 /* orig.cpp in Sources */, @@ -3710,6 +3725,7 @@ BB4C4B9922A932E5001F6AF0 /* linkinginterface.cpp in Sources */, BB4C4A6A22A9321F001F6AF0 /* atts_externalsymbols.cpp in Sources */, BB4C4AAD22A932A6001F6AF0 /* io.cpp in Sources */, + 4DD7C0FD27A55CEA00B9C017 /* timemap.cpp in Sources */, BB4C4B2322A932CF001F6AF0 /* dynam.cpp in Sources */, BB4C4B6522A932D7001F6AF0 /* multirest.cpp in Sources */, BB4C4AB322A932A6001F6AF0 /* iohumdrum.cpp in Sources */, diff --git a/include/vrv/timemap.h b/include/vrv/timemap.h new file mode 100644 index 00000000000..dbd1f74d7a5 --- /dev/null +++ b/include/vrv/timemap.h @@ -0,0 +1,79 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: timemap.h +// Author: Laurent Pugin +// Created: 29/01/2022 +// Copyright (c) Authors and others. All rights reserved. +///////////////////////////////////////////////////////////////////////////// + +#ifndef __VRV_TIMEMAP_H__ +#define __VRV_TIMEMAP_H__ + +#include +#include +#include +#include + +//---------------------------------------------------------------------------- + +namespace vrv { + +class Object; +class GenerateTimemapParams; + +//---------------------------------------------------------------------------- +// TimemapEntry +//---------------------------------------------------------------------------- + +/** + * Helper struct to store timemap entries + */ +struct TimemapEntry { + double tempo = -1000.0; + double qstamp; + std::vector notesOn; + std::vector notesOff; + std::vector restsOn; + std::vector restsOff; + std::string measureOn; +}; + +//---------------------------------------------------------------------------- +// Timemap +//---------------------------------------------------------------------------- + +/** + * This class represents a clock to measure runtime. + */ +class Timemap { +public: + /** + * @name Constructors, destructors, and other standard methods + */ + ///@{ + Timemap(); + virtual ~Timemap(); + ///@} + + /** Resets the clock */ + void Reset(); + + void AddEntry(Object *object, GenerateTimemapParams *params); + + /** + * Write the current timemap to a JSON string + */ + void ToJson(std::string &output); + +private: + // +public: + // +private: + /** The time point at which the clock was started */ + std::map m_map; + +}; // class Timemap + +} // namespace vrv + +#endif // __VRV_RUNTIMECLOCK_H__ diff --git a/src/timemap.cpp b/src/timemap.cpp new file mode 100644 index 00000000000..255d88347a8 --- /dev/null +++ b/src/timemap.cpp @@ -0,0 +1,177 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: timemap.cpp +// Author: Laurent Pugin +// Created: 29/01/2022 +// Copyright (c) Authors and others. All rights reserved. +///////////////////////////////////////////////////////////////////////////// + +#include "timemap.h" + +//---------------------------------------------------------------------------- + +#include + +//---------------------------------------------------------------------------- + +#include "functorparams.h" +#include "measure.h" +#include "note.h" +#include "rest.h" +#include "vrv.h" + +namespace vrv { + +//---------------------------------------------------------------------------- +// Timemap +//---------------------------------------------------------------------------- + +Timemap::Timemap() +{ + this->Reset(); +} + +Timemap::~Timemap() {} + +void Timemap::Reset() {} + +void Timemap::AddEntry(Object *object, GenerateTimemapParams *params) +{ + assert(object); + assert(params); + + // It is a bit weird to have a timemap parameter, but we need it to call this method from the functor. + // Just make sure they are the same because below we use m_map (and not params->m_timemap) + assert(params->m_timemap == this); + + TimemapEntry emptyEntry; + + if (object->Is({ NOTE, REST })) { + DurationInterface *interface = object->GetDurationInterface(); + assert(interface); + + double realTimeStart = params->m_realTimeOffsetMilliseconds + interface->GetRealTimeOnsetMilliseconds(); + double scoreTimeStart = params->m_scoreTimeOffset + interface->GetScoreTimeOnset(); + + double realTimeEnd = params->m_realTimeOffsetMilliseconds + interface->GetRealTimeOffsetMilliseconds(); + double scoreTimeEnd = params->m_scoreTimeOffset + interface->GetScoreTimeOffset(); + + bool isRest = (object->Is(REST)); + + /*********** start values ***********/ + + if (m_map.count(realTimeStart) == 0) { + m_map[realTimeStart] = emptyEntry; + } + TimemapEntry *startEntry = &m_map.at(realTimeStart); + + // Should check if value for realTimeStart already exists and if so, then + // ensure that it is equal to scoreTimeStart: + startEntry->qstamp = scoreTimeStart; + + // Store the element ID in list to turn on at given time - note or rest + if (!isRest) startEntry->notesOn.push_back(object->GetUuid()); + if (isRest) startEntry->restsOn.push_back(object->GetUuid()); + + // Also add the tempo the + startEntry->tempo = params->m_currentTempo; + + /*********** end values ***********/ + + if (m_map.count(realTimeEnd) == 0) { + m_map[realTimeEnd] = emptyEntry; + } + TimemapEntry *endEntry = &m_map.at(realTimeEnd); + + // Should check if value for realTimeEnd already exists and if so, then + // ensure that it is equal to scoreTimeEnd: + endEntry->qstamp = scoreTimeEnd; + + // Store the element ID in list to turn off at given time - notes or rest + if (!isRest) endEntry->notesOff.push_back(object->GetUuid()); + if (isRest) endEntry->restsOff.push_back(object->GetUuid()); + } + else if (object->Is(MEASURE)) { + + Measure *measure = vrv_cast(object); + assert(measure); + + // Deal with repeated music later, for now get the last times. + double scoreTimeStart = params->m_scoreTimeOffset; + double realTimeStart = params->m_realTimeOffsetMilliseconds; + + if (m_map.count(realTimeStart) == 0) { + m_map[realTimeStart] = emptyEntry; + } + TimemapEntry *startEntry = &m_map.at(realTimeStart); + + // Should check if value for realTimeStart already exists and if so, then + // ensure that it is equal to scoreTimeStart: + startEntry->qstamp = scoreTimeStart; + + // Add the measureOn + startEntry->measureOn = measure->GetUuid(); + } +} + +void Timemap::ToJson(std::string &output) +{ + + bool includeRests = true; + bool includeMeasures = true; + + double currentTempo = -1000.0; + double newTempo; + + jsonxx::Array timemap; + + for (auto &[tstamp, entry] : m_map) { + jsonxx::Object o; + o << "tstamp" << tstamp; + o << "qstamp" << entry.qstamp; + + // on / off + if (!entry.notesOn.empty()) { + jsonxx::Array notesOn; + for (auto note : entry.notesOn) notesOn << note; + o << "on" << notesOn; + } + if (!entry.notesOff.empty()) { + jsonxx::Array notesOff; + for (auto note : entry.notesOff) notesOff << note; + o << "off" << notesOff; + } + + // restsOn / restsOff + if (includeRests) { + if (!entry.restsOn.empty()) { + jsonxx::Array restsOn; + for (auto rest : entry.restsOn) restsOn << rest; + o << "restsOn" << restsOn; + } + if (!entry.restsOff.empty()) { + jsonxx::Array restsOff; + for (auto rest : entry.restsOff) restsOff << rest; + o << "restsOff" << restsOff; + } + } + + // tempo + if (entry.tempo != -1000.0) { + newTempo = entry.tempo; + if (newTempo != currentTempo) { + currentTempo = newTempo; + o << "tempo" << std::to_string(currentTempo); + } + } + + // measureOn + if (includeMeasures && !entry.measureOn.empty()) { + o << "measureOn" << entry.measureOn; + } + + timemap << o; + } + output = timemap.json(); +} + +} // namespace vrv From 9dca0cb1eea9f5c83fd27a958c1b0ecca1210772 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sat, 29 Jan 2022 13:56:06 +0100 Subject: [PATCH 169/403] Use Timemap class in Doc::ExportToTimemap --- src/doc.cpp | 58 ++++------------------------------------------------- 1 file changed, 4 insertions(+), 54 deletions(-) diff --git a/src/doc.cpp b/src/doc.cpp index 7d7228ec61c..d0c2bdad6cf 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -55,6 +55,7 @@ #include "syllable.h" #include "system.h" #include "text.h" +#include "timemap.h" #include "timestamp.h" #include "transposition.h" #include "verse.h" @@ -406,63 +407,12 @@ bool Doc::ExportTimemap(std::string &output, bool includeRests, bool includeMeas output = ""; return false; } + Timemap timemap; Functor generateTimemap(&Object::GenerateTimemap); - GenerateTimemapParams generateTimemapParams(&generateTimemap); + GenerateTimemapParams generateTimemapParams(&timemap, &generateTimemap); this->Process(&generateTimemap, &generateTimemapParams); - double currentTempo = -1000.0; - double newTempo; - - jsonxx::Array timemap; - - for (auto &[tstamp, entry] : generateTimemapParams.m_timemap) { - jsonxx::Object o; - o << "tstamp" << tstamp; - o << "qstamp" << entry.qstamp; - - // on / off - if (!entry.notesOn.empty()) { - jsonxx::Array notesOn; - for (auto note : entry.notesOn) notesOn << note; - o << "on" << notesOn; - } - if (!entry.notesOff.empty()) { - jsonxx::Array notesOff; - for (auto note : entry.notesOff) notesOff << note; - o << "off" << notesOff; - } - - // restsOn / restsOff - if (includeRests) { - if (!entry.restsOn.empty()) { - jsonxx::Array restsOn; - for (auto rest : entry.restsOn) restsOn << rest; - o << "restsOn" << restsOn; - } - if (!entry.restsOff.empty()) { - jsonxx::Array restsOff; - for (auto rest : entry.restsOff) restsOff << rest; - o << "restsOff" << restsOff; - } - } - - // tempo - if (entry.tempo != -1000.0) { - newTempo = entry.tempo; - if (newTempo != currentTempo) { - currentTempo = newTempo; - o << "tempo" << std::to_string(currentTempo); - } - } - - // measureOn - if (includeMeasures && !entry.measureOn.empty()) { - o << "measureOn" << entry.measureOn; - } - - timemap << o; - } - output = timemap.json(); + timemap.ToJson(output); return true; } From cb7da407e983d244f0dea5f13924920014b62c40 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sat, 29 Jan 2022 13:56:33 +0100 Subject: [PATCH 170/403] Use Timemap class in Measure, Note and Rest --- src/measure.cpp | 24 +++++------------------- src/note.cpp | 8 +++++++- src/rest.cpp | 8 +++++++- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/measure.cpp b/src/measure.cpp index dca7d7155e1..cf88ad7f239 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -36,6 +36,7 @@ #include "tempo.h" #include "tie.h" #include "timeinterface.h" +#include "timemap.h" #include "timestamp.h" #include "vrv.h" @@ -1548,26 +1549,11 @@ int Measure::GenerateTimemap(FunctorParams *functorParams) GenerateTimemapParams *params = vrv_params_cast(functorParams); assert(params); - // Deal with repeated music later, for now get the last times. - params->m_scoreTimeOffset = m_scoreTimeOffset.back(); - params->m_realTimeOffsetMilliseconds = m_realTimeOffsetMilliseconds.back(); - params->m_currentTempo = m_currentTempo; - - double scoreTimeStart = params->m_scoreTimeOffset; - double realTimeStart = params->m_realTimeOffsetMilliseconds; - - TimemapEntry startEntry; - if (params->m_timemap.count(realTimeStart) > 0) startEntry = params->m_timemap.at(realTimeStart); - - // Should check if value for realTimeStart already exists and if so, then - // ensure that it is equal to scoreTimeStart: - startEntry.qstamp = scoreTimeStart; - - // Add the measureOn - startEntry.measureOn = this->GetUuid(); + params->m_scoreTimeOffset = this->m_scoreTimeOffset.back(); + params->m_realTimeOffsetMilliseconds = this->m_realTimeOffsetMilliseconds.back(); + params->m_currentTempo = this->m_currentTempo; - // Update the timemap - params->m_timemap[realTimeStart] = startEntry; + params->m_timemap->AddEntry(this, params); return FUNCTOR_CONTINUE; } diff --git a/src/note.cpp b/src/note.cpp index 8509f84c54a..3847ca35d96 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -32,6 +32,7 @@ #include "syl.h" #include "tabgrp.h" #include "tie.h" +#include "timemap.h" #include "transposition.h" #include "tuning.h" #include "verse.h" @@ -1486,10 +1487,15 @@ int Note::GenerateMIDI(FunctorParams *functorParams) int Note::GenerateTimemap(FunctorParams *functorParams) { + GenerateTimemapParams *params = vrv_params_cast(functorParams); + assert(params); + Note *note = vrv_cast(this->ThisOrSameasAsLink()); assert(note); - return note->InterfaceGenerateTimemap(functorParams, note); + params->m_timemap->AddEntry(note, params); + + return FUNCTOR_SIBLINGS; } int Note::Transpose(FunctorParams *functorParams) diff --git a/src/rest.cpp b/src/rest.cpp index 02b4774de9b..71868875d6b 100644 --- a/src/rest.cpp +++ b/src/rest.cpp @@ -23,6 +23,7 @@ #include "smufl.h" #include "staff.h" #include "system.h" +#include "timemap.h" #include "transposition.h" #include "vrv.h" @@ -734,7 +735,12 @@ int Rest::Transpose(FunctorParams *functorParams) int Rest::GenerateTimemap(FunctorParams *functorParams) { - return this->InterfaceGenerateTimemap(functorParams, this); + GenerateTimemapParams *params = vrv_params_cast(functorParams); + assert(params); + + params->m_timemap->AddEntry(this, params); + + return FUNCTOR_SIBLINGS; } } // namespace vrv From b2472bea0a37a1be70c18b0a003cd810a9e0e3fa Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sat, 29 Jan 2022 14:05:11 +0100 Subject: [PATCH 171/403] Add missing parameter to the export (rests and measures) and cleanup --- include/vrv/timemap.h | 14 +++++++++----- src/doc.cpp | 2 +- src/timemap.cpp | 6 +----- src/toolkit.cpp | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/include/vrv/timemap.h b/include/vrv/timemap.h index dbd1f74d7a5..676961a01c1 100644 --- a/include/vrv/timemap.h +++ b/include/vrv/timemap.h @@ -42,7 +42,7 @@ struct TimemapEntry { //---------------------------------------------------------------------------- /** - * This class represents a clock to measure runtime. + * This class holds a timemap for exporting onset / offset values. */ class Timemap { public: @@ -54,26 +54,30 @@ class Timemap { virtual ~Timemap(); ///@} - /** Resets the clock */ + /** Resets the timemap */ void Reset(); + /** + * Add an entry to the timemap. + * Currently support note and rest (duration interfaces) and measure. + */ void AddEntry(Object *object, GenerateTimemapParams *params); /** * Write the current timemap to a JSON string */ - void ToJson(std::string &output); + void ToJson(std::string &output, bool includetRests, bool includetMeasures); private: // public: // private: - /** The time point at which the clock was started */ + /** The map with time values as keys */ std::map m_map; }; // class Timemap } // namespace vrv -#endif // __VRV_RUNTIMECLOCK_H__ +#endif // __VRV_TIMEMAP_H__ diff --git a/src/doc.cpp b/src/doc.cpp index d0c2bdad6cf..00ed4fb6942 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -412,7 +412,7 @@ bool Doc::ExportTimemap(std::string &output, bool includeRests, bool includeMeas GenerateTimemapParams generateTimemapParams(&timemap, &generateTimemap); this->Process(&generateTimemap, &generateTimemapParams); - timemap.ToJson(output); + timemap.ToJson(output, includeRests, includeMeasures); return true; } diff --git a/src/timemap.cpp b/src/timemap.cpp index 255d88347a8..cdf223b7d26 100644 --- a/src/timemap.cpp +++ b/src/timemap.cpp @@ -113,12 +113,8 @@ void Timemap::AddEntry(Object *object, GenerateTimemapParams *params) } } -void Timemap::ToJson(std::string &output) +void Timemap::ToJson(std::string &output, bool includeRests, bool includeMeasures) { - - bool includeRests = true; - bool includeMeasures = true; - double currentTempo = -1000.0; double newTempo; diff --git a/src/toolkit.cpp b/src/toolkit.cpp index d81cce1c301..9639eed9250 100644 --- a/src/toolkit.cpp +++ b/src/toolkit.cpp @@ -1401,8 +1401,8 @@ bool Toolkit::RenderToPAEFile(const std::string &filename) std::string Toolkit::RenderToTimemap(const std::string &jsonOptions) { - bool includeMeasures = true; - bool includeRests = true; + bool includeMeasures = false; + bool includeRests = false; jsonxx::Object json; From d15646d3f82ea3d04239458ff33543bb78303187 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sat, 29 Jan 2022 14:17:16 +0100 Subject: [PATCH 172/403] Clear map in Timemap reset and cleanup --- include/vrv/functorparams.h | 8 ++++---- src/timemap.cpp | 5 ++++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 03617319926..044fc0f7413 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1633,10 +1633,10 @@ class GenerateMIDIParams : public FunctorParams { //---------------------------------------------------------------------------- /** - * member 0: mapping of real times with TimemapEntry - * member 1: Score time from the start of the piece to previous barline in quarter notes - * member 2: Real time from the start of the piece to previous barline in ms - * member 3: Currently active tempo + * member 0: Score time from the start of the piece to previous barline in quarter notes + * member 1: Real time from the start of the piece to previous barline in ms + * member 2: Currently active tempo + * member 3: A pointer to the Timemap * member 4: The functor for redirection **/ diff --git a/src/timemap.cpp b/src/timemap.cpp index cdf223b7d26..1650b9c40a8 100644 --- a/src/timemap.cpp +++ b/src/timemap.cpp @@ -32,7 +32,10 @@ Timemap::Timemap() Timemap::~Timemap() {} -void Timemap::Reset() {} +void Timemap::Reset() +{ + m_map.clear(); +} void Timemap::AddEntry(Object *object, GenerateTimemapParams *params) { From a589e60093729eae2a93fcf37e55dd87556c8bbb Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sat, 29 Jan 2022 17:54:38 +0100 Subject: [PATCH 173/403] Fix and cleanup ClassIdComparison and ClassIdsComparison operators --- include/vrv/comparison.h | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/include/vrv/comparison.h b/include/vrv/comparison.h index fce69e014d3..35d7c570d81 100644 --- a/include/vrv/comparison.h +++ b/include/vrv/comparison.h @@ -60,23 +60,11 @@ class ClassIdComparison : public Comparison { public: ClassIdComparison(ClassId classId) { m_classId = classId; } - bool operator()(Object *object) override - { - if (object->Is(m_classId)) { - return true; - } - return false; - } + bool operator()(Object *object) override { return this->MatchesType(object); } ClassId GetType() { return m_classId; } - bool MatchesType(Object *object) override - { - if (object->Is(m_classId)) { - return true; - } - return false; - } + bool MatchesType(Object *object) override { return (object->Is(m_classId)); } protected: ClassId m_classId; @@ -95,15 +83,9 @@ class ClassIdsComparison : public Comparison { m_supportReverse = true; } - bool operator()(Object *object) override - { - if (object->Is(m_classIds)) { - return Result(true); - } - return Result(false); - } + bool operator()(Object *object) override { return Result(this->MatchesType(object)); } - bool MatchesType(Object *object) override { return true; } + bool MatchesType(Object *object) override { return (object->Is(m_classIds)); } protected: std::vector m_classIds; From 600678c932aa9b08d6b4342dfca694c9b5076993 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sat, 29 Jan 2022 17:58:50 +0100 Subject: [PATCH 174/403] Update changelog [skip-ci] --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61d9ec593fa..fdd8b33a82b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,8 +3,12 @@ ## [unreleased] * Support for `beatRpt@beatdef` * Support for `scoreDef` and `staffDef` `@dur.default` (@eNote-GmBH) -* Support for MIDI output of grace notes (@eNote-GmBH) +* Support for MIDI output of grace notes and multi-measure rests (@eNote-GmBH) +* Support for `@stem.sameas` on notes for orchestra scores * Improved tablature MIDI output (@paul-bayleaf) +* Additional parameters to the redoLayout method for faster cached layout redoing +* Additional parameters to the renderToTimemap method for including rests and measure +* Additional ids for rests and measure added to the getElementsAtTime methods * Preliminary support for tablature MusicXML import (@paul-bayleaf) ## [3.8.1] - 2022-01-10 From baf7c67dc3ca189a773cd274b1559f425a11063b Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sat, 29 Jan 2022 18:41:14 +0100 Subject: [PATCH 175/403] Remove virtual specifier to Comparison::MatchType [skip-ci] * Having a pure virtual method was useless * The method only need to be given in ClassIdComparison and ClassIdsComparison --- include/vrv/comparison.h | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/include/vrv/comparison.h b/include/vrv/comparison.h index 35d7c570d81..3cf1658c21d 100644 --- a/include/vrv/comparison.h +++ b/include/vrv/comparison.h @@ -31,7 +31,6 @@ class Comparison { public: virtual bool operator()(Object *object) = 0; - virtual bool MatchesType(Object *object) = 0; // For classes that do a reverse comparison, return reversed result bool Result(bool comparison) { return (m_reverse) ? !comparison : comparison; } // Set reverse comparison. @@ -64,7 +63,7 @@ class ClassIdComparison : public Comparison { ClassId GetType() { return m_classId; } - bool MatchesType(Object *object) override { return (object->Is(m_classId)); } + bool MatchesType(Object *object) { return (object->Is(m_classId)); } protected: ClassId m_classId; @@ -85,7 +84,7 @@ class ClassIdsComparison : public Comparison { bool operator()(Object *object) override { return Result(this->MatchesType(object)); } - bool MatchesType(Object *object) override { return (object->Is(m_classIds)); } + bool MatchesType(Object *object) { return (object->Is(m_classIds)); } protected: std::vector m_classIds; @@ -108,8 +107,6 @@ class InterfaceComparison : public Comparison { return false; } - bool MatchesType(Object *object) override { return true; } - protected: InterfaceId m_interfaceId; }; @@ -179,8 +176,6 @@ class IsEditorialElementComparison : public Comparison { if (object->IsEditorialElement()) return Result(true); return Result(false); } - - bool MatchesType(Object *object) override { return true; } }; //---------------------------------------------------------------------------- From 911f5dbef37583e87ffb2fdc006c665891cfc0a5 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sat, 29 Jan 2022 19:18:55 +0100 Subject: [PATCH 176/403] Allow tabGrp within tuplet --- src/iomei.cpp | 3 +++ src/tuplet.cpp | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/iomei.cpp b/src/iomei.cpp index ecc2dcfad61..7109fe00acb 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -3356,6 +3356,9 @@ bool MEIInput::IsAllowed(std::string element, Object *filterParent) else if (element == "tuplet") { return true; } + else if (element == "tuplet") { + return true; + } else { return false; } diff --git a/src/tuplet.cpp b/src/tuplet.cpp index 74e32e3dde9..8e240081a18 100644 --- a/src/tuplet.cpp +++ b/src/tuplet.cpp @@ -26,6 +26,7 @@ #include "rest.h" #include "space.h" #include "staff.h" +#include "tabgrp.h" #include "vrv.h" namespace vrv { @@ -101,6 +102,9 @@ bool Tuplet::IsSupportedChild(Object *child) else if (child->Is(SPACE)) { assert(dynamic_cast(child)); } + else if (child->Is(TABGRP)) { + assert(dynamic_cast(child)); + } else if (child->Is(TUPLET)) { assert(dynamic_cast(child)); } From eab4b89ecaa42e5fee246415804c4ef6c326792f Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sat, 29 Jan 2022 19:25:12 +0100 Subject: [PATCH 177/403] fix typo --- src/iomei.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iomei.cpp b/src/iomei.cpp index 7109fe00acb..63bc543dce8 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -3353,7 +3353,7 @@ bool MEIInput::IsAllowed(std::string element, Object *filterParent) else if (element == "space") { return true; } - else if (element == "tuplet") { + else if (element == "tabGrp") { return true; } else if (element == "tuplet") { From 1ef06b015d496d1d3e2b4b78be8aaa7e819af0c4 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sat, 29 Jan 2022 22:16:52 +0100 Subject: [PATCH 178/403] Add this-> to calls to object methods (cosmetic changes) * No change in the test-suite evaluated locally --- src/abbr.cpp | 6 +- src/accid.cpp | 44 +- src/add.cpp | 6 +- src/anchoredtext.cpp | 4 +- src/annot.cpp | 10 +- src/app.cpp | 4 +- src/areaposinterface.cpp | 10 +- src/arpeg.cpp | 34 +- src/artic.cpp | 37 +- src/barline.cpp | 25 +- src/bboxdevicecontext.cpp | 46 +- src/beam.cpp | 22 +- src/beatrpt.cpp | 14 +- src/boundingbox.cpp | 20 +- src/bracketspan.cpp | 20 +- src/breath.cpp | 12 +- src/btrem.cpp | 10 +- src/caesura.cpp | 12 +- src/choice.cpp | 4 +- src/chord.cpp | 42 +- src/clef.cpp | 76 +- src/controlelement.cpp | 28 +- src/corr.cpp | 6 +- src/course.cpp | 18 +- src/custos.cpp | 22 +- src/damage.cpp | 6 +- src/del.cpp | 6 +- src/devicecontext.cpp | 2 +- src/dir.cpp | 26 +- src/doc.cpp | 74 +- src/dot.cpp | 12 +- src/drawinginterface.cpp | 17 +- src/durationinterface.cpp | 38 +- src/dynam.cpp | 28 +- src/editorial.cpp | 22 +- src/elementpart.cpp | 58 +- src/ending.cpp | 10 +- src/expand.cpp | 6 +- src/expansion.cpp | 4 +- src/expansionmap.cpp | 20 +- src/f.cpp | 8 +- src/facsimileinterface.cpp | 6 +- src/fb.cpp | 2 +- src/featureextractor.cpp | 2 +- src/fermata.cpp | 47 +- src/fig.cpp | 4 +- src/fing.cpp | 10 +- src/floatingobject.cpp | 20 +- src/ftrem.cpp | 12 +- src/gliss.cpp | 20 +- src/gracegrp.cpp | 14 +- src/grpsym.cpp | 48 +- src/hairpin.cpp | 32 +- src/halfmrpt.cpp | 6 +- src/harm.cpp | 16 +- src/horizontalaligner.cpp | 54 +- src/instrdef.cpp | 18 +- src/iomei.cpp | 1590 ++++++++++++++++++------------------ src/iopae.cpp | 64 +- src/keyaccid.cpp | 16 +- src/keysig.cpp | 28 +- src/label.cpp | 2 +- src/labelabbr.cpp | 2 +- src/layer.cpp | 87 +- src/layerelement.cpp | 147 ++-- src/lb.cpp | 2 +- src/lem.cpp | 6 +- src/ligature.cpp | 6 +- src/linkinginterface.cpp | 6 +- src/lv.cpp | 6 +- src/mdiv.cpp | 14 +- src/measure.cpp | 60 +- src/mensur.cpp | 32 +- src/metersig.cpp | 14 +- src/metersiggrp.cpp | 22 +- src/mnum.cpp | 18 +- src/mordent.cpp | 42 +- src/mrest.cpp | 20 +- src/mrpt.cpp | 6 +- src/mrpt2.cpp | 6 +- src/mspace.cpp | 2 +- src/multirest.cpp | 38 +- src/multirpt.cpp | 6 +- src/nc.cpp | 22 +- src/neume.cpp | 6 +- src/note.cpp | 90 +- src/num.cpp | 2 +- src/object.cpp | 14 +- src/octave.cpp | 28 +- src/options.cpp | 28 +- src/orig.cpp | 6 +- src/page.cpp | 28 +- src/pageelement.cpp | 14 +- src/pagemilestone.cpp | 4 +- src/pages.cpp | 10 +- src/pb.cpp | 6 +- src/pedal.cpp | 46 +- src/pgfoot.cpp | 2 +- src/pgfoot2.cpp | 2 +- src/pghead.cpp | 2 +- src/pghead2.cpp | 2 +- src/phrase.cpp | 2 +- src/pitchinflection.cpp | 4 +- src/pitchinterface.cpp | 14 +- src/plica.cpp | 6 +- src/plistinterface.cpp | 6 +- src/positioninterface.cpp | 10 +- src/proport.cpp | 6 +- src/rdg.cpp | 6 +- src/ref.cpp | 2 +- src/reg.cpp | 6 +- src/reh.cpp | 18 +- src/rend.cpp | 26 +- src/rest.cpp | 108 +-- src/restore.cpp | 6 +- src/runningelement.cpp | 28 +- src/sb.cpp | 6 +- src/score.cpp | 10 +- src/scoredef.cpp | 36 +- src/scoredefinterface.cpp | 38 +- src/section.cpp | 10 +- src/sic.cpp | 6 +- src/slur.cpp | 44 +- src/space.cpp | 4 +- src/staff.cpp | 26 +- src/staffdef.cpp | 40 +- src/staffgrp.cpp | 30 +- src/subst.cpp | 4 +- src/supplied.cpp | 6 +- src/surface.cpp | 14 +- src/svg.cpp | 2 +- src/svgdevicecontext.cpp | 63 +- src/syl.cpp | 16 +- src/syllable.cpp | 10 +- src/system.cpp | 20 +- src/systemelement.cpp | 14 +- src/systemmilestone.cpp | 4 +- src/tabdursym.cpp | 6 +- src/tabgrp.cpp | 4 +- src/tempo.cpp | 28 +- src/text.cpp | 2 +- src/textdirinterface.cpp | 6 +- src/textelement.cpp | 30 +- src/tie.cpp | 54 +- src/timeinterface.cpp | 28 +- src/timestamp.cpp | 2 +- src/toolkit.cpp | 50 +- src/transposition.cpp | 166 ++-- src/trill.cpp | 42 +- src/tuning.cpp | 8 +- src/tuplet.cpp | 20 +- src/turn.cpp | 36 +- src/unclear.cpp | 6 +- src/verse.cpp | 18 +- src/verticalaligner.cpp | 76 +- src/view.cpp | 2 +- src/view_beam.cpp | 18 +- src/view_control.cpp | 178 ++-- src/view_element.cpp | 228 +++--- src/view_graph.cpp | 10 +- src/view_mensural.cpp | 86 +- src/view_neume.cpp | 8 +- src/view_page.cpp | 309 +++---- src/view_running.cpp | 6 +- src/view_slur.cpp | 6 +- src/view_tab.cpp | 16 +- src/view_text.cpp | 40 +- src/view_tuplet.cpp | 14 +- src/zone.cpp | 10 +- 169 files changed, 2964 insertions(+), 2934 deletions(-) diff --git a/src/abbr.cpp b/src/abbr.cpp index d5d63af0e3a..1d422f0eede 100644 --- a/src/abbr.cpp +++ b/src/abbr.cpp @@ -25,9 +25,9 @@ static const ClassRegistrar s_factory("abbr", ABBR); Abbr::Abbr() : EditorialElement(ABBR, "abbr-"), AttSource() { - RegisterAttClass(ATT_SOURCE); + this->RegisterAttClass(ATT_SOURCE); - Reset(); + this->Reset(); } Abbr::~Abbr() {} @@ -35,7 +35,7 @@ Abbr::~Abbr() {} void Abbr::Reset() { EditorialElement::Reset(); - ResetSource(); + this->ResetSource(); } //---------------------------------------------------------------------------- diff --git a/src/accid.cpp b/src/accid.cpp index a4e43397d63..8ba9c2206ad 100644 --- a/src/accid.cpp +++ b/src/accid.cpp @@ -39,15 +39,15 @@ Accid::Accid() , AttExtSym() { - RegisterInterface(PositionInterface::GetAttClasses(), PositionInterface::IsInterface()); - RegisterAttClass(ATT_ACCIDENTAL); - RegisterAttClass(ATT_ACCIDENTALGESTURAL); - RegisterAttClass(ATT_ACCIDLOG); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_ENCLOSINGCHARS); - RegisterAttClass(ATT_EXTSYM); - - Reset(); + this->RegisterInterface(PositionInterface::GetAttClasses(), PositionInterface::IsInterface()); + this->RegisterAttClass(ATT_ACCIDENTAL); + this->RegisterAttClass(ATT_ACCIDENTALGESTURAL); + this->RegisterAttClass(ATT_ACCIDLOG); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_ENCLOSINGCHARS); + this->RegisterAttClass(ATT_EXTSYM); + + this->Reset(); } Accid::~Accid() {} @@ -56,12 +56,12 @@ void Accid::Reset() { LayerElement::Reset(); PositionInterface::Reset(); - ResetAccidental(); - ResetAccidentalGestural(); - ResetAccidLog(); - ResetColor(); - ResetEnclosingChars(); - ResetExtSym(); + this->ResetAccidental(); + this->ResetAccidentalGestural(); + this->ResetAccidLog(); + this->ResetColor(); + this->ResetEnclosingChars(); + this->ResetExtSym(); m_drawingUnison = NULL; } @@ -73,13 +73,13 @@ std::wstring Accid::GetSymbolStr(const data_NOTATIONTYPE notationType) const wchar_t code = 0; // If there is glyph.num, prioritize it - if (HasGlyphNum()) { - code = GetGlyphNum(); + if (this->HasGlyphNum()) { + code = this->GetGlyphNum(); if (NULL == Resources::GetGlyph(code)) code = 0; } // If there is glyph.name (second priority) - else if (HasGlyphName()) { - wchar_t code = Resources::GetGlyphCode(GetGlyphName()); + else if (this->HasGlyphName()) { + wchar_t code = Resources::GetGlyphCode(this->GetGlyphName()); if (NULL == Resources::GetGlyph(code)) code = 0; } @@ -88,15 +88,15 @@ std::wstring Accid::GetSymbolStr(const data_NOTATIONTYPE notationType) const case NOTATIONTYPE_mensural: case NOTATIONTYPE_mensural_black: case NOTATIONTYPE_mensural_white: - switch (GetAccid()) { + switch (this->GetAccid()) { case ACCIDENTAL_WRITTEN_s: code = SMUFL_E9E3_medRenSharpCroix; break; case ACCIDENTAL_WRITTEN_f: code = SMUFL_E9E0_medRenFlatSoftB; break; case ACCIDENTAL_WRITTEN_n: code = SMUFL_E9E2_medRenNatural; break; // we do not want to ignore non-mensural accidentals - default: code = GetAccidGlyph(GetAccid()); break; + default: code = this->GetAccidGlyph(this->GetAccid()); break; } break; - default: code = GetAccidGlyph(GetAccid()); break; + default: code = this->GetAccidGlyph(this->GetAccid()); break; } } diff --git a/src/add.cpp b/src/add.cpp index 8ebef1b2267..26372480f64 100644 --- a/src/add.cpp +++ b/src/add.cpp @@ -25,9 +25,9 @@ static const ClassRegistrar s_factory("add", ADD); Add::Add() : EditorialElement(ADD, "add-"), AttSource() { - RegisterAttClass(ATT_SOURCE); + this->RegisterAttClass(ATT_SOURCE); - Reset(); + this->Reset(); } Add::~Add() {} @@ -35,7 +35,7 @@ Add::~Add() {} void Add::Reset() { EditorialElement::Reset(); - ResetSource(); + this->ResetSource(); } //---------------------------------------------------------------------------- diff --git a/src/anchoredtext.cpp b/src/anchoredtext.cpp index df0a2bf3dc0..c81949ba9b7 100644 --- a/src/anchoredtext.cpp +++ b/src/anchoredtext.cpp @@ -28,9 +28,9 @@ static const ClassRegistrar s_factory("anchoredText", ANCHOREDTEXT AnchoredText::AnchoredText() : ControlElement(ANCHOREDTEXT, "anchtxt-"), TextDirInterface() { - RegisterInterface(TextDirInterface::GetAttClasses(), TextDirInterface::IsInterface()); + this->RegisterInterface(TextDirInterface::GetAttClasses(), TextDirInterface::IsInterface()); - Reset(); + this->Reset(); } AnchoredText::~AnchoredText() {} diff --git a/src/annot.cpp b/src/annot.cpp index 72840572fc9..abdc42082e9 100644 --- a/src/annot.cpp +++ b/src/annot.cpp @@ -26,10 +26,10 @@ static const ClassRegistrar s_factory("annot", ANNOT); Annot::Annot() : EditorialElement(ANNOT, "annot-"), TextListInterface(), AttPlist(), AttSource() { - RegisterAttClass(ATT_PLIST); - RegisterAttClass(ATT_SOURCE); + this->RegisterAttClass(ATT_PLIST); + this->RegisterAttClass(ATT_SOURCE); - Reset(); + this->Reset(); } Annot::~Annot() {} @@ -37,8 +37,8 @@ Annot::~Annot() {} void Annot::Reset() { EditorialElement::Reset(); - ResetPlist(); - ResetSource(); + this->ResetPlist(); + this->ResetSource(); } bool Annot::IsSupportedChild(Object *child) diff --git a/src/app.cpp b/src/app.cpp index 5d5a7550aea..59fd24a22a4 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -29,14 +29,14 @@ App::App() : EditorialElement(APP, "app-") { m_level = EDITORIAL_UNDEFINED; - Reset(); + this->Reset(); } App::App(EditorialLevel level) : EditorialElement(APP, "app-") { m_level = level; - Reset(); + this->Reset(); } void App::Reset() diff --git a/src/areaposinterface.cpp b/src/areaposinterface.cpp index 757e755e62b..f1611565818 100644 --- a/src/areaposinterface.cpp +++ b/src/areaposinterface.cpp @@ -21,18 +21,18 @@ namespace vrv { AreaPosInterface::AreaPosInterface() : Interface(), AttHorizontalAlign(), AttVerticalAlign() { - RegisterInterfaceAttClass(ATT_HORIZONTALALIGN); - RegisterInterfaceAttClass(ATT_VERTICALALIGN); + this->RegisterInterfaceAttClass(ATT_HORIZONTALALIGN); + this->RegisterInterfaceAttClass(ATT_VERTICALALIGN); - Reset(); + this->Reset(); } AreaPosInterface::~AreaPosInterface() {} void AreaPosInterface::Reset() { - ResetHorizontalAlign(); - ResetVerticalAlign(); + this->ResetHorizontalAlign(); + this->ResetVerticalAlign(); } } // namespace vrv diff --git a/src/arpeg.cpp b/src/arpeg.cpp index 11b388e0f92..5c38a90f08a 100644 --- a/src/arpeg.cpp +++ b/src/arpeg.cpp @@ -32,14 +32,14 @@ static const ClassRegistrar s_factory("arpeg", ARPEG); Arpeg::Arpeg() : ControlElement(ARPEG, "arpeg-"), PlistInterface(), TimePointInterface(), AttArpegLog(), AttArpegVis(), AttColor() { - RegisterInterface(PlistInterface::GetAttClasses(), PlistInterface::IsInterface()); - RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); - RegisterAttClass(ATT_ARPEGLOG); - RegisterAttClass(ATT_ARPEGVIS); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_ENCLOSINGCHARS); - - Reset(); + this->RegisterInterface(PlistInterface::GetAttClasses(), PlistInterface::IsInterface()); + this->RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); + this->RegisterAttClass(ATT_ARPEGLOG); + this->RegisterAttClass(ATT_ARPEGVIS); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_ENCLOSINGCHARS); + + this->Reset(); } Arpeg::~Arpeg() {} @@ -49,10 +49,10 @@ void Arpeg::Reset() ControlElement::Reset(); PlistInterface::Reset(); TimePointInterface::Reset(); - ResetArpegLog(); - ResetArpegVis(); - ResetColor(); - ResetEnclosingChars(); + this->ResetArpegLog(); + this->ResetArpegVis(); + this->ResetColor(); + this->ResetEnclosingChars(); m_drawingXRel = 0; m_cachedXRel = VRV_UNSET; @@ -64,7 +64,7 @@ int Arpeg::GetDrawingX() const // @staff are not taken into account for arpeg (only @plist) // The positioner for Arpeg uses the top note as objectX if (this->GetCurrentFloatingPositioner()) { - return (GetCurrentFloatingPositioner()->GetDrawingX()); + return (this->GetCurrentFloatingPositioner()->GetDrawingX()); } // Otherwise get the measure - no cast to Measure is necessary @@ -89,14 +89,14 @@ bool Arpeg::IsValidRef(Object *ref) const void Arpeg::SetDrawingXRel(int drawingXRel) { // Cache is currently not used for Arpeg - ResetCachedDrawingX(); + this->ResetCachedDrawingX(); m_drawingXRel = drawingXRel; // Also update the positioner drawingXRel - this is a duplication but we need it in // the positioner too for the bounding box calculation and for the DrawingX value // See GetDrawingX - if (GetCurrentFloatingPositioner()) { - GetCurrentFloatingPositioner()->SetDrawingXRel(m_drawingXRel); + if (this->GetCurrentFloatingPositioner()) { + this->GetCurrentFloatingPositioner()->SetDrawingXRel(m_drawingXRel); } } @@ -181,7 +181,7 @@ void Arpeg::GetDrawingTopBottomNotes(Note *&top, Note *&bottom) Staff *Arpeg::GetCrossStaff() { - const ArrayOfObjects *refs = GetRefs(); + const ArrayOfObjects *refs = this->GetRefs(); if (refs->empty()) return NULL; // Find if there is at least one element that is not cross staff diff --git a/src/artic.cpp b/src/artic.cpp index 7e8d70f30a8..215153a02bf 100644 --- a/src/artic.cpp +++ b/src/artic.cpp @@ -46,13 +46,13 @@ Artic::Artic() , AttExtSym() , AttPlacementRelEvent() { - RegisterAttClass(ATT_ARTICULATION); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_ENCLOSINGCHARS); - RegisterAttClass(ATT_EXTSYM); - RegisterAttClass(ATT_PLACEMENTRELEVENT); + this->RegisterAttClass(ATT_ARTICULATION); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_ENCLOSINGCHARS); + this->RegisterAttClass(ATT_EXTSYM); + this->RegisterAttClass(ATT_PLACEMENTRELEVENT); - Reset(); + this->Reset(); } Artic::~Artic() {} @@ -60,11 +60,11 @@ Artic::~Artic() {} void Artic::Reset() { LayerElement::Reset(); - ResetArticulation(); - ResetColor(); - ResetEnclosingChars(); - ResetExtSym(); - ResetPlacementRelEvent(); + this->ResetArticulation(); + this->ResetColor(); + this->ResetEnclosingChars(); + this->ResetExtSym(); + this->ResetPlacementRelEvent(); m_drawingPlace = STAFFREL_NONE; } @@ -187,13 +187,13 @@ void Artic::AddSlurPositioner(FloatingCurvePositioner *positioner, bool start) wchar_t Artic::GetArticGlyph(data_ARTICULATION artic, data_STAFFREL place) const { // If there is glyph.num, prioritize it - if (HasGlyphNum()) { - wchar_t code = GetGlyphNum(); + if (this->HasGlyphNum()) { + wchar_t code = this->GetGlyphNum(); if (NULL != Resources::GetGlyph(code)) return code; } // If there is glyph.name (second priority) - else if (HasGlyphName()) { - wchar_t code = Resources::GetGlyphCode(GetGlyphName()); + else if (this->HasGlyphName()) { + wchar_t code = Resources::GetGlyphCode(this->GetGlyphName()); if (NULL != Resources::GetGlyph(code)) return code; } @@ -323,7 +323,8 @@ int Artic::ConvertMarkupArtic(FunctorParams *functorParams) ConvertMarkupArticParams *params = vrv_params_cast(functorParams); assert(params); - if (this->GetArtic().size() > 1) params->m_articPairsToConvert.emplace_back(std::make_pair(GetParent(), this)); + if (this->GetArtic().size() > 1) + params->m_articPairsToConvert.emplace_back(std::make_pair(this->GetParent(), this)); return FUNCTOR_CONTINUE; } @@ -400,7 +401,7 @@ int Artic::AdjustArtic(FunctorParams *functorParams) int yIn, yOut, yRel; Staff *staff = this->GetAncestorStaff(RESOLVE_CROSS_STAFF); - Beam *beam = dynamic_cast(GetFirstAncestor(BEAM)); + Beam *beam = dynamic_cast(this->GetFirstAncestor(BEAM)); int staffYBottom = -params->m_doc->GetDrawingStaffSize(staff->m_drawingStaffSize); // Avoid in artic to be in legder lines @@ -539,7 +540,7 @@ int Artic::CalculateHorizontalShift(Doc *doc, LayerElement *parent, data_STEMDIR if ((parent->GetChildCount(ARTIC) > 1) || (doc->GetOptions()->m_staccatoCenter.GetValue())) { return shift; } - data_ARTICULATION artic = GetArticFirst(); + data_ARTICULATION artic = this->GetArticFirst(); switch (artic) { case ARTICULATION_stacc: case ARTICULATION_stacciss: { diff --git a/src/barline.cpp b/src/barline.cpp index 8ce7793c104..1e483de270c 100644 --- a/src/barline.cpp +++ b/src/barline.cpp @@ -33,21 +33,21 @@ static const ClassRegistrar s_factory("barLine", BARLINE); BarLine::BarLine() : LayerElement(BARLINE, "bline-"), AttBarLineLog(), AttColor(), AttNNumberLike(), AttVisibility() { - RegisterAttClass(ATT_BARLINELOG); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_VISIBILITY); + this->RegisterAttClass(ATT_BARLINELOG); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_VISIBILITY); - Reset(); + this->Reset(); } BarLine::BarLine(ClassId classId) : LayerElement(classId, "bline-"), AttBarLineLog(), AttColor(), AttNNumberLike(), AttVisibility() { - RegisterAttClass(ATT_BARLINELOG); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_VISIBILITY); + this->RegisterAttClass(ATT_BARLINELOG); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_VISIBILITY); - Reset(); + this->Reset(); } BarLine::~BarLine() {} @@ -56,9 +56,9 @@ void BarLine::Reset() { LayerElement::Reset(); - ResetBarLineLog(); - ResetColor(); - ResetVisibility(); + this->ResetBarLineLog(); + this->ResetColor(); + this->ResetVisibility(); m_position = BarLinePosition::None; } @@ -71,7 +71,8 @@ bool BarLine::SetAlignment(Alignment *alignment) bool BarLine::HasRepetitionDots() const { - if (GetForm() == BARRENDITION_rptstart || GetForm() == BARRENDITION_rptend || GetForm() == BARRENDITION_rptboth) { + if (this->GetForm() == BARRENDITION_rptstart || this->GetForm() == BARRENDITION_rptend + || this->GetForm() == BARRENDITION_rptboth) { return true; } return false; diff --git a/src/bboxdevicecontext.cpp b/src/bboxdevicecontext.cpp index db62c835b03..631394c3472 100644 --- a/src/bboxdevicecontext.cpp +++ b/src/bboxdevicecontext.cpp @@ -37,12 +37,12 @@ BBoxDeviceContext::BBoxDeviceContext(View *view, int width, int height, unsigned m_drawingText = false; m_textAlignment = HORIZONTALALIGNMENT_left; - SetBrush(AxNONE, AxSOLID); - SetPen(AxNONE, 1, AxSOLID); + this->SetBrush(AxNONE, AxSOLID); + this->SetPen(AxNONE, 1, AxSOLID); m_update = update; - ResetGraphicRotation(); + this->ResetGraphicRotation(); } BBoxDeviceContext::~BBoxDeviceContext() {} @@ -53,7 +53,7 @@ void BBoxDeviceContext::StartGraphic(Object *object, std::string gClass, std::st object->BoundingBox::ResetBoundingBox(); m_objects.push_back(object); - ResetGraphicRotation(); + this->ResetGraphicRotation(); } void BBoxDeviceContext::ResumeGraphic(Object *object, std::string gId) @@ -67,7 +67,7 @@ void BBoxDeviceContext::EndGraphic(Object *object, View *view) assert(m_objects.back() == object); m_objects.pop_back(); - ResetGraphicRotation(); + this->ResetGraphicRotation(); } void BBoxDeviceContext::EndResumedGraphic(Object *object, View *view) @@ -76,7 +76,7 @@ void BBoxDeviceContext::EndResumedGraphic(Object *object, View *view) assert(m_objects.back() == object); m_objects.pop_back(); - ResetGraphicRotation(); + this->ResetGraphicRotation(); } void BBoxDeviceContext::RotateGraphic(Point const &orig, double angle) @@ -143,7 +143,7 @@ void BBoxDeviceContext::DrawQuadBezierPath(Point bezier[3]) pMax = pMax.max(Point(qx, qy)); } - UpdateBB(pMin.x, pMin.y, pMax.x, pMax.y); + this->UpdateBB(pMin.x, pMin.y, pMax.x, pMax.y); } void BBoxDeviceContext::DrawCubicBezierPath(Point bezier[4]) @@ -154,7 +154,7 @@ void BBoxDeviceContext::DrawCubicBezierPath(Point bezier[4]) BoundingBox::ApproximateBezierBoundingBox(bezier, pos, width, height, minYPos, maxYPos); // LogDebug("x %d, y %d, width %d, height %d", pos.x, pos.y, width, height); - UpdateBB(pos.x, pos.y, pos.x + width, pos.y + height); + this->UpdateBB(pos.x, pos.y, pos.x + width, pos.y + height); } void BBoxDeviceContext::DrawCubicBezierPathFilled(Point bezier1[4], Point bezier2[4]) @@ -165,20 +165,20 @@ void BBoxDeviceContext::DrawCubicBezierPathFilled(Point bezier1[4], Point bezier BoundingBox::ApproximateBezierBoundingBox(bezier1, pos, width, height, minYPos, maxYPos); // LogDebug("x %d, y %d, width %d, height %d", pos.x, pos.y, width, height); - UpdateBB(pos.x, pos.y, pos.x + width, pos.y + height); + this->UpdateBB(pos.x, pos.y, pos.x + width, pos.y + height); BoundingBox::ApproximateBezierBoundingBox(bezier2, pos, width, height, minYPos, maxYPos); // LogDebug("x %d, y %d, width %d, height %d", pos.x, pos.y, width, height); - UpdateBB(pos.x, pos.y, pos.x + width, pos.y + height); + this->UpdateBB(pos.x, pos.y, pos.x + width, pos.y + height); } void BBoxDeviceContext::DrawCircle(int x, int y, int radius) { - DrawEllipse(x - radius, y - radius, 2 * radius, 2 * radius); + this->DrawEllipse(x - radius, y - radius, 2 * radius, 2 * radius); } void BBoxDeviceContext::DrawEllipse(int x, int y, int width, int height) { - UpdateBB(x, y, x + width, y + height); + this->UpdateBB(x, y, x + width, y + height); } void BBoxDeviceContext::DrawEllipticArc(int x, int y, int width, int height, double start, double end) @@ -188,7 +188,7 @@ void BBoxDeviceContext::DrawEllipticArc(int x, int y, int width, int height, dou penWidth += 1; } // needs to be fixed - for now uses the entire rectangle - UpdateBB(x - penWidth / 2, y - penWidth / 2, x + width + penWidth / 2, y + height + penWidth / 2); + this->UpdateBB(x - penWidth / 2, y - penWidth / 2, x + width + penWidth / 2, y + height + penWidth / 2); } void BBoxDeviceContext::DrawLine(int x1, int y1, int x2, int y2) @@ -214,7 +214,7 @@ void BBoxDeviceContext::DrawLine(int x1, int y1, int x2, int y2) p1++; } - UpdateBB(x1 - p1, y1 - p1, x2 + p2, y2 + p2); + this->UpdateBB(x1 - p1, y1 - p1, x2 + p2, y2 + p2); } void BBoxDeviceContext::DrawPolygon(int n, Point points[], int xOffset, int yOffset, int fillStyle) @@ -233,12 +233,12 @@ void BBoxDeviceContext::DrawPolygon(int n, Point points[], int xOffset, int yOff if (points[i].y + yOffset < y1) y1 = points[i].y + yOffset; if (points[i].y + yOffset > y2) y2 = points[i].y + yOffset; } - UpdateBB(x1, y1, x2, y2); + this->UpdateBB(x1, y1, x2, y2); } void BBoxDeviceContext::DrawRectangle(int x, int y, int width, int height) { - DrawRoundedRectangle(x, y, width, height, 0); + this->DrawRoundedRectangle(x, y, width, height, 0); } void BBoxDeviceContext::DrawRoundedRectangle(int x, int y, int width, int height, int radius) @@ -258,12 +258,12 @@ void BBoxDeviceContext::DrawRoundedRectangle(int x, int y, int width, int height penWidth += 1; } - UpdateBB(x - penWidth / 2, y - penWidth / 2, x + width + penWidth / 2, y + height + penWidth / 2); + this->UpdateBB(x - penWidth / 2, y - penWidth / 2, x + width + penWidth / 2, y + height + penWidth / 2); } void BBoxDeviceContext::DrawPlaceholder(int x, int y) { - UpdateBB(x, y, x, y); + this->UpdateBB(x, y, x, y); } void BBoxDeviceContext::StartText(int x, int y, data_HORIZONTALALIGNMENT alignment) @@ -320,7 +320,7 @@ void BBoxDeviceContext::DrawText( m_textHeight = height; m_textAscent = 0; m_textDescent = 0; - UpdateBB(m_textX, m_textY, m_textX + m_textWidth, m_textY + m_textHeight); + this->UpdateBB(m_textX, m_textY, m_textX + m_textWidth, m_textY + m_textHeight); } else { @@ -334,7 +334,7 @@ void BBoxDeviceContext::DrawText( } TextExtend extend; - GetTextExtent(wtext, &extend, true); + this->GetTextExtent(wtext, &extend, true); m_textWidth += extend.m_width; // keep that maximum values for ascent and descent m_textAscent = std::max(m_textAscent, extend.m_ascent); @@ -346,7 +346,7 @@ void BBoxDeviceContext::DrawText( else if (m_textAlignment == HORIZONTALALIGNMENT_center) { m_textX -= (extend.m_width / 2); } - UpdateBB(m_textX, m_textY + m_textDescent, m_textX + m_textWidth, m_textY - m_textAscent); + this->UpdateBB(m_textX, m_textY + m_textDescent, m_textX + m_textWidth, m_textY - m_textAscent); } } @@ -378,7 +378,7 @@ void BBoxDeviceContext::DrawMusicText(const std::wstring &text, int x, int y, bo // because we are in the drawing context, y position is already flipped int y_off = y - g_y * m_fontStack.top()->GetPointSize() / glyph->GetUnitsPerEm(); - UpdateBB(x_off, y_off, x_off + g_w * m_fontStack.top()->GetPointSize() / glyph->GetUnitsPerEm(), + this->UpdateBB(x_off, y_off, x_off + g_w * m_fontStack.top()->GetPointSize() / glyph->GetUnitsPerEm(), // idem, y position is flipped y_off - g_h * m_fontStack.top()->GetPointSize() / glyph->GetUnitsPerEm(), smuflGlyph); @@ -391,7 +391,7 @@ void BBoxDeviceContext::DrawSpline(int n, Point points[]) {} void BBoxDeviceContext::DrawSvgShape(int x, int y, int width, int height, pugi::xml_node svg) { - DrawRoundedRectangle(x, y, width, height, 0); + this->DrawRoundedRectangle(x, y, width, height, 0); } void BBoxDeviceContext::UpdateBB(int x1, int y1, int x2, int y2, wchar_t glyph) diff --git a/src/beam.cpp b/src/beam.cpp index a98a5005a7c..a1c313ffc03 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -41,7 +41,7 @@ namespace vrv { BeamSegment::BeamSegment() { - Reset(); + this->Reset(); } BeamSegment::~BeamSegment() @@ -1292,12 +1292,12 @@ static const ClassRegistrar s_factory("beam", BEAM); Beam::Beam() : LayerElement(BEAM, "beam-"), BeamDrawingInterface(), AttBeamedWith(), AttBeamRend(), AttColor(), AttCue() { - RegisterAttClass(ATT_BEAMEDWITH); - RegisterAttClass(ATT_BEAMREND); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_CUE); + this->RegisterAttClass(ATT_BEAMEDWITH); + this->RegisterAttClass(ATT_BEAMREND); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_CUE); - Reset(); + this->Reset(); } Beam::~Beam() {} @@ -1306,10 +1306,10 @@ void Beam::Reset() { LayerElement::Reset(); BeamDrawingInterface::Reset(); - ResetBeamedWith(); - ResetBeamRend(); - ResetColor(); - ResetCue(); + this->ResetBeamedWith(); + this->ResetBeamRend(); + this->ResetColor(); + this->ResetCue(); m_stemSameas = NULL; } @@ -1630,7 +1630,7 @@ void BeamElementCoord::SetClosestNote(data_STEMDIRECTION stemDir) int Beam::CalcLayerOverlap(Doc *doc, Object *beam, int directionBias, int y1, int y2) { - Layer *parentLayer = vrv_cast(GetFirstAncestor(LAYER)); + Layer *parentLayer = vrv_cast(this->GetFirstAncestor(LAYER)); if (!parentLayer) return 0; // Check whether there are elements on other layer in the duration of the current beam. If there are none - stop // here, there's nothing to be done diff --git a/src/beatrpt.cpp b/src/beatrpt.cpp index 30a1119ccda..fd6088351fc 100644 --- a/src/beatrpt.cpp +++ b/src/beatrpt.cpp @@ -36,10 +36,10 @@ static const ClassRegistrar s_factory("beatRpt", BEATRPT); BeatRpt::BeatRpt() : LayerElement(BEATRPT, "beatrpt-"), AttColor(), AttBeatRptLog(), AttBeatRptVis() { - RegisterAttClass(ATT_BEATRPTLOG); - RegisterAttClass(ATT_BEATRPTVIS); - RegisterAttClass(ATT_COLOR); - Reset(); + this->RegisterAttClass(ATT_BEATRPTLOG); + this->RegisterAttClass(ATT_BEATRPTVIS); + this->RegisterAttClass(ATT_COLOR); + this->Reset(); } BeatRpt::~BeatRpt() {} @@ -47,9 +47,9 @@ BeatRpt::~BeatRpt() {} void BeatRpt::Reset() { LayerElement::Reset(); - ResetBeatRptLog(); - ResetBeatRptVis(); - ResetColor(); + this->ResetBeatRptLog(); + this->ResetBeatRptVis(); + this->ResetColor(); m_scoreTimeOnset = 0.0; } diff --git a/src/boundingbox.cpp b/src/boundingbox.cpp index 76843d58de9..7d3b7718852 100644 --- a/src/boundingbox.cpp +++ b/src/boundingbox.cpp @@ -39,7 +39,7 @@ BoundingBox::BoundingBox() rect2[0] = Point(25, 25); rect2[1] = Point(100, 100); - ResetBoundingBox(); + this->ResetBoundingBox(); } bool BoundingBox::Is(const std::vector &classIds) const @@ -54,7 +54,7 @@ void BoundingBox::UpdateContentBBoxX(int x1, int x2) int minX = std::min(x1, x2); int maxX = std::max(x1, x2); - int drawingX = GetDrawingX(); + int drawingX = this->GetDrawingX(); minX -= drawingX; maxX -= drawingX; @@ -63,7 +63,7 @@ void BoundingBox::UpdateContentBBoxX(int x1, int x2) if (m_contentBB_x2 < maxX) m_contentBB_x2 = maxX; // LogDebug("CB Is: %i %i %i %i %s", m_contentBB_x1,m_contentBB_y1, m_contentBB_x2, m_contentBB_y2, - // GetClassName().c_str()); + // this->GetClassName().c_str()); } void BoundingBox::UpdateContentBBoxY(int y1, int y2) @@ -73,7 +73,7 @@ void BoundingBox::UpdateContentBBoxY(int y1, int y2) int min_y = std::min(y1, y2); int max_y = std::max(y1, y2); - int drawingY = GetDrawingY(); + int drawingY = this->GetDrawingY(); min_y -= drawingY; max_y -= drawingY; @@ -82,7 +82,7 @@ void BoundingBox::UpdateContentBBoxY(int y1, int y2) if (m_contentBB_y2 < max_y) m_contentBB_y2 = max_y; // LogDebug("CB Is: %i %i %i %i %s", m_contentBB_x1,m_contentBB_y1, m_contentBB_x2, m_contentBB_y2, - // GetClassName().c_str()); + // this->GetClassName().c_str()); } void BoundingBox::UpdateSelfBBoxX(int x1, int x2) @@ -92,7 +92,7 @@ void BoundingBox::UpdateSelfBBoxX(int x1, int x2) int minX = std::min(x1, x2); int maxX = std::max(x1, x2); - int drawingX = GetDrawingX(); + int drawingX = this->GetDrawingX(); minX -= drawingX; maxX -= drawingX; @@ -110,7 +110,7 @@ void BoundingBox::UpdateSelfBBoxY(int y1, int y2) int min_y = std::min(y1, y2); int max_y = std::max(y1, y2); - int drawingY = GetDrawingY(); + int drawingY = this->GetDrawingY(); min_y -= drawingY; max_y -= drawingY; @@ -159,7 +159,7 @@ bool BoundingBox::HasEmptyBB() const bool BoundingBox::HasContentBB() const { - return (HasContentHorizontalBB() && HasContentVerticalBB()); + return (this->HasContentHorizontalBB() && this->HasContentVerticalBB()); } bool BoundingBox::HasContentHorizontalBB() const @@ -174,7 +174,7 @@ bool BoundingBox::HasContentVerticalBB() const bool BoundingBox::HasSelfBB() const { - return (HasSelfHorizontalBB() && HasSelfVerticalBB()); + return (this->HasSelfHorizontalBB() && this->HasSelfVerticalBB()); } bool BoundingBox::HasSelfHorizontalBB() const @@ -1078,7 +1078,7 @@ SegmentedLine::SegmentedLine(int start, int end) void SegmentedLine::GetStartEnd(int &start, int &end, int idx) { assert(idx >= 0); - assert(idx < GetSegmentCount()); + assert(idx < this->GetSegmentCount()); start = m_segments.at(idx).first; end = m_segments.at(idx).second; diff --git a/src/bracketspan.cpp b/src/bracketspan.cpp index 33b04c09a28..2fa5b35a4c1 100644 --- a/src/bracketspan.cpp +++ b/src/bracketspan.cpp @@ -35,13 +35,13 @@ BracketSpan::BracketSpan() , AttLineRend() , AttLineRendBase() { - RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_BRACKETSPANLOG); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_LINEREND); - RegisterAttClass(ATT_LINERENDBASE); + this->RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + this->RegisterAttClass(ATT_BRACKETSPANLOG); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_LINEREND); + this->RegisterAttClass(ATT_LINERENDBASE); - Reset(); + this->Reset(); } BracketSpan::~BracketSpan() {} @@ -50,10 +50,10 @@ void BracketSpan::Reset() { ControlElement::Reset(); TimeSpanningInterface::Reset(); - ResetBracketSpanLog(); - ResetColor(); - ResetLineRend(); - ResetLineRendBase(); + this->ResetBracketSpanLog(); + this->ResetColor(); + this->ResetLineRend(); + this->ResetLineRendBase(); } //---------------------------------------------------------------------------- diff --git a/src/breath.cpp b/src/breath.cpp index a4af1bcd749..0fbcd79d707 100644 --- a/src/breath.cpp +++ b/src/breath.cpp @@ -25,11 +25,11 @@ static const ClassRegistrar s_factory("breath", BREATH); Breath::Breath() : ControlElement(BREATH, "breath-"), TimePointInterface(), AttColor(), AttPlacementRelStaff() { - RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_PLACEMENTRELSTAFF); + this->RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_PLACEMENTRELSTAFF); - Reset(); + this->Reset(); } Breath::~Breath() {} @@ -38,8 +38,8 @@ void Breath::Reset() { ControlElement::Reset(); TimePointInterface::Reset(); - ResetColor(); - ResetPlacementRelStaff(); + this->ResetColor(); + this->ResetPlacementRelStaff(); } } // namespace vrv diff --git a/src/btrem.cpp b/src/btrem.cpp index d092d1e0351..dd0440a5c71 100644 --- a/src/btrem.cpp +++ b/src/btrem.cpp @@ -32,10 +32,10 @@ static const ClassRegistrar s_factory("btrem", BTREM); BTrem::BTrem() : LayerElement(BTREM, "btrem-"), AttBTremLog(), AttTremMeasured() { - RegisterAttClass(ATT_BTREMLOG); - RegisterAttClass(ATT_TREMMEASURED); + this->RegisterAttClass(ATT_BTREMLOG); + this->RegisterAttClass(ATT_TREMMEASURED); - Reset(); + this->Reset(); } BTrem::~BTrem() {} @@ -43,8 +43,8 @@ BTrem::~BTrem() {} void BTrem::Reset() { LayerElement::Reset(); - ResetBTremLog(); - ResetTremMeasured(); + this->ResetBTremLog(); + this->ResetTremMeasured(); } bool BTrem::IsSupportedChild(Object *child) diff --git a/src/caesura.cpp b/src/caesura.cpp index a4b3df3474b..a5452bc93cf 100644 --- a/src/caesura.cpp +++ b/src/caesura.cpp @@ -25,11 +25,11 @@ static const ClassRegistrar s_factory("caesura", CAESURA); Caesura::Caesura() : ControlElement(CAESURA, "caesura-"), TimePointInterface(), AttColor(), AttPlacementRelStaff() { - RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_PLACEMENTRELSTAFF); + this->RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_PLACEMENTRELSTAFF); - Reset(); + this->Reset(); } Caesura::~Caesura() {} @@ -38,8 +38,8 @@ void Caesura::Reset() { ControlElement::Reset(); TimePointInterface::Reset(); - ResetColor(); - ResetPlacementRelStaff(); + this->ResetColor(); + this->ResetPlacementRelStaff(); } } // namespace vrv diff --git a/src/choice.cpp b/src/choice.cpp index af9c1b4ab7b..22b43ae10e7 100644 --- a/src/choice.cpp +++ b/src/choice.cpp @@ -34,14 +34,14 @@ Choice::Choice() : EditorialElement(CHOICE, "choice-") { m_level = EDITORIAL_UNDEFINED; - Reset(); + this->Reset(); } Choice::Choice(EditorialLevel level) : EditorialElement(CHOICE, "choice-") { m_level = level; - Reset(); + this->Reset(); } void Choice::Reset() diff --git a/src/chord.cpp b/src/chord.cpp index c5fd0f9ccde..77b983a7fae 100644 --- a/src/chord.cpp +++ b/src/chord.cpp @@ -78,16 +78,16 @@ Chord::Chord() , AttTiePresent() , AttVisibility() { - RegisterInterface(DurationInterface::GetAttClasses(), DurationInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_CUE); - RegisterAttClass(ATT_GRACED); - RegisterAttClass(ATT_STEMS); - RegisterAttClass(ATT_STEMSCMN); - RegisterAttClass(ATT_TIEPRESENT); - RegisterAttClass(ATT_VISIBILITY); + this->RegisterInterface(DurationInterface::GetAttClasses(), DurationInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_CUE); + this->RegisterAttClass(ATT_GRACED); + this->RegisterAttClass(ATT_STEMS); + this->RegisterAttClass(ATT_STEMSCMN); + this->RegisterAttClass(ATT_TIEPRESENT); + this->RegisterAttClass(ATT_VISIBILITY); - Reset(); + this->Reset(); } Chord::~Chord() @@ -101,13 +101,13 @@ void Chord::Reset() DrawingListInterface::Reset(); StemmedDrawingInterface::Reset(); DurationInterface::Reset(); - ResetColor(); - ResetCue(); - ResetGraced(); - ResetStems(); - ResetStemsCmn(); - ResetTiePresent(); - ResetVisibility(); + this->ResetColor(); + this->ResetCue(); + this->ResetGraced(); + this->ResetStems(); + this->ResetStemsCmn(); + this->ResetTiePresent(); + this->ResetVisibility(); ClearClusters(); } @@ -490,7 +490,7 @@ int Chord::AdjustOverlappingLayers( otherElementLocations.insert(note->GetDrawingLoc()); } } - const ArrayOfObjects *notes = GetList(this); + const ArrayOfObjects *notes = this->GetList(this); assert(notes); // get current chord positions std::set chordElementLocations; @@ -500,8 +500,8 @@ int Chord::AdjustOverlappingLayers( chordElementLocations.insert(note->GetDrawingLoc()); } const int expectedElementsInUnison - = CountElementsInUnison(chordElementLocations, otherElementLocations, GetDrawingStemDir()); - const bool isLowerPosition = (STEMDIRECTION_down == GetDrawingStemDir() && (otherElementLocations.size() > 0) + = CountElementsInUnison(chordElementLocations, otherElementLocations, this->GetDrawingStemDir()); + const bool isLowerPosition = (STEMDIRECTION_down == this->GetDrawingStemDir() && (otherElementLocations.size() > 0) && (*chordElementLocations.begin() >= *otherElementLocations.begin())); int actualElementsInUnison = 0; // process each note of the chord separately, storing locations in the set @@ -520,7 +520,7 @@ int Chord::AdjustOverlappingLayers( isUnison = true; } else if (margin) { - SetDrawingXRel(GetDrawingXRel() + margin); + this->SetDrawingXRel(this->GetDrawingXRel() + margin); return margin; } return 0; @@ -828,7 +828,7 @@ int Chord::PrepareLayerElementParts(FunctorParams *functorParams) if (currentStem->DeleteChild(currentFlag)) currentFlag = NULL; } - SetDrawingStem(currentStem); + this->SetDrawingStem(currentStem); // Also set the drawing stem object (or NULL) to all child notes const ArrayOfObjects *childList = this->GetList(this); // make sure it's initialized diff --git a/src/clef.cpp b/src/clef.cpp index 8fa6e6ea3b0..8daecb5f291 100644 --- a/src/clef.cpp +++ b/src/clef.cpp @@ -30,15 +30,15 @@ static const ClassRegistrar s_factory("clef", CLEF); Clef::Clef() : LayerElement(CLEF, "clef-"), AttClefShape(), AttColor(), AttLineLoc(), AttOctaveDisplacement(), AttVisibility() { - RegisterAttClass(ATT_CLEFSHAPE); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_ENCLOSINGCHARS); - RegisterAttClass(ATT_EXTSYM); - RegisterAttClass(ATT_LINELOC); - RegisterAttClass(ATT_OCTAVEDISPLACEMENT); - RegisterAttClass(ATT_VISIBILITY); - - Reset(); + this->RegisterAttClass(ATT_CLEFSHAPE); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_ENCLOSINGCHARS); + this->RegisterAttClass(ATT_EXTSYM); + this->RegisterAttClass(ATT_LINELOC); + this->RegisterAttClass(ATT_OCTAVEDISPLACEMENT); + this->RegisterAttClass(ATT_VISIBILITY); + + this->Reset(); } Clef::~Clef() {} @@ -46,13 +46,13 @@ Clef::~Clef() {} void Clef::Reset() { LayerElement::Reset(); - ResetClefShape(); - ResetColor(); - ResetEnclosingChars(); - ResetExtSym(); - ResetLineLoc(); - ResetOctaveDisplacement(); - ResetVisibility(); + this->ResetClefShape(); + this->ResetColor(); + this->ResetEnclosingChars(); + this->ResetExtSym(); + this->ResetLineLoc(); + this->ResetOctaveDisplacement(); + this->ResetVisibility(); } int Clef::GetClefLocOffset() const @@ -64,28 +64,28 @@ int Clef::GetClefLocOffset() const } int offset = 0; - if (GetShape() == CLEFSHAPE_G) { + if (this->GetShape() == CLEFSHAPE_G) { offset = -4; } - else if (GetShape() == CLEFSHAPE_GG) { + else if (this->GetShape() == CLEFSHAPE_GG) { offset = 3; } - else if (GetShape() == CLEFSHAPE_F) { + else if (this->GetShape() == CLEFSHAPE_F) { offset = 4; } - offset += (GetLine() - 1) * 2; + offset += (this->GetLine() - 1) * 2; int disPlace = 0; - if (GetDisPlace() == STAFFREL_basic_above) + if (this->GetDisPlace() == STAFFREL_basic_above) disPlace = -1; - else if (GetDisPlace() == STAFFREL_basic_below) + else if (this->GetDisPlace() == STAFFREL_basic_below) disPlace = 1; // ignore disPlace for gClef8vbOld - if (GetShape() == CLEFSHAPE_GG) disPlace = 0; + if (this->GetShape() == CLEFSHAPE_GG) disPlace = 0; - if ((disPlace != 0) && (GetDis() != OCTAVE_DIS_NONE)) offset += (disPlace * (GetDis() - 1)); + if ((disPlace != 0) && (this->GetDis() != OCTAVE_DIS_NONE)) offset += (disPlace * (this->GetDis() - 1)); return offset; } @@ -97,29 +97,29 @@ int Clef::GetClefLocOffset() const wchar_t Clef::GetClefGlyph(const data_NOTATIONTYPE notationtype) const { // If there is glyph.num, prioritize it - if (HasGlyphNum()) { - wchar_t code = GetGlyphNum(); + if (this->HasGlyphNum()) { + wchar_t code = this->GetGlyphNum(); if (NULL != Resources::GetGlyph(code)) return code; } // If there is glyph.name (second priority) - else if (HasGlyphName()) { - wchar_t code = Resources::GetGlyphCode(GetGlyphName()); + else if (this->HasGlyphName()) { + wchar_t code = Resources::GetGlyphCode(this->GetGlyphName()); if (NULL != Resources::GetGlyph(code)) return code; } switch (notationtype) { case NOTATIONTYPE_neume: // neume clefs - return (GetShape() == CLEFSHAPE_F) ? SMUFL_E902_chantFclef : SMUFL_E906_chantCclef; + return (this->GetShape() == CLEFSHAPE_F) ? SMUFL_E902_chantFclef : SMUFL_E906_chantCclef; break; case NOTATIONTYPE_mensural: case NOTATIONTYPE_mensural_white: // mensural clefs - switch (GetShape()) { + switch (this->GetShape()) { case CLEFSHAPE_G: return SMUFL_E901_mensuralGclefPetrucci; break; case CLEFSHAPE_F: return SMUFL_E904_mensuralFclefPetrucci; break; case CLEFSHAPE_C: - switch (GetLine()) { + switch (this->GetLine()) { case 1: return SMUFL_E907_mensuralCclefPetrucciPosLowest; break; case 2: return SMUFL_E908_mensuralCclefPetrucciPosLow; break; case 3: return SMUFL_E909_mensuralCclefPetrucciPosMiddle; break; @@ -130,7 +130,7 @@ wchar_t Clef::GetClefGlyph(const data_NOTATIONTYPE notationtype) const default: return SMUFL_E909_mensuralCclefPetrucciPosMiddle; break; } case NOTATIONTYPE_mensural_black: - switch (GetShape()) { + switch (this->GetShape()) { case CLEFSHAPE_C: return SMUFL_E906_chantCclef; break; case CLEFSHAPE_F: return SMUFL_E902_chantFclef; break; default: @@ -140,9 +140,9 @@ wchar_t Clef::GetClefGlyph(const data_NOTATIONTYPE notationtype) const [[fallthrough]]; default: // cmn clefs - switch (GetShape()) { + switch (this->GetShape()) { case CLEFSHAPE_G: - switch (GetDis()) { + switch (this->GetDis()) { case OCTAVE_DIS_8: return (this->GetDisPlace() == STAFFREL_basic_above) ? SMUFL_E053_gClef8va : SMUFL_E052_gClef8vb; @@ -155,7 +155,7 @@ wchar_t Clef::GetClefGlyph(const data_NOTATIONTYPE notationtype) const } case CLEFSHAPE_GG: return SMUFL_E055_gClef8vbOld; case CLEFSHAPE_F: - switch (GetDis()) { + switch (this->GetDis()) { case OCTAVE_DIS_8: return (this->GetDisPlace() == STAFFREL_basic_above) ? SMUFL_E065_fClef8va : SMUFL_E064_fClef8vb; @@ -167,7 +167,7 @@ wchar_t Clef::GetClefGlyph(const data_NOTATIONTYPE notationtype) const default: return SMUFL_E062_fClef; break; } case CLEFSHAPE_C: - switch (GetDis()) { + switch (this->GetDis()) { case OCTAVE_DIS_8: return SMUFL_E05D_cClef8vb; break; default: return SMUFL_E05C_cClef; break; } @@ -195,7 +195,7 @@ int Clef::AdjustBeams(FunctorParams *functorParams) Staff *staff = this->GetAncestorStaff(); - auto currentShapeIter = topToMiddleProportions.find(GetShape()); + auto currentShapeIter = topToMiddleProportions.find(this->GetShape()); if (currentShapeIter == topToMiddleProportions.end()) return FUNCTOR_CONTINUE; // const int directionBias = (vrv_cast(params->m_beam)->m_drawingPlace == BEAMPLACE_above) ? 1 : -1; @@ -205,7 +205,7 @@ int Clef::AdjustBeams(FunctorParams *functorParams) // Proportion of the glyph about Y point is defined in the topToMiddleProportions map and used when // left and right margins are calculated const int clefPosition = staff->GetDrawingY() - - params->m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) * (staff->m_drawingLines - GetLine()); + - params->m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) * (staff->m_drawingLines - this->GetLine()); const int clefGlyphHeight = params->m_doc->GetGlyphHeight(currentShapeIter->second.first, staff->m_drawingStaffSize, true); const int beamWidth = params->m_doc->GetDrawingBeamWidth(staff->m_drawingStaffSize, false); diff --git a/src/controlelement.cpp b/src/controlelement.cpp index 5b9153b4457..aa97697e515 100644 --- a/src/controlelement.cpp +++ b/src/controlelement.cpp @@ -29,31 +29,31 @@ namespace vrv { ControlElement::ControlElement() : FloatingObject(CONTROL_ELEMENT, "ce"), LinkingInterface(), AttLabelled(), AttTyped() { - RegisterInterface(LinkingInterface::GetAttClasses(), LinkingInterface::IsInterface()); - RegisterAttClass(ATT_LABELLED); - RegisterAttClass(ATT_TYPED); + this->RegisterInterface(LinkingInterface::GetAttClasses(), LinkingInterface::IsInterface()); + this->RegisterAttClass(ATT_LABELLED); + this->RegisterAttClass(ATT_TYPED); - Reset(); + this->Reset(); } ControlElement::ControlElement(ClassId classId) : FloatingObject(classId, "ce"), LinkingInterface(), AttLabelled(), AttTyped() { - RegisterInterface(LinkingInterface::GetAttClasses(), LinkingInterface::IsInterface()); - RegisterAttClass(ATT_LABELLED); - RegisterAttClass(ATT_TYPED); + this->RegisterInterface(LinkingInterface::GetAttClasses(), LinkingInterface::IsInterface()); + this->RegisterAttClass(ATT_LABELLED); + this->RegisterAttClass(ATT_TYPED); - Reset(); + this->Reset(); } ControlElement::ControlElement(ClassId classId, const std::string &classIdStr) : FloatingObject(classId, classIdStr), LinkingInterface(), AttLabelled(), AttTyped() { - RegisterInterface(LinkingInterface::GetAttClasses(), LinkingInterface::IsInterface()); - RegisterAttClass(ATT_LABELLED); - RegisterAttClass(ATT_TYPED); + this->RegisterInterface(LinkingInterface::GetAttClasses(), LinkingInterface::IsInterface()); + this->RegisterAttClass(ATT_LABELLED); + this->RegisterAttClass(ATT_TYPED); - Reset(); + this->Reset(); } ControlElement::~ControlElement() {} @@ -62,8 +62,8 @@ void ControlElement::Reset() { FloatingObject::Reset(); LinkingInterface::Reset(); - ResetLabelled(); - ResetTyped(); + this->ResetLabelled(); + this->ResetTyped(); } data_HORIZONTALALIGNMENT ControlElement::GetChildRendAlignment() diff --git a/src/corr.cpp b/src/corr.cpp index e8900690f6e..29427e0ae30 100644 --- a/src/corr.cpp +++ b/src/corr.cpp @@ -25,9 +25,9 @@ static const ClassRegistrar s_factory("corr", CORR); Corr::Corr() : EditorialElement(CORR, "corr-"), AttSource() { - RegisterAttClass(ATT_SOURCE); + this->RegisterAttClass(ATT_SOURCE); - Reset(); + this->Reset(); } Corr::~Corr() {} @@ -35,7 +35,7 @@ Corr::~Corr() {} void Corr::Reset() { EditorialElement::Reset(); - ResetSource(); + this->ResetSource(); } //---------------------------------------------------------------------------- diff --git a/src/course.cpp b/src/course.cpp index 26a1d9d02da..2cf1b2183c6 100644 --- a/src/course.cpp +++ b/src/course.cpp @@ -23,12 +23,12 @@ static const ClassRegistrar s_factory("course", COURSE); Course::Course() : Object(COURSE, "course-"), AttAccidental(), AttNNumberLike(), AttOctave(), AttPitch() { - RegisterAttClass(ATT_ACCIDENTAL); - RegisterAttClass(ATT_NNUMBERLIKE); - RegisterAttClass(ATT_OCTAVE); - RegisterAttClass(ATT_PITCH); + this->RegisterAttClass(ATT_ACCIDENTAL); + this->RegisterAttClass(ATT_NNUMBERLIKE); + this->RegisterAttClass(ATT_OCTAVE); + this->RegisterAttClass(ATT_PITCH); - Reset(); + this->Reset(); } Course::~Course() {} @@ -36,10 +36,10 @@ Course::~Course() {} void Course::Reset() { Object::Reset(); - ResetAccidental(); - ResetNNumberLike(); - ResetOctave(); - ResetPitch(); + this->ResetAccidental(); + this->ResetNNumberLike(); + this->ResetOctave(); + this->ResetPitch(); } bool Course::IsSupportedChild(Object *child) diff --git a/src/custos.cpp b/src/custos.cpp index b725e5fd750..954a1e13dd4 100644 --- a/src/custos.cpp +++ b/src/custos.cpp @@ -25,12 +25,12 @@ static const ClassRegistrar s_factory("custos", CUSTOS); Custos::Custos() : LayerElement(CUSTOS, "custos-"), PitchInterface(), PositionInterface(), AttColor(), AttExtSym() { - RegisterInterface(PitchInterface::GetAttClasses(), PitchInterface::IsInterface()); - RegisterInterface(PositionInterface::GetAttClasses(), PositionInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_EXTSYM); + this->RegisterInterface(PitchInterface::GetAttClasses(), PitchInterface::IsInterface()); + this->RegisterInterface(PositionInterface::GetAttClasses(), PositionInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_EXTSYM); - Reset(); + this->Reset(); } Custos::~Custos() {} @@ -40,8 +40,8 @@ void Custos::Reset() LayerElement::Reset(); PitchInterface::Reset(); PositionInterface::Reset(); - ResetColor(); - ResetExtSym(); + this->ResetColor(); + this->ResetExtSym(); } bool Custos::IsSupportedChild(Object *child) @@ -58,13 +58,13 @@ bool Custos::IsSupportedChild(Object *child) wchar_t Custos::GetCustosGlyph(const data_NOTATIONTYPE notationtype) const { // If there is glyph.num, prioritize it - if (HasGlyphNum()) { - wchar_t code = GetGlyphNum(); + if (this->HasGlyphNum()) { + wchar_t code = this->GetGlyphNum(); if (NULL != Resources::GetGlyph(code)) return code; } // If there is glyph.name (second priority) - else if (HasGlyphName()) { - wchar_t code = Resources::GetGlyphCode(GetGlyphName()); + else if (this->HasGlyphName()) { + wchar_t code = Resources::GetGlyphCode(this->GetGlyphName()); if (NULL != Resources::GetGlyph(code)) return code; } diff --git a/src/damage.cpp b/src/damage.cpp index e4db04543ff..01922aab5dd 100644 --- a/src/damage.cpp +++ b/src/damage.cpp @@ -25,9 +25,9 @@ static const ClassRegistrar s_factory("damage", DAMAGE); Damage::Damage() : EditorialElement(DAMAGE, "damage-"), AttSource() { - RegisterAttClass(ATT_SOURCE); + this->RegisterAttClass(ATT_SOURCE); - Reset(); + this->Reset(); } Damage::~Damage() {} @@ -35,7 +35,7 @@ Damage::~Damage() {} void Damage::Reset() { EditorialElement::Reset(); - ResetSource(); + this->ResetSource(); } //---------------------------------------------------------------------------- diff --git a/src/del.cpp b/src/del.cpp index 566bbfe3a97..3274ceed36f 100644 --- a/src/del.cpp +++ b/src/del.cpp @@ -25,9 +25,9 @@ static const ClassRegistrar s_factory("del", DEL); Del::Del() : EditorialElement(DEL, "del-"), AttSource() { - RegisterAttClass(ATT_SOURCE); + this->RegisterAttClass(ATT_SOURCE); - Reset(); + this->Reset(); } Del::~Del() {} @@ -35,7 +35,7 @@ Del::~Del() {} void Del::Reset() { EditorialElement::Reset(); - ResetSource(); + this->ResetSource(); } //---------------------------------------------------------------------------- diff --git a/src/devicecontext.cpp b/src/devicecontext.cpp index 7b90e08b10f..78281819060 100644 --- a/src/devicecontext.cpp +++ b/src/devicecontext.cpp @@ -175,7 +175,7 @@ void DeviceContext::ReactivateGraphic() void DeviceContext::GetTextExtent(const std::string &string, TextExtend *extend, bool typeSize) { std::wstring wtext(string.begin(), string.end()); - GetTextExtent(wtext, extend, typeSize); + this->GetTextExtent(wtext, extend, typeSize); } void DeviceContext::GetTextExtent(const std::wstring &string, TextExtend *extend, bool typeSize) diff --git a/src/dir.cpp b/src/dir.cpp index fb8efbbecf6..10dd6198676 100644 --- a/src/dir.cpp +++ b/src/dir.cpp @@ -37,14 +37,14 @@ Dir::Dir() , AttLineRendBase() , AttVerticalGroup() { - RegisterInterface(TextDirInterface::GetAttClasses(), TextDirInterface::IsInterface()); - RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_LANG); - RegisterAttClass(ATT_EXTENDER); - RegisterAttClass(ATT_LINERENDBASE); - RegisterAttClass(ATT_VERTICALGROUP); - - Reset(); + this->RegisterInterface(TextDirInterface::GetAttClasses(), TextDirInterface::IsInterface()); + this->RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + this->RegisterAttClass(ATT_LANG); + this->RegisterAttClass(ATT_EXTENDER); + this->RegisterAttClass(ATT_LINERENDBASE); + this->RegisterAttClass(ATT_VERTICALGROUP); + + this->Reset(); } Dir::~Dir() {} @@ -54,10 +54,10 @@ void Dir::Reset() ControlElement::Reset(); TextDirInterface::Reset(); TimeSpanningInterface::Reset(); - ResetExtender(); - ResetLang(); - ResetLineRendBase(); - ResetVerticalGroup(); + this->ResetExtender(); + this->ResetLang(); + this->ResetLineRendBase(); + this->ResetVerticalGroup(); } bool Dir::IsSupportedChild(Object *child) @@ -76,7 +76,7 @@ bool Dir::IsSupportedChild(Object *child) bool Dir::AreChildrenAlignedTo(data_HORIZONTALALIGNMENT alignment) const { - const ArrayOfObjects *children = GetChildren(); + const ArrayOfObjects *children = this->GetChildren(); bool hasHalign = std::any_of(children->begin(), children->end(), [&alignment](Object *child) { AttHorizontalAlign *hAlign = dynamic_cast(child); return (hAlign && (hAlign->GetHalign() == alignment)); diff --git a/src/doc.cpp b/src/doc.cpp index e4af6b680bc..6e511316910 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -76,7 +76,7 @@ Doc::Doc() : Object(DOC, "doc-") { m_options = new Options(); - Reset(); + this->Reset(); } Doc::~Doc() @@ -163,7 +163,7 @@ bool Doc::GenerateDocumentScoreDef() return false; } - GetCurrentScoreDef()->Reset(); + this->GetCurrentScoreDef()->Reset(); StaffGrp *staffGrp = new StaffGrp(); for (auto &object : staves) { Staff *staff = vrv_cast(object); @@ -174,7 +174,7 @@ bool Doc::GenerateDocumentScoreDef() if (!measure->IsMeasuredMusic()) staffDef->SetNotationtype(NOTATIONTYPE_mensural); staffGrp->AddChild(staffDef); } - GetCurrentScoreDef()->AddChild(staffGrp); + this->GetCurrentScoreDef()->AddChild(staffGrp); LogMessage("ScoreDef generated"); @@ -183,7 +183,7 @@ bool Doc::GenerateDocumentScoreDef() bool Doc::GenerateFooter() { - if (GetCurrentScoreDef()->FindDescendantByType(PGFOOT)) { + if (this->GetCurrentScoreDef()->FindDescendantByType(PGFOOT)) { return false; } @@ -192,33 +192,33 @@ bool Doc::GenerateFooter() pgFoot->IsGenerated(true); pgFoot->LoadFooter(); pgFoot->SetType("autogenerated"); - GetCurrentScoreDef()->AddChild(pgFoot); + this->GetCurrentScoreDef()->AddChild(pgFoot); PgFoot2 *pgFoot2 = new PgFoot2(); pgFoot2->IsGenerated(true); pgFoot2->LoadFooter(); pgFoot2->SetType("autogenerated"); - GetCurrentScoreDef()->AddChild(pgFoot2); + this->GetCurrentScoreDef()->AddChild(pgFoot2); return true; } bool Doc::GenerateHeader() { - if (GetCurrentScoreDef()->FindDescendantByType(PGHEAD)) return false; + if (this->GetCurrentScoreDef()->FindDescendantByType(PGHEAD)) return false; PgHead *pgHead = new PgHead(); // We mark it as generated for not having it written in the output pgHead->IsGenerated(true); pgHead->GenerateFromMEIHeader(m_header); pgHead->SetType("autogenerated"); - GetCurrentScoreDef()->AddChild(pgHead); + this->GetCurrentScoreDef()->AddChild(pgHead); PgHead2 *pgHead2 = new PgHead2(); pgHead2->IsGenerated(true); pgHead2->AddPageNum(HORIZONTALALIGNMENT_center, VERTICALALIGNMENT_top); pgHead2->SetType("autogenerated"); - GetCurrentScoreDef()->AddChild(pgHead2); + this->GetCurrentScoreDef()->AddChild(pgHead2); return true; } @@ -254,7 +254,7 @@ void Doc::CalculateMidiTimemap() m_MIDITimemapTempo = 0.0; // This happens if the document was never cast off (breaks none option in the toolkit) - if (!m_drawingPage && GetPageCount() == 1) { + if (!m_drawingPage && this->GetPageCount() == 1) { Page *page = this->SetDrawingPage(0); if (!page) { return; @@ -266,8 +266,8 @@ void Doc::CalculateMidiTimemap() double tempo = MIDI_TEMPO; // Set tempo - if (GetCurrentScoreDef()->HasMidiBpm()) { - tempo = GetCurrentScoreDef()->GetMidiBpm(); + if (this->GetCurrentScoreDef()->HasMidiBpm()) { + tempo = this->GetCurrentScoreDef()->GetMidiBpm(); } // We first calculate the maximum duration of each measure @@ -305,8 +305,8 @@ void Doc::ExportMIDI(smf::MidiFile *midiFile) double tempo = MIDI_TEMPO; // set MIDI tempo - if (GetCurrentScoreDef()->HasMidiBpm()) { - tempo = GetCurrentScoreDef()->GetMidiBpm(); + if (this->GetCurrentScoreDef()->HasMidiBpm()) { + tempo = this->GetCurrentScoreDef()->GetMidiBpm(); } midiFile->addTempo(0, 0, tempo); @@ -336,7 +336,7 @@ void Doc::ExportMIDI(smf::MidiFile *midiFile) staves != prepareProcessingListsParams.m_layerTree.child.end(); ++staves) { int transSemi = 0; - if (StaffDef *staffDef = GetCurrentScoreDef()->GetStaffDef(staves->first)) { + if (StaffDef *staffDef = this->GetCurrentScoreDef()->GetStaffDef(staves->first)) { // get the transposition (semi-tone) value for the staff if (staffDef->HasTransSemi()) transSemi = staffDef->GetTransSemi(); midiTrack = staffDef->GetN(); @@ -369,7 +369,7 @@ void Doc::ExportMIDI(smf::MidiFile *midiFile) if (!trackName.empty()) midiFile->addTrackName(midiTrack, 0, trackName); } // set MIDI time signature - MeterSig *meterSig = dynamic_cast(GetCurrentScoreDef()->FindDescendantByType(METERSIG)); + MeterSig *meterSig = dynamic_cast(this->GetCurrentScoreDef()->FindDescendantByType(METERSIG)); if (meterSig && meterSig->HasCount()) { midiFile->addTimeSignature(midiTrack, 0, meterSig->GetTotalCount(), meterSig->GetUnit()); } @@ -770,7 +770,7 @@ void Doc::PrepareDrawing() this->Process(&prepareDynamEnclosure, NULL); Functor scoreDefSetGrpSym(&Object::ScoreDefSetGrpSym); - GetCurrentScoreDef()->Process(&scoreDefSetGrpSym, NULL); + this->GetCurrentScoreDef()->Process(&scoreDefSetGrpSym, NULL); // LogElapsedTimeEnd ("Preparing drawing"); @@ -827,7 +827,7 @@ void Doc::ScoreDefSetGrpSymDoc() // Group symbols need to be resolved using scoreDef, since there might be @starid/@endid attributes that determine // their positioning Functor scoreDefSetGrpSym(&Object::ScoreDefSetGrpSym); - // GetCurrentScoreDef()->Process(&scoreDefSetGrpSym, NULL); + // this->GetCurrentScoreDef()->Process(&scoreDefSetGrpSym, NULL); ScoreDefSetGrpSymParams scoreDefSetGrpSymParams(&scoreDefSetGrpSym); this->Process(&scoreDefSetGrpSym, &scoreDefSetGrpSymParams); } @@ -1159,7 +1159,7 @@ void Doc::TransposeDoc() // Find the starting key tonic of the data to use in calculating the tranposition interval: // Set transposition by key tonic. // Detect the current key from the keysignature. - KeySig *keysig = dynamic_cast(GetCurrentScoreDef()->FindDescendantByType(KEYSIG)); + KeySig *keysig = dynamic_cast(this->GetCurrentScoreDef()->FindDescendantByType(KEYSIG)); // If there is no keysignature, assume it is C. TransPitch currentKey = TransPitch(0, 0, 0); if (keysig && keysig->HasPname()) { @@ -1176,7 +1176,7 @@ void Doc::TransposeDoc() } else if (transposer.IsValidSemitones(transpositionOption)) { - KeySig *keysig = dynamic_cast(GetCurrentScoreDef()->FindDescendantByType(KEYSIG, 3)); + KeySig *keysig = dynamic_cast(this->GetCurrentScoreDef()->FindDescendantByType(KEYSIG, 3)); int fifths = 0; if (keysig) { fifths = keysig->GetFifthsInt(); @@ -1203,7 +1203,7 @@ void Doc::TransposeDoc() transpose.m_visibleOnly = false; } - GetCurrentScoreDef()->Process(&transpose, &transposeParams); + this->GetCurrentScoreDef()->Process(&transpose, &transposeParams); this->Process(&transpose, &transposeParams); } @@ -1343,7 +1343,7 @@ int Doc::GetGlyphLeft(wchar_t code, int staffSize, bool graceSize) const int Doc::GetGlyphRight(wchar_t code, int staffSize, bool graceSize) const { - return GetGlyphLeft(code, staffSize, graceSize) + GetGlyphWidth(code, staffSize, graceSize); + return this->GetGlyphLeft(code, staffSize, graceSize) + this->GetGlyphWidth(code, staffSize, graceSize); } int Doc::GetGlyphBottom(wchar_t code, int staffSize, bool graceSize) const @@ -1360,7 +1360,7 @@ int Doc::GetGlyphBottom(wchar_t code, int staffSize, bool graceSize) const int Doc::GetGlyphTop(wchar_t code, int staffSize, bool graceSize) const { - return GetGlyphBottom(code, staffSize, graceSize) + GetGlyphHeight(code, staffSize, graceSize); + return this->GetGlyphBottom(code, staffSize, graceSize) + this->GetGlyphHeight(code, staffSize, graceSize); } int Doc::GetTextGlyphHeight(wchar_t code, FontInfo *font, bool graceSize) const @@ -1457,32 +1457,32 @@ int Doc::GetDrawingBrevisWidth(int staffSize) const int Doc::GetDrawingBarLineWidth(int staffSize) const { - return m_options->m_barLineWidth.GetValue() * GetDrawingUnit(staffSize); + return m_options->m_barLineWidth.GetValue() * this->GetDrawingUnit(staffSize); } int Doc::GetDrawingStaffLineWidth(int staffSize) const { - return m_options->m_staffLineWidth.GetValue() * GetDrawingUnit(staffSize); + return m_options->m_staffLineWidth.GetValue() * this->GetDrawingUnit(staffSize); } int Doc::GetDrawingStemWidth(int staffSize) const { - return m_options->m_stemWidth.GetValue() * GetDrawingUnit(staffSize); + return m_options->m_stemWidth.GetValue() * this->GetDrawingUnit(staffSize); } int Doc::GetDrawingDynamHeight(int staffSize, bool withMargin) const { - int height = GetGlyphHeight(SMUFL_E522_dynamicForte, staffSize, false); + int height = this->GetGlyphHeight(SMUFL_E522_dynamicForte, staffSize, false); // This should be styled - if (withMargin) height += GetDrawingUnit(staffSize); + if (withMargin) height += this->GetDrawingUnit(staffSize); return height; } int Doc::GetDrawingHairpinSize(int staffSize, bool withMargin) const { - int size = m_options->m_hairpinSize.GetValue() * GetDrawingUnit(staffSize); + int size = m_options->m_hairpinSize.GetValue() * this->GetDrawingUnit(staffSize); // This should be styled - if (withMargin) size += GetDrawingUnit(staffSize); + if (withMargin) size += this->GetDrawingUnit(staffSize); return size; } @@ -1641,12 +1641,12 @@ double Doc::GetStaffDistance(const ClassId classId, int staffIndex, data_STAFFRE distance = m_options->m_dynamDist.GetDefault(); // Inspect the scoreDef attribute - if (GetCurrentScoreDef()->HasDynamDist()) { - distance = GetCurrentScoreDef()->GetDynamDist(); + if (this->GetCurrentScoreDef()->HasDynamDist()) { + distance = this->GetCurrentScoreDef()->GetDynamDist(); } // Inspect the staffDef attributes - const StaffDef *staffDef = GetCurrentScoreDef()->GetStaffDef(staffIndex); + const StaffDef *staffDef = this->GetCurrentScoreDef()->GetStaffDef(staffIndex); if (staffDef != NULL && staffDef->HasDynamDist()) { distance = staffDef->GetDynamDist(); } @@ -1660,12 +1660,12 @@ double Doc::GetStaffDistance(const ClassId classId, int staffIndex, data_STAFFRE distance = m_options->m_harmDist.GetDefault(); // Inspect the scoreDef attribute - if (GetCurrentScoreDef()->HasHarmDist()) { - distance = GetCurrentScoreDef()->GetHarmDist(); + if (this->GetCurrentScoreDef()->HasHarmDist()) { + distance = this->GetCurrentScoreDef()->GetHarmDist(); } // Inspect the staffDef attributes - const StaffDef *staffDef = GetCurrentScoreDef()->GetStaffDef(staffIndex); + const StaffDef *staffDef = this->GetCurrentScoreDef()->GetStaffDef(staffIndex); if (staffDef != NULL && staffDef->HasHarmDist()) { distance = staffDef->GetHarmDist(); } @@ -1752,7 +1752,7 @@ Page *Doc::SetDrawingPage(int pageIdx) m_drawingLyricFontSize = m_options->m_unit.GetValue() * m_options->m_lyricSize.GetValue(); m_fingeringFontSize = m_drawingLyricFontSize * m_options->m_fingeringScale.GetValue(); - glyph_size = GetGlyphWidth(SMUFL_E0A2_noteheadWhole, 100, 0); + glyph_size = this->GetGlyphWidth(SMUFL_E0A2_noteheadWhole, 100, 0); m_drawingBrevisWidth = (int)((glyph_size * 0.8) / 2); diff --git a/src/dot.cpp b/src/dot.cpp index ba04aba2f9a..0273a4afe65 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -26,11 +26,11 @@ static const ClassRegistrar s_factory("dot", DOT); Dot::Dot() : LayerElement(DOT, "dot-"), PositionInterface(), AttColor(), AttDotLog() { - RegisterInterface(PositionInterface::GetAttClasses(), PositionInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_DOTLOG); + this->RegisterInterface(PositionInterface::GetAttClasses(), PositionInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_DOTLOG); - Reset(); + this->Reset(); } Dot::~Dot() {} @@ -39,8 +39,8 @@ void Dot::Reset() { LayerElement::Reset(); PositionInterface::Reset(); - ResetColor(); - ResetDotLog(); + this->ResetColor(); + this->ResetDotLog(); m_drawingPreviousElement = NULL; m_drawingNextElement = NULL; diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index 141ce8a2bd7..e1f48e1f3ac 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -27,7 +27,7 @@ namespace vrv { DrawingListInterface::DrawingListInterface() { - Reset(); + this->Reset(); } DrawingListInterface::~DrawingListInterface() {} @@ -67,7 +67,7 @@ void DrawingListInterface::ResetDrawingList() BeamDrawingInterface::BeamDrawingInterface() : ObjectListInterface() { - Reset(); + this->Reset(); } BeamDrawingInterface::~BeamDrawingInterface() @@ -259,7 +259,7 @@ bool BeamDrawingInterface::IsHorizontal() return true; } - if (HasOneStepHeight()) return true; + if (this->HasOneStepHeight()) return true; // if (m_drawingPlace == BEAMPLACE_mixed) return true; @@ -442,7 +442,7 @@ int BeamDrawingInterface::GetPosition(Object *object, LayerElement *element) StaffDefDrawingInterface::StaffDefDrawingInterface() { - Reset(); + this->Reset(); } StaffDefDrawingInterface::~StaffDefDrawingInterface() {} @@ -517,10 +517,11 @@ bool StaffDefDrawingInterface::DrawMeterSigGrp() void StaffDefDrawingInterface::AlternateCurrentMeterSig(Measure *measure) { - if (MeterSigGrp *meterSigGrp = GetCurrentMeterSigGrp(); meterSigGrp->GetFunc() == meterSigGrpLog_FUNC_alternating) { + if (MeterSigGrp *meterSigGrp = this->GetCurrentMeterSigGrp(); + meterSigGrp->GetFunc() == meterSigGrpLog_FUNC_alternating) { meterSigGrp->SetMeasureBasedCount(measure); MeterSig *meter = meterSigGrp->GetSimplifiedMeterSig(); - SetCurrentMeterSig(meter); + this->SetCurrentMeterSig(meter); delete meter; } } @@ -531,7 +532,7 @@ void StaffDefDrawingInterface::AlternateCurrentMeterSig(Measure *measure) StemmedDrawingInterface::StemmedDrawingInterface() { - Reset(); + this->Reset(); } StemmedDrawingInterface::~StemmedDrawingInterface() {} @@ -593,7 +594,7 @@ Point StemmedDrawingInterface::GetDrawingStemEnd(Object *object) return Point(object->GetDrawingX(), object->GetDrawingY()); } } - return Point(m_drawingStem->GetDrawingX(), m_drawingStem->GetDrawingY() - GetDrawingStemLen()); + return Point(m_drawingStem->GetDrawingX(), m_drawingStem->GetDrawingY() - this->GetDrawingStemLen()); } } // namespace vrv diff --git a/src/durationinterface.cpp b/src/durationinterface.cpp index 8e8b2d9ea1e..e8ef560d98b 100644 --- a/src/durationinterface.cpp +++ b/src/durationinterface.cpp @@ -39,30 +39,30 @@ DurationInterface::DurationInterface() , AttFermataPresent() , AttStaffIdent() { - RegisterInterfaceAttClass(ATT_AUGMENTDOTS); - RegisterInterfaceAttClass(ATT_BEAMSECONDARY); - RegisterInterfaceAttClass(ATT_DURATIONGESTURAL); - RegisterInterfaceAttClass(ATT_DURATIONLOGICAL); - RegisterInterfaceAttClass(ATT_DURATIONQUALITY); - RegisterInterfaceAttClass(ATT_DURATIONRATIO); - RegisterInterfaceAttClass(ATT_FERMATAPRESENT); - RegisterInterfaceAttClass(ATT_STAFFIDENT); - - Reset(); + this->RegisterInterfaceAttClass(ATT_AUGMENTDOTS); + this->RegisterInterfaceAttClass(ATT_BEAMSECONDARY); + this->RegisterInterfaceAttClass(ATT_DURATIONGESTURAL); + this->RegisterInterfaceAttClass(ATT_DURATIONLOGICAL); + this->RegisterInterfaceAttClass(ATT_DURATIONQUALITY); + this->RegisterInterfaceAttClass(ATT_DURATIONRATIO); + this->RegisterInterfaceAttClass(ATT_FERMATAPRESENT); + this->RegisterInterfaceAttClass(ATT_STAFFIDENT); + + this->Reset(); } DurationInterface::~DurationInterface() {} void DurationInterface::Reset() { - ResetAugmentDots(); - ResetBeamSecondary(); - ResetDurationGestural(); - ResetDurationLogical(); - ResetDurationQuality(); - ResetDurationRatio(); - ResetFermataPresent(); - ResetStaffIdent(); + this->ResetAugmentDots(); + this->ResetBeamSecondary(); + this->ResetDurationGestural(); + this->ResetDurationLogical(); + this->ResetDurationQuality(); + this->ResetDurationRatio(); + this->ResetFermataPresent(); + this->ResetStaffIdent(); m_durDefault = DURATION_NONE; @@ -87,7 +87,7 @@ double DurationInterface::GetInterfaceAlignmentDuration(int num, int numBase) if (noteDots != -1) { duration = 2 * duration - (duration / pow(2, noteDots)); } - // LogDebug("Duration %d; Dot %d; Alignment %f", noteDur, GetDots(), duration); + // LogDebug("Duration %d; Dot %d; Alignment %f", noteDur, this->GetDots(), duration); return duration; } diff --git a/src/dynam.cpp b/src/dynam.cpp index 4392649f986..7dbef9cc3ad 100644 --- a/src/dynam.cpp +++ b/src/dynam.cpp @@ -47,16 +47,16 @@ Dynam::Dynam() , AttMidiValue2() , AttVerticalGroup() { - RegisterInterface(TextDirInterface::GetAttClasses(), TextDirInterface::IsInterface()); - RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_ENCLOSINGCHARS); - RegisterAttClass(ATT_EXTENDER); - RegisterAttClass(ATT_LINERENDBASE); - RegisterAttClass(ATT_MIDIVALUE); - RegisterAttClass(ATT_MIDIVALUE2); - RegisterAttClass(ATT_VERTICALGROUP); - - Reset(); + this->RegisterInterface(TextDirInterface::GetAttClasses(), TextDirInterface::IsInterface()); + this->RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + this->RegisterAttClass(ATT_ENCLOSINGCHARS); + this->RegisterAttClass(ATT_EXTENDER); + this->RegisterAttClass(ATT_LINERENDBASE); + this->RegisterAttClass(ATT_MIDIVALUE); + this->RegisterAttClass(ATT_MIDIVALUE2); + this->RegisterAttClass(ATT_VERTICALGROUP); + + this->Reset(); } Dynam::~Dynam() {} @@ -66,10 +66,10 @@ void Dynam::Reset() ControlElement::Reset(); TextDirInterface::Reset(); TimeSpanningInterface::Reset(); - ResetEnclosingChars(); - ResetExtender(); - ResetLineRendBase(); - ResetVerticalGroup(); + this->ResetEnclosingChars(); + this->ResetExtender(); + this->ResetLineRendBase(); + this->ResetVerticalGroup(); } bool Dynam::IsSupportedChild(Object *child) diff --git a/src/editorial.cpp b/src/editorial.cpp index f8bad86a3fd..58c0063e6b9 100644 --- a/src/editorial.cpp +++ b/src/editorial.cpp @@ -36,36 +36,36 @@ namespace vrv { EditorialElement::EditorialElement() : Object(EDITORIAL_ELEMENT, "ee-"), SystemMilestoneInterface(), AttLabelled(), AttTyped() { - RegisterAttClass(ATT_LABELLED); - RegisterAttClass(ATT_TYPED); + this->RegisterAttClass(ATT_LABELLED); + this->RegisterAttClass(ATT_TYPED); - Reset(); + this->Reset(); } EditorialElement::EditorialElement(ClassId classId) : Object(classId, "ee-"), SystemMilestoneInterface(), AttLabelled(), AttTyped() { - RegisterAttClass(ATT_LABELLED); - RegisterAttClass(ATT_TYPED); + this->RegisterAttClass(ATT_LABELLED); + this->RegisterAttClass(ATT_TYPED); - Reset(); + this->Reset(); } EditorialElement::EditorialElement(ClassId classId, const std::string &classIdStr) : Object(classId, classIdStr), SystemMilestoneInterface(), AttLabelled(), AttTyped() { - RegisterAttClass(ATT_LABELLED); - RegisterAttClass(ATT_TYPED); + this->RegisterAttClass(ATT_LABELLED); + this->RegisterAttClass(ATT_TYPED); - Reset(); + this->Reset(); } void EditorialElement::Reset() { Object::Reset(); SystemMilestoneInterface::Reset(); - ResetLabelled(); - ResetTyped(); + this->ResetLabelled(); + this->ResetTyped(); m_visibility = Visible; } diff --git a/src/elementpart.cpp b/src/elementpart.cpp index b294486817d..51889c2f76a 100644 --- a/src/elementpart.cpp +++ b/src/elementpart.cpp @@ -32,9 +32,9 @@ namespace vrv { Dots::Dots() : LayerElement(DOTS, "dots-"), AttAugmentDots() { - RegisterAttClass(ATT_AUGMENTDOTS); + this->RegisterAttClass(ATT_AUGMENTDOTS); - Reset(); + this->Reset(); } Dots::~Dots() {} @@ -42,7 +42,7 @@ Dots::~Dots() {} void Dots::Reset() { LayerElement::Reset(); - ResetAugmentDots(); + this->ResetAugmentDots(); m_isAdjusted = false; m_flagShift = 0; @@ -69,7 +69,7 @@ std::set &Dots::ModifyDotLocsForStaff(Staff *staff) Flag::Flag() : LayerElement(FLAG, "flag-") { - Reset(); + this->Reset(); } Flag::~Flag() {} @@ -131,9 +131,9 @@ Point Flag::GetStemDownNW(Doc *doc, int staffSize, bool graceSize, wchar_t &code TupletBracket::TupletBracket() : LayerElement(TUPLET_BRACKET, "bracket-"), AttTupletVis() { - RegisterAttClass(ATT_TUPLETVIS); + this->RegisterAttClass(ATT_TUPLETVIS); - Reset(); + this->Reset(); } TupletBracket::~TupletBracket() {} @@ -141,7 +141,7 @@ TupletBracket::~TupletBracket() {} void TupletBracket::Reset() { LayerElement::Reset(); - ResetTupletVis(); + this->ResetTupletVis(); m_drawingXRelLeft = 0; m_drawingXRelRight = 0; @@ -204,10 +204,10 @@ int TupletBracket::GetDrawingYRight() TupletNum::TupletNum() : LayerElement(TUPLET_NUM, "num-"), AttNumberPlacement(), AttTupletVis() { - RegisterAttClass(ATT_NUMBERPLACEMENT); - RegisterAttClass(ATT_TUPLETVIS); + this->RegisterAttClass(ATT_NUMBERPLACEMENT); + this->RegisterAttClass(ATT_TUPLETVIS); - Reset(); + this->Reset(); } TupletNum::~TupletNum() {} @@ -215,8 +215,8 @@ TupletNum::~TupletNum() {} void TupletNum::Reset() { LayerElement::Reset(); - ResetNumberPlacement(); - ResetTupletVis(); + this->ResetNumberPlacement(); + this->ResetTupletVis(); m_alignedBracket = NULL; } @@ -273,11 +273,11 @@ void TupletNum::SetAlignedBracket(TupletBracket *alignedBracket) Stem::Stem() : LayerElement(STEM, "stem-"), AttGraced(), AttStems(), AttStemsCmn() { - RegisterAttClass(ATT_GRACED); - RegisterAttClass(ATT_STEMS); - RegisterAttClass(ATT_STEMSCMN); + this->RegisterAttClass(ATT_GRACED); + this->RegisterAttClass(ATT_STEMS); + this->RegisterAttClass(ATT_STEMSCMN); - Reset(); + this->Reset(); } Stem::~Stem() {} @@ -285,9 +285,9 @@ Stem::~Stem() {} void Stem::Reset() { LayerElement::Reset(); - ResetGraced(); - ResetStems(); - ResetStemsCmn(); + this->ResetGraced(); + this->ResetStems(); + this->ResetStemsCmn(); m_drawingStemDir = STEMDIRECTION_NONE; m_drawingStemLen = 0; @@ -319,7 +319,7 @@ int Stem::CompareToElementPosition(Doc *doc, LayerElement *otherElement, int mar currentFlag = vrv_cast(FindDescendantByType(FLAG, 1)); if (currentFlag && currentFlag->m_drawingNbFlags) { wchar_t flagGlyph = currentFlag->GetFlagGlyph(STEMDIRECTION_down); - const int flagWidth = doc->GetGlyphWidth(flagGlyph, staff->m_drawingStaffSize, GetDrawingCueSize()); + const int flagWidth = doc->GetGlyphWidth(flagGlyph, staff->m_drawingStaffSize, this->GetDrawingCueSize()); horizontalMargin += flagWidth; } @@ -333,26 +333,26 @@ int Stem::CompareToElementPosition(Doc *doc, LayerElement *otherElement, int mar void Stem::AdjustFlagPlacement(Doc *doc, Flag *flag, int staffSize, int verticalCenter, int duration) { - LayerElement *parent = vrv_cast(GetParent()); + LayerElement *parent = vrv_cast(this->GetParent()); if (!parent) return; - const data_STEMDIRECTION stemDirection = GetDrawingStemDir(); + const data_STEMDIRECTION stemDirection = this->GetDrawingStemDir(); // For overlapping purposes we don't care for flags shorter than 16th since they grow in opposite direction wchar_t flagGlyph = SMUFL_E242_flag16thUp; if (duration < DURATION_16) flagGlyph = flag->GetFlagGlyph(stemDirection); - const int glyphHeight = doc->GetGlyphHeight(flagGlyph, staffSize, GetDrawingCueSize()); + const int glyphHeight = doc->GetGlyphHeight(flagGlyph, staffSize, this->GetDrawingCueSize()); // Make sure that flags don't overlap with notehead. Upward flags cannot overlap with noteheads so check // only downward ones const int adjustmentStep = doc->GetDrawingUnit(staffSize); if (stemDirection == STEMDIRECTION_down) { - const int noteheadMargin = GetDrawingStemLen() - (glyphHeight + parent->GetDrawingRadius(doc)); + const int noteheadMargin = this->GetDrawingStemLen() - (glyphHeight + parent->GetDrawingRadius(doc)); if ((duration > DURATION_16) && (noteheadMargin < 0)) { int offset = 0; if (noteheadMargin % adjustmentStep < -adjustmentStep / 3 * 2) offset = adjustmentStep / 2; const int heightToAdjust = (noteheadMargin / adjustmentStep) * adjustmentStep - offset; - SetDrawingStemLen(GetDrawingStemLen() - heightToAdjust); - flag->SetDrawingYRel(-GetDrawingStemLen()); + this->SetDrawingStemLen(this->GetDrawingStemLen() - heightToAdjust); + flag->SetDrawingYRel(-this->GetDrawingStemLen()); } } @@ -372,7 +372,7 @@ void Stem::AdjustFlagPlacement(Doc *doc, Flag *flag, int staffSize, int vertical // Make sure that flags don't overlap with first (top or bottom) ledger line (effectively avoiding all ledgers) const int directionBias = (stemDirection == STEMDIRECTION_down) ? -1 : 1; - const int position = GetDrawingY() - GetDrawingStemLen() - directionBias * glyphHeight; + const int position = this->GetDrawingY() - this->GetDrawingStemLen() - directionBias * glyphHeight; const int ledgerPosition = verticalCenter - 6 * directionBias * adjustmentStep; const int displacementMargin = (position - ledgerPosition) * directionBias; @@ -382,8 +382,8 @@ void Stem::AdjustFlagPlacement(Doc *doc, Flag *flag, int staffSize, int vertical offset = adjustmentStep / 2; } const int heightToAdjust = (displacementMargin / adjustmentStep - 1) * adjustmentStep * directionBias - offset; - SetDrawingStemLen(GetDrawingStemLen() + heightToAdjust); - flag->SetDrawingYRel(-GetDrawingStemLen()); + this->SetDrawingStemLen(this->GetDrawingStemLen() + heightToAdjust); + flag->SetDrawingYRel(-this->GetDrawingStemLen()); } } diff --git a/src/ending.cpp b/src/ending.cpp index 6d2d3211691..2432c48c662 100644 --- a/src/ending.cpp +++ b/src/ending.cpp @@ -31,10 +31,10 @@ static const ClassRegistrar s_factory("ending", ENDING); Ending::Ending() : SystemElement(ENDING, "ending-"), SystemMilestoneInterface(), AttLineRend(), AttNNumberLike() { - RegisterAttClass(ATT_LINEREND); - RegisterAttClass(ATT_NINTEGER); + this->RegisterAttClass(ATT_LINEREND); + this->RegisterAttClass(ATT_NINTEGER); - Reset(); + this->Reset(); } Ending::~Ending() {} @@ -43,8 +43,8 @@ void Ending::Reset() { SystemElement::Reset(); SystemMilestoneInterface::Reset(); - ResetLineRend(); - ResetNNumberLike(); + this->ResetLineRend(); + this->ResetNNumberLike(); } bool Ending::IsSupportedChild(Object *child) diff --git a/src/expand.cpp b/src/expand.cpp index 788966bb043..48951e46edb 100644 --- a/src/expand.cpp +++ b/src/expand.cpp @@ -25,9 +25,9 @@ static const ClassRegistrar s_factory("expan", EXPAN); Expan::Expan() : EditorialElement(EXPAN, "expan-"), AttSource() { - RegisterAttClass(ATT_SOURCE); + this->RegisterAttClass(ATT_SOURCE); - Reset(); + this->Reset(); } Expan::~Expan() {} @@ -35,7 +35,7 @@ Expan::~Expan() {} void Expan::Reset() { EditorialElement::Reset(); - ResetSource(); + this->ResetSource(); } //---------------------------------------------------------------------------- diff --git a/src/expansion.cpp b/src/expansion.cpp index 4820a07323c..ac1c2372444 100644 --- a/src/expansion.cpp +++ b/src/expansion.cpp @@ -23,9 +23,9 @@ static const ClassRegistrar s_factory("expansion", EXPANSION); Expansion::Expansion() : SystemElement(EXPANSION, "expansion-"), PlistInterface() { - RegisterInterface(PlistInterface::GetAttClasses(), PlistInterface::IsInterface()); + this->RegisterInterface(PlistInterface::GetAttClasses(), PlistInterface::IsInterface()); - Reset(); + this->Reset(); } Expansion::~Expansion() {} diff --git a/src/expansionmap.cpp b/src/expansionmap.cpp index 0384e5213dd..00efe631291 100644 --- a/src/expansionmap.cpp +++ b/src/expansionmap.cpp @@ -131,7 +131,7 @@ bool ExpansionMap::UpdateIds(Object *object) // @startid std::string oldStartId = interface->GetStartid(); if (oldStartId.rfind("#", 0) == 0) oldStartId = oldStartId.substr(1, oldStartId.size() - 1); - std::string newStartId = GetExpansionIdsForElement(oldStartId).back(); + std::string newStartId = this->GetExpansionIdsForElement(oldStartId).back(); if (!newStartId.empty()) interface->SetStartid("#" + newStartId); } if (o->HasInterface(INTERFACE_TIME_SPANNING)) { @@ -140,12 +140,12 @@ bool ExpansionMap::UpdateIds(Object *object) // @startid std::string oldStartId = interface->GetStartid(); if (oldStartId.rfind("#", 0) == 0) oldStartId = oldStartId.substr(1, oldStartId.size() - 1); - std::string newStartId = GetExpansionIdsForElement(oldStartId).back(); + std::string newStartId = this->GetExpansionIdsForElement(oldStartId).back(); if (!newStartId.empty()) interface->SetStartid("#" + newStartId); // @endid oldStartId = interface->GetEndid(); if (oldStartId.rfind("#", 0) == 0) oldStartId = oldStartId.substr(1, oldStartId.size() - 1); - std::string newEndId = GetExpansionIdsForElement(oldStartId).back(); + std::string newEndId = this->GetExpansionIdsForElement(oldStartId).back(); if (!newEndId.empty()) interface->SetEndid("#" + newEndId); } if (o->HasInterface(INTERFACE_PLIST)) { @@ -155,7 +155,7 @@ bool ExpansionMap::UpdateIds(Object *object) xsdAnyURI_List newList; for (std::string oldRefString : oldList) { if (oldRefString.rfind("#", 0) == 0) oldRefString = oldRefString.substr(1, oldRefString.size() - 1); - newList.push_back("#" + GetExpansionIdsForElement(oldRefString).back()); + newList.push_back("#" + this->GetExpansionIdsForElement(oldRefString).back()); } interface->SetPlist(newList); } @@ -165,32 +165,32 @@ bool ExpansionMap::UpdateIds(Object *object) // @sameas std::string oldIdString = interface->GetSameas(); if (oldIdString.rfind("#", 0) == 0) oldIdString = oldIdString.substr(1, oldIdString.size() - 1); - std::string newIdString = GetExpansionIdsForElement(oldIdString).back(); + std::string newIdString = this->GetExpansionIdsForElement(oldIdString).back(); if (!newIdString.empty()) interface->SetSameas("#" + newIdString); // @next oldIdString = interface->GetNext(); if (oldIdString.rfind("#", 0) == 0) oldIdString = oldIdString.substr(1, oldIdString.size() - 1); - newIdString = GetExpansionIdsForElement(oldIdString).back(); + newIdString = this->GetExpansionIdsForElement(oldIdString).back(); if (!newIdString.empty()) interface->SetNext("#" + newIdString); // @prev oldIdString = interface->GetPrev(); if (oldIdString.rfind("#", 0) == 0) oldIdString = oldIdString.substr(1, oldIdString.size() - 1); - newIdString = GetExpansionIdsForElement(oldIdString).back(); + newIdString = this->GetExpansionIdsForElement(oldIdString).back(); if (!newIdString.empty()) interface->SetPrev("#" + newIdString); // @copyof oldIdString = interface->GetCopyof(); if (oldIdString.rfind("#", 0) == 0) oldIdString = oldIdString.substr(1, oldIdString.size() - 1); - newIdString = GetExpansionIdsForElement(oldIdString).back(); + newIdString = this->GetExpansionIdsForElement(oldIdString).back(); if (!newIdString.empty()) interface->SetCopyof("#" + newIdString); // @corresp oldIdString = interface->GetCorresp(); if (oldIdString.rfind("#", 0) == 0) oldIdString = oldIdString.substr(1, oldIdString.size() - 1); - newIdString = GetExpansionIdsForElement(oldIdString).back(); + newIdString = this->GetExpansionIdsForElement(oldIdString).back(); if (!newIdString.empty()) interface->SetCorresp("#" + newIdString); // @synch oldIdString = interface->GetSynch(); if (oldIdString.rfind("#", 0) == 0) oldIdString = oldIdString.substr(1, oldIdString.size() - 1); - newIdString = GetExpansionIdsForElement(oldIdString).back(); + newIdString = this->GetExpansionIdsForElement(oldIdString).back(); if (!newIdString.empty()) interface->SetSynch("#" + newIdString); } UpdateIds(o); diff --git a/src/f.cpp b/src/f.cpp index 1e637156044..1c95160ed67 100644 --- a/src/f.cpp +++ b/src/f.cpp @@ -27,10 +27,10 @@ static const ClassRegistrar s_factory("f", FIGURE); F::F() : TextElement(FIGURE, "f-"), TimeSpanningInterface(), AttExtender() { - RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_EXTENDER); + this->RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + this->RegisterAttClass(ATT_EXTENDER); - Reset(); + this->Reset(); } F::~F() {} @@ -39,7 +39,7 @@ void F::Reset() { TextElement::Reset(); TimeSpanningInterface::Reset(); - ResetExtender(); + this->ResetExtender(); } bool F::IsSupportedChild(Object *child) diff --git a/src/facsimileinterface.cpp b/src/facsimileinterface.cpp index 7976a69ec9b..1e0e52b6fef 100644 --- a/src/facsimileinterface.cpp +++ b/src/facsimileinterface.cpp @@ -26,15 +26,15 @@ namespace vrv { FacsimileInterface::FacsimileInterface() : Interface(), AttFacsimile() { - RegisterInterfaceAttClass(ATT_FACSIMILE); - Reset(); + this->RegisterInterfaceAttClass(ATT_FACSIMILE); + this->Reset(); } FacsimileInterface::~FacsimileInterface() {} void FacsimileInterface::Reset() { - ResetFacsimile(); + this->ResetFacsimile(); this->SetZone(NULL); } diff --git a/src/fb.cpp b/src/fb.cpp index 22375353816..dad3261b642 100644 --- a/src/fb.cpp +++ b/src/fb.cpp @@ -28,7 +28,7 @@ static const ClassRegistrar s_factory("fb", FB); Fb::Fb() : Object(FB, "fb-") { - Reset(); + this->Reset(); } Fb::~Fb() {} diff --git a/src/featureextractor.cpp b/src/featureextractor.cpp index 788cdd1564d..06da2109214 100644 --- a/src/featureextractor.cpp +++ b/src/featureextractor.cpp @@ -37,7 +37,7 @@ namespace vrv { FeatureExtractor::FeatureExtractor(const std::string &options) { // We currently have no option support - Reset(); + this->Reset(); } FeatureExtractor::~FeatureExtractor() {} diff --git a/src/fermata.cpp b/src/fermata.cpp index 00e4372fabe..7e3f1bba181 100644 --- a/src/fermata.cpp +++ b/src/fermata.cpp @@ -33,14 +33,14 @@ Fermata::Fermata() , AttFermataVis() , AttPlacementRelStaff() { - RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_ENCLOSINGCHARS); - RegisterAttClass(ATT_EXTSYM); - RegisterAttClass(ATT_FERMATAVIS); - RegisterAttClass(ATT_PLACEMENTRELSTAFF); - - Reset(); + this->RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_ENCLOSINGCHARS); + this->RegisterAttClass(ATT_EXTSYM); + this->RegisterAttClass(ATT_FERMATAVIS); + this->RegisterAttClass(ATT_PLACEMENTRELSTAFF); + + this->Reset(); } Fermata::~Fermata() {} @@ -49,11 +49,11 @@ void Fermata::Reset() { ControlElement::Reset(); TimePointInterface::Reset(); - ResetColor(); - ResetEnclosingChars(); - ResetExtSym(); - ResetFermataVis(); - ResetPlacementRelStaff(); + this->ResetColor(); + this->ResetEnclosingChars(); + this->ResetExtSym(); + this->ResetFermataVis(); + this->ResetPlacementRelStaff(); } void Fermata::ConvertFromAnalyticalMarkup( @@ -73,28 +73,31 @@ void Fermata::ConvertFromAnalyticalMarkup( wchar_t Fermata::GetFermataGlyph() const { // If there is glyph.num, prioritize it - if (HasGlyphNum()) { - wchar_t code = GetGlyphNum(); + if (this->HasGlyphNum()) { + wchar_t code = this->GetGlyphNum(); if (NULL != Resources::GetGlyph(code)) return code; } // If there is glyph.name (second priority) - else if (HasGlyphName()) { - wchar_t code = Resources::GetGlyphCode(GetGlyphName()); + else if (this->HasGlyphName()) { + wchar_t code = Resources::GetGlyphCode(this->GetGlyphName()); if (NULL != Resources::GetGlyph(code)) return code; } // check for shape - if (GetShape() == fermataVis_SHAPE_angular) { - if (GetForm() == fermataVis_FORM_inv || (GetPlace() == STAFFREL_below && !(GetForm() == fermataVis_FORM_norm))) + if (this->GetShape() == fermataVis_SHAPE_angular) { + if (this->GetForm() == fermataVis_FORM_inv + || (this->GetPlace() == STAFFREL_below && !(this->GetForm() == fermataVis_FORM_norm))) return SMUFL_E4C5_fermataShortBelow; return SMUFL_E4C4_fermataShortAbove; } - else if (GetShape() == fermataVis_SHAPE_square) { - if (GetForm() == fermataVis_FORM_inv || (GetPlace() == STAFFREL_below && !(GetForm() == fermataVis_FORM_norm))) + else if (this->GetShape() == fermataVis_SHAPE_square) { + if (this->GetForm() == fermataVis_FORM_inv + || (this->GetPlace() == STAFFREL_below && !(this->GetForm() == fermataVis_FORM_norm))) return SMUFL_E4C7_fermataLongBelow; return SMUFL_E4C6_fermataLongAbove; } - else if (GetForm() == fermataVis_FORM_inv || (GetPlace() == STAFFREL_below && !(GetForm() == fermataVis_FORM_norm))) + else if (this->GetForm() == fermataVis_FORM_inv + || (this->GetPlace() == STAFFREL_below && !(this->GetForm() == fermataVis_FORM_norm))) return SMUFL_E4C1_fermataBelow; // If no other attributes match, return default one (fermataAbove) diff --git a/src/fig.cpp b/src/fig.cpp index 93bb20697b1..5103baf7c89 100644 --- a/src/fig.cpp +++ b/src/fig.cpp @@ -27,9 +27,9 @@ static const ClassRegistrar s_factory("fig", FIG); Fig::Fig() : TextElement(FIG, "fig-"), AreaPosInterface() { - RegisterInterface(AreaPosInterface::GetAttClasses(), AreaPosInterface::IsInterface()); + this->RegisterInterface(AreaPosInterface::GetAttClasses(), AreaPosInterface::IsInterface()); - Reset(); + this->Reset(); } Fig::~Fig() {} diff --git a/src/fing.cpp b/src/fing.cpp index c9b68cacba6..9c5f4a92b4b 100644 --- a/src/fing.cpp +++ b/src/fing.cpp @@ -24,11 +24,11 @@ static const ClassRegistrar s_factory("fing", FING); Fing::Fing() : ControlElement(FING, "fing-"), TimePointInterface(), TextDirInterface(), AttNNumberLike() { - RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); - RegisterInterface(TextDirInterface::GetAttClasses(), TextDirInterface::IsInterface()); - RegisterAttClass(ATT_NNUMBERLIKE); + this->RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); + this->RegisterInterface(TextDirInterface::GetAttClasses(), TextDirInterface::IsInterface()); + this->RegisterAttClass(ATT_NNUMBERLIKE); - Reset(); + this->Reset(); } Fing::~Fing() {} @@ -38,7 +38,7 @@ void Fing::Reset() ControlElement::Reset(); TimePointInterface::Reset(); TextDirInterface::Reset(); - ResetNNumberLike(); + this->ResetNNumberLike(); } bool Fing::IsSupportedChild(Object *child) diff --git a/src/floatingobject.cpp b/src/floatingobject.cpp index 4d6dc7a0ec3..ea251fd0419 100644 --- a/src/floatingobject.cpp +++ b/src/floatingobject.cpp @@ -53,17 +53,17 @@ thread_local std::vector FloatingObject::s_drawingObjectIds; FloatingObject::FloatingObject() : Object(FLOATING_OBJECT, "fe") { - Reset(); + this->Reset(); } FloatingObject::FloatingObject(ClassId classId) : Object(classId, "fe") { - Reset(); + this->Reset(); } FloatingObject::FloatingObject(ClassId classId, const std::string &classIdStr) : Object(classId, classIdStr) { - Reset(); + this->Reset(); m_currentPositioner = NULL; m_maxDrawingYRel = VRV_UNSET; @@ -279,14 +279,14 @@ FloatingPositioner::FloatingPositioner(FloatingObject *object, StaffAlignment *a else { m_place = STAFFREL_NONE; } - ResetPositioner(); + this->ResetPositioner(); } void FloatingPositioner::ResetPositioner() { BoundingBox::ResetBoundingBox(); - ResetCachedDrawingX(); - ResetCachedDrawingY(); + this->ResetCachedDrawingX(); + this->ResetCachedDrawingY(); m_objectX = NULL; m_objectY = NULL; @@ -328,7 +328,7 @@ void FloatingPositioner::SetObjectXY(Object *objectX, Object *objectY) void FloatingPositioner::SetDrawingXRel(int drawingXRel) { - ResetCachedDrawingX(); + this->ResetCachedDrawingX(); m_drawingXRel = drawingXRel; } @@ -343,7 +343,7 @@ void FloatingPositioner::SetDrawingYRel(int drawingYRel, bool force) } if (setValue) { - ResetCachedDrawingY(); + this->ResetCachedDrawingY(); m_drawingYRel = drawingYRel; } } @@ -484,7 +484,7 @@ int FloatingPositioner::GetSpaceBelow(Doc *doc, StaffAlignment *staffAlignment, FloatingCurvePositioner::FloatingCurvePositioner(FloatingObject *object, StaffAlignment *alignment, char spanningType) : FloatingPositioner(object, alignment, spanningType) { - ResetCurveParams(); + this->ResetCurveParams(); } FloatingCurvePositioner::~FloatingCurvePositioner() @@ -496,7 +496,7 @@ void FloatingCurvePositioner::ResetPositioner() { FloatingPositioner::ResetPositioner(); - ResetCurveParams(); + this->ResetCurveParams(); } void FloatingCurvePositioner::ClearSpannedElements() diff --git a/src/ftrem.cpp b/src/ftrem.cpp index dec5979218c..994490d82ee 100644 --- a/src/ftrem.cpp +++ b/src/ftrem.cpp @@ -36,10 +36,10 @@ static const ClassRegistrar s_factory("fTrem", FTREM); FTrem::FTrem() : LayerElement(FTREM, "ftrem-"), BeamDrawingInterface(), AttFTremVis(), AttTremMeasured() { - RegisterAttClass(ATT_FTREMVIS); - RegisterAttClass(ATT_TREMMEASURED); + this->RegisterAttClass(ATT_FTREMVIS); + this->RegisterAttClass(ATT_TREMMEASURED); - Reset(); + this->Reset(); } FTrem::~FTrem() {} @@ -48,8 +48,8 @@ void FTrem::Reset() { LayerElement::Reset(); BeamDrawingInterface::Reset(); - ResetFTremVis(); - ResetTremMeasured(); + this->ResetFTremVis(); + this->ResetTremMeasured(); } bool FTrem::IsSupportedChild(Object *child) @@ -123,7 +123,7 @@ int FTrem::CalcStem(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } - if (GetElementCoords()->size() != 2) { + if (this->GetElementCoords()->size() != 2) { LogError("Stem calculation: element has invalid number of descendants."); return FUNCTOR_CONTINUE; } diff --git a/src/gliss.cpp b/src/gliss.cpp index babe8853298..c4f1933af62 100644 --- a/src/gliss.cpp +++ b/src/gliss.cpp @@ -34,13 +34,13 @@ Gliss::Gliss() , AttLineRendBase() , AttNNumberLike() { - RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_LINEREND); - RegisterAttClass(ATT_LINERENDBASE); - RegisterAttClass(ATT_NNUMBERLIKE); + this->RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_LINEREND); + this->RegisterAttClass(ATT_LINERENDBASE); + this->RegisterAttClass(ATT_NNUMBERLIKE); - Reset(); + this->Reset(); } Gliss::~Gliss() {} @@ -49,10 +49,10 @@ void Gliss::Reset() { ControlElement::Reset(); TimeSpanningInterface::Reset(); - ResetColor(); - ResetLineRend(); - ResetLineRendBase(); - ResetNNumberLike(); + this->ResetColor(); + this->ResetLineRend(); + this->ResetLineRendBase(); + this->ResetNNumberLike(); } //---------------------------------------------------------------------------- diff --git a/src/gracegrp.cpp b/src/gracegrp.cpp index d5611e15dd8..1cf7beb3617 100644 --- a/src/gracegrp.cpp +++ b/src/gracegrp.cpp @@ -36,11 +36,11 @@ static const ClassRegistrar s_factory("graceGrp", GRACEGRP); GraceGrp::GraceGrp() : LayerElement(GRACEGRP, "gracegrp-"), AttColor(), AttGraced(), AttGraceGrpLog() { - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_GRACED); - RegisterAttClass(ATT_GRACEGRPLOG); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_GRACED); + this->RegisterAttClass(ATT_GRACEGRPLOG); - Reset(); + this->Reset(); } GraceGrp::~GraceGrp() {} @@ -48,9 +48,9 @@ GraceGrp::~GraceGrp() {} void GraceGrp::Reset() { LayerElement::Reset(); - ResetColor(); - ResetGraced(); - ResetGraceGrpLog(); + this->ResetColor(); + this->ResetGraced(); + this->ResetGraceGrpLog(); } bool GraceGrp::IsSupportedChild(Object *child) diff --git a/src/grpsym.cpp b/src/grpsym.cpp index fae02a6a8bb..b6628c1b560 100644 --- a/src/grpsym.cpp +++ b/src/grpsym.cpp @@ -30,13 +30,13 @@ static const ClassRegistrar s_factory("grpSym", GRPSYM); GrpSym::GrpSym() : Object(GRPSYM, "grpsym-"), AttColor(), AttGrpSymLog(), AttStaffGroupingSym(), AttStartId(), AttStartEndId() { - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_GRPSYMLOG); - RegisterAttClass(ATT_STAFFGROUPINGSYM); - RegisterAttClass(ATT_STARTID); - RegisterAttClass(ATT_STARTENDID); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_GRPSYMLOG); + this->RegisterAttClass(ATT_STAFFGROUPINGSYM); + this->RegisterAttClass(ATT_STARTID); + this->RegisterAttClass(ATT_STARTENDID); - Reset(); + this->Reset(); } GrpSym::~GrpSym() {} @@ -44,11 +44,11 @@ GrpSym::~GrpSym() {} void GrpSym::Reset() { Object::Reset(); - ResetColor(); - ResetGrpSymLog(); - ResetStaffGroupingSym(); - ResetStartId(); - ResetStartEndId(); + this->ResetColor(); + this->ResetGrpSymLog(); + this->ResetStaffGroupingSym(); + this->ResetStartId(); + this->ResetStartEndId(); m_startDef = NULL; m_endDef = NULL; @@ -84,13 +84,13 @@ int GrpSym::ScoreDefSetGrpSym(FunctorParams *) { // For the grpSym that is encoded in the scope of the staffGrp just get first and last staffDefs and set then as // starting and ending points - if (GetParent()->Is(STAFFGRP)) { - StaffGrp *staffGrp = vrv_cast(GetParent()); + if (this->GetParent()->Is(STAFFGRP)) { + StaffGrp *staffGrp = vrv_cast(this->GetParent()); assert(staffGrp); auto [firstDef, lastDef] = staffGrp->GetFirstLastStaffDef(); if (firstDef && lastDef) { - SetStartDef(firstDef); - SetEndDef(lastDef); + this->SetStartDef(firstDef); + this->SetEndDef(lastDef); staffGrp->SetGroupSymbol(this); } } @@ -98,13 +98,13 @@ int GrpSym::ScoreDefSetGrpSym(FunctorParams *) // @startid and @endid. We also need to make sure that @level attribute is adhered to, hence we limit search depth. // Finally, we need to make sure that both starting and ending elements have the same parent (since we cannot draw // cross-group grpSym) - else if (GetParent()->Is(SCOREDEF)) { - ScoreDef *scoreDef = vrv_cast(GetParent()); + else if (this->GetParent()->Is(SCOREDEF)) { + ScoreDef *scoreDef = vrv_cast(this->GetParent()); assert(scoreDef); - const std::string startId = ExtractUuidFragment(GetStartid()); - const std::string endId = ExtractUuidFragment(GetEndid()); - const int level = GetLevel(); + const std::string startId = ExtractUuidFragment(this->GetStartid()); + const std::string endId = ExtractUuidFragment(this->GetEndid()); + const int level = this->GetLevel(); UuidComparison compare(STAFFDEF, startId); StaffDef *start = vrv_cast(scoreDef->FindDescendantByComparison(&compare, level)); @@ -112,18 +112,18 @@ int GrpSym::ScoreDefSetGrpSym(FunctorParams *) StaffDef *end = vrv_cast(scoreDef->FindDescendantByComparison(&compare, level)); if (!start || !end) { - LogWarning("Could not find startid/endid on level %d for <'%s'>", level, GetUuid().c_str()); + LogWarning("Could not find startid/endid on level %d for <'%s'>", level, this->GetUuid().c_str()); return FUNCTOR_CONTINUE; } if (start->GetParent() != end->GetParent()) { - LogWarning("<'%s'> has mismatching parents for startid:<'%s'> and endid:<'%s'>", GetUuid().c_str(), + LogWarning("<'%s'> has mismatching parents for startid:<'%s'> and endid:<'%s'>", this->GetUuid().c_str(), startId.c_str(), endId.c_str()); return FUNCTOR_CONTINUE; } - SetStartDef(start); - SetEndDef(end); + this->SetStartDef(start); + this->SetEndDef(end); StaffGrp *staffGrp = vrv_cast(start->GetParent()); staffGrp->SetGroupSymbol(this); } diff --git a/src/hairpin.cpp b/src/hairpin.cpp index d2f2e1964b5..a59e5ab040e 100644 --- a/src/hairpin.cpp +++ b/src/hairpin.cpp @@ -40,14 +40,14 @@ Hairpin::Hairpin() , AttPlacementRelStaff() , AttVerticalGroup() { - RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_HAIRPINLOG); - RegisterAttClass(ATT_HAIRPINVIS); - RegisterAttClass(ATT_PLACEMENTRELSTAFF); - RegisterAttClass(ATT_VERTICALGROUP); - - Reset(); + this->RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_HAIRPINLOG); + this->RegisterAttClass(ATT_HAIRPINVIS); + this->RegisterAttClass(ATT_PLACEMENTRELSTAFF); + this->RegisterAttClass(ATT_VERTICALGROUP); + + this->Reset(); } Hairpin::~Hairpin() {} @@ -56,11 +56,11 @@ void Hairpin::Reset() { ControlElement::Reset(); TimeSpanningInterface::Reset(); - ResetColor(); - ResetHairpinLog(); - ResetHairpinVis(); - ResetPlacementRelStaff(); - ResetVerticalGroup(); + this->ResetColor(); + this->ResetHairpinLog(); + this->ResetHairpinVis(); + this->ResetPlacementRelStaff(); + this->ResetVerticalGroup(); m_leftLink = NULL; m_rightLink = NULL; @@ -160,8 +160,8 @@ void Hairpin::SetRightLink(ControlElement *rightLink) std::pair Hairpin::GetBarlineOverlapAdjustment(int doubleUnit, int leftX, int rightX, int spanningType) { - Measure *startMeasure = vrv_cast(GetStart()->GetFirstAncestor(MEASURE)); - Measure *endMeasure = vrv_cast(GetEnd()->GetFirstAncestor(MEASURE)); + Measure *startMeasure = vrv_cast(this->GetStart()->GetFirstAncestor(MEASURE)); + Measure *endMeasure = vrv_cast(this->GetEnd()->GetFirstAncestor(MEASURE)); if (!startMeasure || !endMeasure) return { 0, 0 }; @@ -187,7 +187,7 @@ std::pair Hairpin::GetBarlineOverlapAdjustment(int doubleUnit, int lef rightBarline = endMeasure->GetRightBarLine(); } else if (spanningType == SPANNING_START) { - System *startSystem = vrv_cast(GetStart()->GetFirstAncestor(SYSTEM)); + System *startSystem = vrv_cast(this->GetStart()->GetFirstAncestor(SYSTEM)); if (startSystem) { ClassIdComparison cmp(MEASURE); Measure *measure diff --git a/src/halfmrpt.cpp b/src/halfmrpt.cpp index 5b1711f7beb..867a3cf2ef4 100644 --- a/src/halfmrpt.cpp +++ b/src/halfmrpt.cpp @@ -32,9 +32,9 @@ static const ClassRegistrar s_factory("halfmRpt", HALFMRPT); HalfmRpt::HalfmRpt() : LayerElement(HALFMRPT, "mrpt-") { - RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_COLOR); - Reset(); + this->Reset(); } HalfmRpt::~HalfmRpt() {} @@ -42,7 +42,7 @@ HalfmRpt::~HalfmRpt() {} void HalfmRpt::Reset() { LayerElement::Reset(); - ResetColor(); + this->ResetColor(); } //---------------------------------------------------------------------------- diff --git a/src/harm.cpp b/src/harm.cpp index 4edd2739a49..05335449ee2 100644 --- a/src/harm.cpp +++ b/src/harm.cpp @@ -41,12 +41,12 @@ Harm::Harm() , AttLang() , AttNNumberLike() { - RegisterInterface(TextDirInterface::GetAttClasses(), TextDirInterface::IsInterface()); - RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_LANG); - RegisterAttClass(ATT_NNUMBERLIKE); + this->RegisterInterface(TextDirInterface::GetAttClasses(), TextDirInterface::IsInterface()); + this->RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + this->RegisterAttClass(ATT_LANG); + this->RegisterAttClass(ATT_NNUMBERLIKE); - Reset(); + this->Reset(); } Harm::~Harm() {} @@ -56,8 +56,8 @@ void Harm::Reset() ControlElement::Reset(); TextDirInterface::Reset(); TimeSpanningInterface::Reset(); - ResetLang(); - ResetNNumberLike(); + this->ResetLang(); + this->ResetNNumberLike(); } bool Harm::IsSupportedChild(Object *child) @@ -129,7 +129,7 @@ bool Harm::GetBassPitch(TransPitch &pitch) for (unsigned int pos = 0; pos < text.length(); pos++) { if (text.at(pos) == L'/') { pos++; - return GetRootPitch(pitch, pos); + return this->GetRootPitch(pitch, pos); } } return false; diff --git a/src/horizontalaligner.cpp b/src/horizontalaligner.cpp index 1e36fd692de..b9b7847dfb1 100644 --- a/src/horizontalaligner.cpp +++ b/src/horizontalaligner.cpp @@ -38,7 +38,7 @@ namespace vrv { HorizontalAligner::HorizontalAligner(ClassId classId) : Object(classId) { - Reset(); + this->Reset(); } HorizontalAligner::~HorizontalAligner() {} @@ -54,8 +54,8 @@ Alignment *HorizontalAligner::SearchAlignmentAtTime(double time, AlignmentType t idx = -1; // the index if we reach the end. Alignment *alignment = NULL; // First try to see if we already have something at the time position - for (i = 0; i < GetAlignmentCount(); ++i) { - alignment = vrv_cast(GetChildren()->at(i)); + for (i = 0; i < this->GetAlignmentCount(); ++i) { + alignment = vrv_cast(this->GetChildren()->at(i)); assert(alignment); double alignment_time = alignment->GetTime(); @@ -100,7 +100,7 @@ MeasureAligner::MeasureAligner() : HorizontalAligner(MEASURE_ALIGNER) m_rightAlignment = NULL; m_rightBarLineAlignment = NULL; - Reset(); + this->Reset(); } MeasureAligner::~MeasureAligner() {} @@ -138,7 +138,7 @@ Alignment *MeasureAligner::GetAlignmentAtTime(double time, AlignmentType type) this->SetMaxTime(time); } else { - idx = GetAlignmentCount(); + idx = this->GetAlignmentCount(); } } Alignment *newAlignment = new Alignment(time, type); @@ -158,7 +158,7 @@ void MeasureAligner::SetMaxTime(double time) int i; Alignment *alignment = NULL; // Increase the time position for all alignment from the right barline - for (i = idx; i < GetAlignmentCount(); ++i) { + for (i = idx; i < this->GetAlignmentCount(); ++i) { alignment = vrv_cast(this->GetChildren()->at(i)); assert(alignment); // Change it only if higher than before @@ -301,7 +301,7 @@ void MeasureAligner::AdjustGraceNoteSpacing(Doc *doc, Alignment *alignment, int GraceAligner::GraceAligner() : HorizontalAligner(GRACE_ALIGNER) { - Reset(); + this->Reset(); } GraceAligner::~GraceAligner() {} @@ -321,7 +321,7 @@ Alignment *GraceAligner::GetAlignmentAtTime(double time, AlignmentType type) if (alignment != NULL) return alignment; // nothing found until the end if (idx == -1) { - idx = GetAlignmentCount(); + idx = this->GetAlignmentCount(); } Alignment *newAlignment = new Alignment(time, type); AddAlignment(newAlignment, idx); @@ -436,12 +436,12 @@ void GraceAligner::SetGraceAligmentXPos(Doc *doc) Alignment::Alignment() : Object(ALIGNMENT) { - Reset(); + this->Reset(); } Alignment::Alignment(double time, AlignmentType type) : Object(ALIGNMENT) { - Reset(); + this->Reset(); m_time = time; m_type = type; } @@ -521,7 +521,7 @@ AlignmentReference *Alignment::GetAlignmentReference(int staffN) void Alignment::SetXRel(int xRel) { - ResetCachedDrawingX(); + this->ResetCachedDrawingX(); m_xRel = xRel; } @@ -562,7 +562,7 @@ bool Alignment::AddLayerElementRef(LayerElement *element) } } } - AlignmentReference *alignmentRef = GetAlignmentReference(staffN); + AlignmentReference *alignmentRef = this->GetAlignmentReference(staffN); element->SetAlignmentLayerN(layerN); alignmentRef->AddChild(element); @@ -650,7 +650,7 @@ std::pair Alignment::GetAlignmentTopBottom() int max = VRV_UNSET, min = VRV_UNSET; // Iterate over each element in each alignment reference and find max/min Y value - these will serve as top/bottom // values for the Alignment - for (auto child : *GetChildren()) { + for (auto child : *this->GetChildren()) { AlignmentReference *reference = dynamic_cast(child); for (auto element : *reference->GetChildren()) { const int top = element->GetSelfTop(); @@ -684,18 +684,18 @@ void Alignment::AddToAccidSpace(Accid *accid) AlignmentReference::AlignmentReference() : Object(ALIGNMENT_REFERENCE), AttNInteger() { - RegisterAttClass(ATT_NINTEGER); + this->RegisterAttClass(ATT_NINTEGER); - Reset(); + this->Reset(); this->SetAsReferenceObject(); } AlignmentReference::AlignmentReference(int staffN) : Object(ALIGNMENT_REFERENCE), AttNInteger() { - RegisterAttClass(ATT_NINTEGER); + this->RegisterAttClass(ATT_NINTEGER); - Reset(); + this->Reset(); this->SetAsReferenceObject(); this->SetN(staffN); @@ -706,7 +706,7 @@ AlignmentReference::~AlignmentReference() {} void AlignmentReference::Reset() { Object::Reset(); - ResetNInteger(); + this->ResetNInteger(); m_accidSpace.clear(); m_layerCount = 0; @@ -790,7 +790,7 @@ bool AlignmentReference::HasAccidVerticalOverlap(const ArrayOfObjects *objects) TimestampAligner::TimestampAligner() : Object(TIMESTAMP_ALIGNER) { - Reset(); + this->Reset(); } TimestampAligner::~TimestampAligner() {} @@ -811,7 +811,7 @@ TimestampAttr *TimestampAligner::GetTimestampAtTime(double time) ArrayOfObjects *children = this->GetChildrenForModification(); // First try to see if we already have something at the time position - for (i = 0; i < GetChildCount(); ++i) { + for (i = 0; i < this->GetChildCount(); ++i) { timestampAttr = vrv_cast(children->at(i)); assert(timestampAttr); @@ -862,8 +862,8 @@ int MeasureAligner::JustifyX(FunctorParams *functorParams) JustifyXParams *params = vrv_params_cast(functorParams); assert(params); - params->m_leftBarLineX = GetLeftBarLineAlignment()->GetXRel(); - params->m_rightBarLineX = GetRightBarLineAlignment()->GetXRel(); + params->m_leftBarLineX = this->GetLeftBarLineAlignment()->GetXRel(); + params->m_rightBarLineX = this->GetRightBarLineAlignment()->GetXRel(); return FUNCTOR_CONTINUE; } @@ -943,7 +943,7 @@ int Alignment::AdjustArpeg(FunctorParams *functorParams) params->m_measureAligner->AdjustProportionally(boundaries); // After adjusting, make sure that arpeggio does not overlap with elements from the previous alignment if (m_type == ALIGNMENT_CLEF) { - auto [currentMin, currentMax] = GetAlignmentTopBottom(); + auto [currentMin, currentMax] = this->GetAlignmentTopBottom(); Note *topNote = NULL; Note *bottomNote = NULL; std::get<1>(*iter)->GetDrawingTopBottomNotes(topNote, bottomNote); @@ -1033,8 +1033,8 @@ int Alignment::AdjustGraceXPos(FunctorParams *functorParams) AttNIntegerComparison matchStaff(ALIGNMENT_REFERENCE, (*iter)); filters.push_back(&matchStaff); - if (HasGraceAligner(graceAlignerId)) { - GetGraceAligner(graceAlignerId) + if (this->HasGraceAligner(graceAlignerId)) { + this->GetGraceAligner(graceAlignerId) ->Process(params->m_functor, params, params->m_functorEnd, &filters, UNLIMITED_DEPTH, BACKWARD); // There was not grace notes for that staff @@ -1252,7 +1252,7 @@ int Alignment::SetAlignmentXPos(FunctorParams *functorParams) iter->second->SetGraceAligmentXPos(params->m_doc); } - SetXRel(params->m_previousXRel + intervalXRel * DEFINITION_FACTOR); + this->SetXRel(params->m_previousXRel + intervalXRel * DEFINITION_FACTOR); params->m_previousTime = m_time; params->m_previousXRel = m_xRel; @@ -1296,7 +1296,7 @@ int Alignment::JustifyX(FunctorParams *functorParams) } else if (m_type < ALIGNMENT_MEASURE_RIGHT_BARLINE) { // All elements up to the next barline, move them but also take into account the leftBarlineX - SetXRel(ceil( + this->SetXRel(ceil( (((double)m_xRel - (double)params->m_leftBarLineX) * params->m_justifiableRatio) + params->m_leftBarLineX)); } else { diff --git a/src/instrdef.cpp b/src/instrdef.cpp index ea21ef8798b..b5100e22c9f 100644 --- a/src/instrdef.cpp +++ b/src/instrdef.cpp @@ -27,12 +27,12 @@ static const ClassRegistrar s_factory("instrDef", INSTRDEF); InstrDef::InstrDef() : Object(INSTRDEF, "instrdef-"), AttChannelized(), AttLabelled(), AttMidiInstrument(), AttNNumberLike() { - RegisterAttClass(ATT_CHANNELIZED); - RegisterAttClass(ATT_LABELLED); - RegisterAttClass(ATT_MIDIINSTRUMENT); - RegisterAttClass(ATT_NNUMBERLIKE); + this->RegisterAttClass(ATT_CHANNELIZED); + this->RegisterAttClass(ATT_LABELLED); + this->RegisterAttClass(ATT_MIDIINSTRUMENT); + this->RegisterAttClass(ATT_NNUMBERLIKE); - Reset(); + this->Reset(); } InstrDef::~InstrDef() {} @@ -40,10 +40,10 @@ InstrDef::~InstrDef() {} void InstrDef::Reset() { Object::Reset(); - ResetChannelized(); - ResetLabelled(); - ResetMidiInstrument(); - ResetNNumberLike(); + this->ResetChannelized(); + this->ResetLabelled(); + this->ResetMidiInstrument(); + this->ResetNNumberLike(); } //---------------------------------------------------------------------------- diff --git a/src/iomei.cpp b/src/iomei.cpp index ecc2dcfad61..ecb85cf9033 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -1315,7 +1315,7 @@ bool MEIOutput::WriteDoc(Doc *doc) Facsimile *facs = doc->GetFacsimile(); if ((facs != NULL) && (facs->GetChildCount() > 0)) { pugi::xml_node facsimile = music.append_child("facsimile"); - WriteFacsimile(facsimile, facs); + this->WriteFacsimile(facsimile, facs); m_nodeStack.push_back(facsimile); } @@ -1337,7 +1337,7 @@ void MEIOutput::WriteMdiv(pugi::xml_node currentNode, Mdiv *mdiv) { assert(mdiv); - WriteXmlId(currentNode, mdiv); + this->WriteXmlId(currentNode, mdiv); mdiv->WriteLabelled(currentNode); mdiv->WriteNNumberLike(currentNode); } @@ -1351,7 +1351,7 @@ void MEIOutput::WritePages(pugi::xml_node currentNode, Pages *pages) m_currentNode.append_child(pugi::node_comment).set_value("Coordinates in MEI axis direction"); } - WriteXmlId(currentNode, pages); + this->WriteXmlId(currentNode, pages); pages->WriteLabelled(currentNode); pages->WriteNNumberLike(currentNode); } @@ -1360,7 +1360,7 @@ void MEIOutput::WriteScore(pugi::xml_node currentNode, Score *score) { assert(score); - WriteXmlId(currentNode, score); + this->WriteXmlId(currentNode, score); score->WriteLabelled(currentNode); score->WriteNNumberLike(currentNode); } @@ -1369,7 +1369,7 @@ void MEIOutput::WritePage(pugi::xml_node currentNode, Page *page) { assert(page); - WriteXmlId(currentNode, page); + this->WriteXmlId(currentNode, page); // size and margins but only if any - we rely on page.height only to check this if (page->m_pageHeight != -1) { currentNode.append_attribute("page.width") = StringFormat("%d", page->m_pageWidth / DEFINITION_FACTOR).c_str(); @@ -1394,7 +1394,7 @@ void MEIOutput::WritePageElement(pugi::xml_node currentNode, PageElement *pageEl { assert(pageElement); - WriteXmlId(currentNode, pageElement); + this->WriteXmlId(currentNode, pageElement); pageElement->WriteTyped(currentNode); } @@ -1402,7 +1402,7 @@ void MEIOutput::WritePageMilestoneEnd(pugi::xml_node currentNode, PageMilestoneE { assert(milestoneEnd && milestoneEnd->GetStart()); - WritePageElement(currentNode, milestoneEnd); + this->WritePageElement(currentNode, milestoneEnd); currentNode.append_attribute("startid") = ("#" + UuidToMeiStr(milestoneEnd->GetStart())).c_str(); std::string meiElementName = milestoneEnd->GetStart()->GetClassName(); std::transform(meiElementName.begin(), meiElementName.begin() + 1, meiElementName.begin(), ::tolower); @@ -1413,7 +1413,7 @@ void MEIOutput::WriteSystem(pugi::xml_node currentNode, System *system) { assert(system); - WriteXmlId(currentNode, system); + this->WriteXmlId(currentNode, system); // margins currentNode.append_attribute("system.leftmar") = StringFormat("%d", system->m_systemLeftMar / DEFINITION_FACTOR).c_str(); @@ -1430,7 +1430,7 @@ void MEIOutput::WriteSystemElement(pugi::xml_node currentNode, SystemElement *sy { assert(systemElement); - WriteXmlId(currentNode, systemElement); + this->WriteXmlId(currentNode, systemElement); systemElement->WriteTyped(currentNode); } @@ -1438,7 +1438,7 @@ void MEIOutput::WriteSystemMilestoneEnd(pugi::xml_node currentNode, SystemMilest { assert(milestoneEnd && milestoneEnd->GetStart()); - WriteSystemElement(currentNode, milestoneEnd); + this->WriteSystemElement(currentNode, milestoneEnd); currentNode.append_attribute("startid") = ("#" + UuidToMeiStr(milestoneEnd->GetStart())).c_str(); std::string meiElementName = milestoneEnd->GetStart()->GetClassName(); std::transform(meiElementName.begin(), meiElementName.begin() + 1, meiElementName.begin(), ::tolower); @@ -1449,7 +1449,7 @@ void MEIOutput::WriteSection(pugi::xml_node currentNode, Section *section) { assert(section); - WriteSystemElement(currentNode, section); + this->WriteSystemElement(currentNode, section); section->WriteNNumberLike(currentNode); section->WriteSectionVis(currentNode); } @@ -1458,7 +1458,7 @@ void MEIOutput::WriteEnding(pugi::xml_node currentNode, Ending *ending) { assert(ending); - WriteSystemElement(currentNode, ending); + this->WriteSystemElement(currentNode, ending); ending->WriteLineRend(currentNode); ending->WriteNNumberLike(currentNode); } @@ -1467,15 +1467,15 @@ void MEIOutput::WriteExpansion(pugi::xml_node currentNode, Expansion *expansion) { assert(expansion); - WritePlistInterface(currentNode, expansion); - WriteSystemElement(currentNode, expansion); + this->WritePlistInterface(currentNode, expansion); + this->WriteSystemElement(currentNode, expansion); } void MEIOutput::WritePb(pugi::xml_node currentNode, Pb *pb) { assert(pb); - WriteSystemElement(currentNode, pb); + this->WriteSystemElement(currentNode, pb); pb->WriteNNumberLike(currentNode); } @@ -1483,7 +1483,7 @@ void MEIOutput::WriteSb(pugi::xml_node currentNode, Sb *sb) { assert(sb); - WriteSystemElement(currentNode, sb); + this->WriteSystemElement(currentNode, sb); sb->WriteNNumberLike(currentNode); } @@ -1491,7 +1491,7 @@ void MEIOutput::WriteScoreDefElement(pugi::xml_node currentNode, ScoreDefElement { assert(scoreDefElement); - WriteXmlId(currentNode, scoreDefElement); + this->WriteXmlId(currentNode, scoreDefElement); scoreDefElement->WriteMeasureNumbers(currentNode); scoreDefElement->WriteSpacing(currentNode); scoreDefElement->WriteSystems(currentNode); @@ -1502,8 +1502,8 @@ void MEIOutput::WriteScoreDef(pugi::xml_node currentNode, ScoreDef *scoreDef) { assert(scoreDef); - WriteScoreDefElement(currentNode, scoreDef); - WriteScoreDefInterface(currentNode, scoreDef); + this->WriteScoreDefElement(currentNode, scoreDef); + this->WriteScoreDefInterface(currentNode, scoreDef); scoreDef->WriteDistances(currentNode); scoreDef->WriteEndings(currentNode); scoreDef->WriteOptimization(currentNode); @@ -1514,7 +1514,7 @@ void MEIOutput::WriteRunningElement(pugi::xml_node currentNode, RunningElement * { assert(runningElement); - WriteXmlId(currentNode, runningElement); + this->WriteXmlId(currentNode, runningElement); runningElement->WriteHorizontalAlign(currentNode); runningElement->WriteTyped(currentNode); } @@ -1529,7 +1529,7 @@ void MEIOutput::WriteGrpSym(pugi::xml_node currentNode, GrpSym *grpSym) return; } - WriteXmlId(currentNode, grpSym); + this->WriteXmlId(currentNode, grpSym); grpSym->WriteColor(currentNode); grpSym->WriteGrpSymLog(currentNode); grpSym->WriteStaffGroupingSym(currentNode); @@ -1541,35 +1541,35 @@ void MEIOutput::WritePgFoot(pugi::xml_node currentNode, PgFoot *pgFoot) { assert(pgFoot); - WriteRunningElement(currentNode, pgFoot); + this->WriteRunningElement(currentNode, pgFoot); } void MEIOutput::WritePgFoot2(pugi::xml_node currentNode, PgFoot2 *pgFoot2) { assert(pgFoot2); - WriteRunningElement(currentNode, pgFoot2); + this->WriteRunningElement(currentNode, pgFoot2); } void MEIOutput::WritePgHead(pugi::xml_node currentNode, PgHead *pgHead) { assert(pgHead); - WriteRunningElement(currentNode, pgHead); + this->WriteRunningElement(currentNode, pgHead); } void MEIOutput::WritePgHead2(pugi::xml_node currentNode, PgHead2 *pgHead2) { assert(pgHead2); - WriteRunningElement(currentNode, pgHead2); + this->WriteRunningElement(currentNode, pgHead2); } void MEIOutput::WriteStaffGrp(pugi::xml_node currentNode, StaffGrp *staffGrp) { assert(staffGrp); - WriteXmlId(currentNode, staffGrp); + this->WriteXmlId(currentNode, staffGrp); staffGrp->WriteBasic(currentNode); staffGrp->WriteLabelled(currentNode); staffGrp->WriteNNumberLike(currentNode); @@ -1582,8 +1582,8 @@ void MEIOutput::WriteStaffDef(pugi::xml_node currentNode, StaffDef *staffDef) { assert(staffDef); - WriteScoreDefElement(currentNode, staffDef); - WriteScoreDefInterface(currentNode, staffDef); + this->WriteScoreDefElement(currentNode, staffDef); + this->WriteScoreDefInterface(currentNode, staffDef); staffDef->WriteDistances(currentNode); staffDef->WriteLabelled(currentNode); staffDef->WriteNInteger(currentNode); @@ -1599,7 +1599,7 @@ void MEIOutput::WriteInstrDef(pugi::xml_node currentNode, InstrDef *instrDef) { assert(instrDef); - WriteXmlId(currentNode, instrDef); + this->WriteXmlId(currentNode, instrDef); instrDef->WriteChannelized(currentNode); instrDef->WriteLabelled(currentNode); instrDef->WriteMidiInstrument(currentNode); @@ -1610,21 +1610,21 @@ void MEIOutput::WriteLabel(pugi::xml_node currentNode, Label *label) { assert(label); - WriteXmlId(currentNode, label); + this->WriteXmlId(currentNode, label); } void MEIOutput::WriteLabelAbbr(pugi::xml_node currentNode, LabelAbbr *labelAbbr) { assert(labelAbbr); - WriteXmlId(currentNode, labelAbbr); + this->WriteXmlId(currentNode, labelAbbr); } void MEIOutput::WriteTuning(pugi::xml_node currentNode, Tuning *tuning) { assert(tuning); - WriteXmlId(currentNode, tuning); + this->WriteXmlId(currentNode, tuning); tuning->WriteCourseLog(currentNode); } @@ -1632,7 +1632,7 @@ void MEIOutput::WriteCourse(pugi::xml_node currentNode, Course *course) { assert(course); - WriteXmlId(currentNode, course); + this->WriteXmlId(currentNode, course); course->WriteAccidental(currentNode); course->WriteNNumberLike(currentNode); course->WriteOctave(currentNode); @@ -1643,7 +1643,7 @@ void MEIOutput::WriteMeasure(pugi::xml_node currentNode, Measure *measure) { assert(measure); - WriteXmlId(currentNode, measure); + this->WriteXmlId(currentNode, measure); measure->WriteBarring(currentNode); measure->WriteMeasureLog(currentNode); measure->WriteMeterConformanceBar(currentNode); @@ -1663,8 +1663,8 @@ void MEIOutput::WriteMeterSigGrp(pugi::xml_node currentNode, MeterSigGrp *meterS { assert(meterSigGrp); - WriteXmlId(currentNode, meterSigGrp); - WriteLinkingInterface(currentNode, meterSigGrp); + this->WriteXmlId(currentNode, meterSigGrp); + this->WriteLinkingInterface(currentNode, meterSigGrp); meterSigGrp->WriteBasic(currentNode); meterSigGrp->WriteLabelled(currentNode); meterSigGrp->WriteMeterSigGrpLog(currentNode); @@ -1675,15 +1675,15 @@ void MEIOutput::WriteFb(pugi::xml_node currentNode, Fb *fb) { assert(fb); - WriteXmlId(currentNode, fb); + this->WriteXmlId(currentNode, fb); } void MEIOutput::WriteControlElement(pugi::xml_node currentNode, ControlElement *controlElement) { assert(controlElement); - WriteXmlId(currentNode, controlElement); - WriteLinkingInterface(currentNode, controlElement); + this->WriteXmlId(currentNode, controlElement); + this->WriteLinkingInterface(currentNode, controlElement); controlElement->WriteLabelled(currentNode); controlElement->WriteTyped(currentNode); } @@ -1692,17 +1692,17 @@ void MEIOutput::WriteAnchoredText(pugi::xml_node currentNode, AnchoredText *anch { assert(anchoredText); - WriteControlElement(currentNode, anchoredText); - WriteTextDirInterface(currentNode, anchoredText); + this->WriteControlElement(currentNode, anchoredText); + this->WriteTextDirInterface(currentNode, anchoredText); } void MEIOutput::WriteArpeg(pugi::xml_node currentNode, Arpeg *arpeg) { assert(arpeg); - WriteControlElement(currentNode, arpeg); - WritePlistInterface(currentNode, arpeg); - WriteTimePointInterface(currentNode, arpeg); + this->WriteControlElement(currentNode, arpeg); + this->WritePlistInterface(currentNode, arpeg); + this->WriteTimePointInterface(currentNode, arpeg); arpeg->WriteArpegLog(currentNode); arpeg->WriteArpegVis(currentNode); arpeg->WriteColor(currentNode); @@ -1713,8 +1713,8 @@ void MEIOutput::WriteBracketSpan(pugi::xml_node currentNode, BracketSpan *bracke { assert(bracketSpan); - WriteControlElement(currentNode, bracketSpan); - WriteTimeSpanningInterface(currentNode, bracketSpan); + this->WriteControlElement(currentNode, bracketSpan); + this->WriteTimeSpanningInterface(currentNode, bracketSpan); bracketSpan->WriteBracketSpanLog(currentNode); bracketSpan->WriteColor(currentNode); bracketSpan->WriteLineRend(currentNode); @@ -1725,8 +1725,8 @@ void MEIOutput::WriteBreath(pugi::xml_node currentNode, Breath *breath) { assert(breath); - WriteControlElement(currentNode, breath); - WriteTimePointInterface(currentNode, breath); + this->WriteControlElement(currentNode, breath); + this->WriteTimePointInterface(currentNode, breath); breath->WriteColor(currentNode); breath->WritePlacementRelStaff(currentNode); } @@ -1735,8 +1735,8 @@ void MEIOutput::WriteCaesura(pugi::xml_node currentNode, Caesura *caesura) { assert(caesura); - WriteControlElement(currentNode, caesura); - WriteTimePointInterface(currentNode, caesura); + this->WriteControlElement(currentNode, caesura); + this->WriteTimePointInterface(currentNode, caesura); caesura->WriteColor(currentNode); caesura->WritePlacementRelStaff(currentNode); } @@ -1745,9 +1745,9 @@ void MEIOutput::WriteDir(pugi::xml_node currentNode, Dir *dir) { assert(dir); - WriteControlElement(currentNode, dir); - WriteTextDirInterface(currentNode, dir); - WriteTimeSpanningInterface(currentNode, dir); + this->WriteControlElement(currentNode, dir); + this->WriteTextDirInterface(currentNode, dir); + this->WriteTimeSpanningInterface(currentNode, dir); dir->WriteLang(currentNode); dir->WriteLineRendBase(currentNode); dir->WriteExtender(currentNode); @@ -1758,9 +1758,9 @@ void MEIOutput::WriteDynam(pugi::xml_node currentNode, Dynam *dynam) { assert(dynam); - WriteControlElement(currentNode, dynam); - WriteTextDirInterface(currentNode, dynam); - WriteTimeSpanningInterface(currentNode, dynam); + this->WriteControlElement(currentNode, dynam); + this->WriteTextDirInterface(currentNode, dynam); + this->WriteTimeSpanningInterface(currentNode, dynam); dynam->WriteEnclosingChars(currentNode); dynam->WriteExtender(currentNode); dynam->WriteLineRendBase(currentNode); @@ -1773,8 +1773,8 @@ void MEIOutput::WriteFermata(pugi::xml_node currentNode, Fermata *fermata) { assert(fermata); - WriteControlElement(currentNode, fermata); - WriteTimePointInterface(currentNode, fermata); + this->WriteControlElement(currentNode, fermata); + this->WriteTimePointInterface(currentNode, fermata); fermata->WriteColor(currentNode); fermata->WriteEnclosingChars(currentNode); fermata->WriteExtSym(currentNode); @@ -1786,9 +1786,9 @@ void MEIOutput::WriteFing(pugi::xml_node currentNode, Fing *fing) { assert(fing); - WriteControlElement(currentNode, fing); - WriteTextDirInterface(currentNode, fing); - WriteTimePointInterface(currentNode, fing); + this->WriteControlElement(currentNode, fing); + this->WriteTextDirInterface(currentNode, fing); + this->WriteTimePointInterface(currentNode, fing); fing->WriteNNumberLike(currentNode); } @@ -1796,8 +1796,8 @@ void MEIOutput::WriteGliss(pugi::xml_node currentNode, Gliss *gliss) { assert(gliss); - WriteControlElement(currentNode, gliss); - WriteTimeSpanningInterface(currentNode, gliss); + this->WriteControlElement(currentNode, gliss); + this->WriteTimeSpanningInterface(currentNode, gliss); gliss->WriteColor(currentNode); gliss->WriteLineRend(currentNode); gliss->WriteLineRendBase(currentNode); @@ -1808,8 +1808,8 @@ void MEIOutput::WriteHairpin(pugi::xml_node currentNode, Hairpin *hairpin) { assert(hairpin); - WriteControlElement(currentNode, hairpin); - WriteTimeSpanningInterface(currentNode, hairpin); + this->WriteControlElement(currentNode, hairpin); + this->WriteTimeSpanningInterface(currentNode, hairpin); hairpin->WriteColor(currentNode); hairpin->WriteHairpinLog(currentNode); hairpin->WriteHairpinVis(currentNode); @@ -1821,9 +1821,9 @@ void MEIOutput::WriteHarm(pugi::xml_node currentNode, Harm *harm) { assert(harm); - WriteControlElement(currentNode, harm); - WriteTextDirInterface(currentNode, harm); - WriteTimeSpanningInterface(currentNode, harm); + this->WriteControlElement(currentNode, harm); + this->WriteTextDirInterface(currentNode, harm); + this->WriteTimeSpanningInterface(currentNode, harm); harm->WriteLang(currentNode); harm->WriteNNumberLike(currentNode); } @@ -1832,8 +1832,8 @@ void MEIOutput::WriteLv(pugi::xml_node currentNode, Lv *lv) { assert(lv); - WriteControlElement(currentNode, lv); - WriteTimeSpanningInterface(currentNode, lv); + this->WriteControlElement(currentNode, lv); + this->WriteTimeSpanningInterface(currentNode, lv); lv->WriteColor(currentNode); lv->WriteCurvature(currentNode); lv->WriteCurveRend(currentNode); @@ -1843,9 +1843,9 @@ void MEIOutput::WriteMNum(pugi::xml_node currentNode, MNum *mNum) { assert(mNum); - WriteControlElement(currentNode, mNum); - WriteTextDirInterface(currentNode, mNum); - WriteTimePointInterface(currentNode, mNum); + this->WriteControlElement(currentNode, mNum); + this->WriteTextDirInterface(currentNode, mNum); + this->WriteTimePointInterface(currentNode, mNum); mNum->WriteColor(currentNode); mNum->WriteLang(currentNode); mNum->WriteTypography(currentNode); @@ -1855,8 +1855,8 @@ void MEIOutput::WriteMordent(pugi::xml_node currentNode, Mordent *mordent) { assert(mordent); - WriteControlElement(currentNode, mordent); - WriteTimePointInterface(currentNode, mordent); + this->WriteControlElement(currentNode, mordent); + this->WriteTimePointInterface(currentNode, mordent); mordent->WriteColor(currentNode); mordent->WriteExtSym(currentNode); mordent->WriteOrnamentAccid(currentNode); @@ -1868,8 +1868,8 @@ void MEIOutput::WriteOctave(pugi::xml_node currentNode, Octave *octave) { assert(octave); - WriteControlElement(currentNode, octave); - WriteTimeSpanningInterface(currentNode, octave); + this->WriteControlElement(currentNode, octave); + this->WriteTimeSpanningInterface(currentNode, octave); octave->WriteColor(currentNode); octave->WriteExtender(currentNode); octave->WriteLineRend(currentNode); @@ -1882,8 +1882,8 @@ void MEIOutput::WritePedal(pugi::xml_node currentNode, Pedal *pedal) { assert(pedal); - WriteControlElement(currentNode, pedal); - WriteTimeSpanningInterface(currentNode, pedal); + this->WriteControlElement(currentNode, pedal); + this->WriteTimeSpanningInterface(currentNode, pedal); pedal->WriteColor(currentNode); pedal->WriteExtSym(currentNode); pedal->WritePedalLog(currentNode); @@ -1896,24 +1896,24 @@ void MEIOutput::WritePhrase(pugi::xml_node currentNode, Phrase *phrase) { assert(phrase); - WriteSlur(currentNode, phrase); + this->WriteSlur(currentNode, phrase); } void MEIOutput::WritePitchInflection(pugi::xml_node currentNode, PitchInflection *pitchInflection) { assert(pitchInflection); - WriteControlElement(currentNode, pitchInflection); - WriteTimeSpanningInterface(currentNode, pitchInflection); + this->WriteControlElement(currentNode, pitchInflection); + this->WriteTimeSpanningInterface(currentNode, pitchInflection); } void MEIOutput::WriteReh(pugi::xml_node currentNode, Reh *reh) { assert(reh); - WriteControlElement(currentNode, reh); - WriteTextDirInterface(currentNode, reh); - WriteTimePointInterface(currentNode, reh); + this->WriteControlElement(currentNode, reh); + this->WriteTextDirInterface(currentNode, reh); + this->WriteTimePointInterface(currentNode, reh); reh->WriteColor(currentNode); reh->WriteLang(currentNode); reh->WriteVerticalGroup(currentNode); @@ -1923,8 +1923,8 @@ void MEIOutput::WriteSlur(pugi::xml_node currentNode, Slur *slur) { assert(slur); - WriteControlElement(currentNode, slur); - WriteTimeSpanningInterface(currentNode, slur); + this->WriteControlElement(currentNode, slur); + this->WriteTimeSpanningInterface(currentNode, slur); slur->WriteColor(currentNode); slur->WriteCurvature(currentNode); slur->WriteCurveRend(currentNode); @@ -1935,7 +1935,7 @@ void MEIOutput::WriteStaff(pugi::xml_node currentNode, Staff *staff) { assert(staff); - WriteXmlId(currentNode, staff); + this->WriteXmlId(currentNode, staff); staff->WriteFacsimile(currentNode); staff->WriteNInteger(currentNode); staff->WriteTyped(currentNode); @@ -1952,9 +1952,9 @@ void MEIOutput::WriteTempo(pugi::xml_node currentNode, Tempo *tempo) { assert(tempo); - WriteControlElement(currentNode, tempo); - WriteTextDirInterface(currentNode, tempo); - WriteTimePointInterface(currentNode, tempo); + this->WriteControlElement(currentNode, tempo); + this->WriteTextDirInterface(currentNode, tempo); + this->WriteTimePointInterface(currentNode, tempo); tempo->WriteLang(currentNode); tempo->WriteMidiTempo(currentNode); tempo->WriteMmTempo(currentNode); @@ -1964,8 +1964,8 @@ void MEIOutput::WriteTie(pugi::xml_node currentNode, Tie *tie) { assert(tie); - WriteControlElement(currentNode, tie); - WriteTimeSpanningInterface(currentNode, tie); + this->WriteControlElement(currentNode, tie); + this->WriteTimeSpanningInterface(currentNode, tie); tie->WriteColor(currentNode); tie->WriteCurvature(currentNode); tie->WriteCurveRend(currentNode); @@ -1975,8 +1975,8 @@ void MEIOutput::WriteTrill(pugi::xml_node currentNode, Trill *trill) { assert(trill); - WriteControlElement(currentNode, trill); - WriteTimeSpanningInterface(currentNode, trill); + this->WriteControlElement(currentNode, trill); + this->WriteTimeSpanningInterface(currentNode, trill); trill->WriteColor(currentNode); trill->WriteExtender(currentNode); trill->WriteExtSym(currentNode); @@ -1990,8 +1990,8 @@ void MEIOutput::WriteTurn(pugi::xml_node currentNode, Turn *turn) { assert(turn); - WriteControlElement(currentNode, turn); - WriteTimePointInterface(currentNode, turn); + this->WriteControlElement(currentNode, turn); + this->WriteTimePointInterface(currentNode, turn); turn->WriteColor(currentNode); turn->WriteExtSym(currentNode); turn->WriteOrnamentAccid(currentNode); @@ -2003,7 +2003,7 @@ void MEIOutput::WriteLayer(pugi::xml_node currentNode, Layer *layer) { assert(layer); - WriteXmlId(currentNode, layer); + this->WriteXmlId(currentNode, layer); layer->WriteNInteger(currentNode); layer->WriteTyped(currentNode); layer->WriteVisibility(currentNode); @@ -2013,8 +2013,8 @@ void MEIOutput::WriteLayerElement(pugi::xml_node currentNode, LayerElement *elem { assert(element); - WriteXmlId(currentNode, element); - WriteLinkingInterface(currentNode, element); + this->WriteXmlId(currentNode, element); + this->WriteLinkingInterface(currentNode, element); element->WriteLabelled(currentNode); element->WriteTyped(currentNode); if (element->m_xAbs != VRV_UNSET) { @@ -2034,8 +2034,8 @@ void MEIOutput::WriteAccid(pugi::xml_node currentNode, Accid *accid) return; } - WriteLayerElement(currentNode, accid); - WritePositionInterface(currentNode, accid); + this->WriteLayerElement(currentNode, accid); + this->WritePositionInterface(currentNode, accid); accid->WriteAccidental(currentNode); accid->WriteAccidentalGestural(currentNode); accid->WriteAccidLog(currentNode); @@ -2054,7 +2054,7 @@ void MEIOutput::WriteArtic(pugi::xml_node currentNode, Artic *artic) return; } - WriteLayerElement(currentNode, artic); + this->WriteLayerElement(currentNode, artic); artic->WriteArticulation(currentNode); artic->WriteColor(currentNode); artic->WriteEnclosingChars(currentNode); @@ -2066,7 +2066,7 @@ void MEIOutput::WriteBarLine(pugi::xml_node currentNode, BarLine *barLine) { assert(barLine); - WriteLayerElement(currentNode, barLine); + this->WriteLayerElement(currentNode, barLine); barLine->WriteBarLineLog(currentNode); barLine->WriteColor(currentNode); barLine->WriteNNumberLike(currentNode); @@ -2077,7 +2077,7 @@ void MEIOutput::WriteBeam(pugi::xml_node currentNode, Beam *beam) { assert(beam); - WriteLayerElement(currentNode, beam); + this->WriteLayerElement(currentNode, beam); beam->WriteBeamedWith(currentNode); beam->WriteBeamRend(currentNode); beam->WriteColor(currentNode); @@ -2088,7 +2088,7 @@ void MEIOutput::WriteBeatRpt(pugi::xml_node currentNode, BeatRpt *beatRpt) { assert(beatRpt); - WriteLayerElement(currentNode, beatRpt); + this->WriteLayerElement(currentNode, beatRpt); beatRpt->WriteColor(currentNode); beatRpt->WriteBeatRptLog(currentNode); beatRpt->WriteBeatRptVis(currentNode); @@ -2098,7 +2098,7 @@ void MEIOutput::WriteBTrem(pugi::xml_node currentNode, BTrem *bTrem) { assert(bTrem); - WriteLayerElement(currentNode, bTrem); + this->WriteLayerElement(currentNode, bTrem); bTrem->WriteBTremLog(currentNode); bTrem->WriteTremMeasured(currentNode); } @@ -2107,8 +2107,8 @@ void MEIOutput::WriteChord(pugi::xml_node currentNode, Chord *chord) { assert(chord); - WriteLayerElement(currentNode, chord); - WriteDurationInterface(currentNode, chord); + this->WriteLayerElement(currentNode, chord); + this->WriteDurationInterface(currentNode, chord); chord->WriteColor(currentNode); chord->WriteCue(currentNode); chord->WriteGraced(currentNode); @@ -2136,8 +2136,8 @@ void MEIOutput::WriteClef(pugi::xml_node currentNode, Clef *clef) return; } - WriteLayerElement(currentNode, clef); - WriteFacsimileInterface(currentNode, clef); + this->WriteLayerElement(currentNode, clef); + this->WriteFacsimileInterface(currentNode, clef); clef->WriteClefShape(currentNode); clef->WriteColor(currentNode); clef->WriteEnclosingChars(currentNode); @@ -2151,10 +2151,10 @@ void MEIOutput::WriteCustos(pugi::xml_node currentNode, Custos *custos) { assert(custos); - WriteFacsimileInterface(currentNode, custos); - WritePitchInterface(currentNode, custos); - WritePositionInterface(currentNode, custos); - WriteLayerElement(currentNode, custos); + this->WriteFacsimileInterface(currentNode, custos); + this->WritePitchInterface(currentNode, custos); + this->WritePositionInterface(currentNode, custos); + this->WriteLayerElement(currentNode, custos); custos->WriteColor(currentNode); custos->WriteExtSym(currentNode); } @@ -2163,8 +2163,8 @@ void MEIOutput::WriteDot(pugi::xml_node currentNode, Dot *dot) { assert(dot); - WriteLayerElement(currentNode, dot); - WritePositionInterface(currentNode, dot); + this->WriteLayerElement(currentNode, dot); + this->WritePositionInterface(currentNode, dot); dot->WriteColor(currentNode); dot->WriteDotLog(currentNode); } @@ -2173,7 +2173,7 @@ void MEIOutput::WriteFTrem(pugi::xml_node currentNode, FTrem *fTrem) { assert(fTrem); - WriteLayerElement(currentNode, fTrem); + this->WriteLayerElement(currentNode, fTrem); fTrem->WriteFTremVis(currentNode); fTrem->WriteTremMeasured(currentNode); } @@ -2182,7 +2182,7 @@ void MEIOutput::WriteGraceGrp(pugi::xml_node currentNode, GraceGrp *graceGrp) { assert(graceGrp); - WriteLayerElement(currentNode, graceGrp); + this->WriteLayerElement(currentNode, graceGrp); graceGrp->WriteColor(currentNode); graceGrp->WriteGraced(currentNode); graceGrp->WriteGraceGrpLog(currentNode); @@ -2192,7 +2192,7 @@ void MEIOutput::WriteHalfmRpt(pugi::xml_node currentNode, HalfmRpt *halfmRpt) { assert(halfmRpt); - WriteLayerElement(currentNode, halfmRpt); + this->WriteLayerElement(currentNode, halfmRpt); halfmRpt->WriteColor(currentNode); } @@ -2200,8 +2200,8 @@ void MEIOutput::WriteKeyAccid(pugi::xml_node currentNode, KeyAccid *keyAccid) { assert(keyAccid); - WriteLayerElement(currentNode, keyAccid); - WritePitchInterface(currentNode, keyAccid); + this->WriteLayerElement(currentNode, keyAccid); + this->WritePitchInterface(currentNode, keyAccid); keyAccid->WriteAccidental(currentNode); keyAccid->WriteColor(currentNode); keyAccid->WriteEnclosingChars(currentNode); @@ -2228,7 +2228,7 @@ void MEIOutput::WriteKeySig(pugi::xml_node currentNode, KeySig *keySig) return; } - WriteLayerElement(currentNode, keySig); + this->WriteLayerElement(currentNode, keySig); keySig->WriteAccidental(currentNode); keySig->WritePitch(currentNode); keySig->WriteKeySigAnl(currentNode); @@ -2241,7 +2241,7 @@ void MEIOutput::WriteLigature(pugi::xml_node currentNode, Ligature *ligature) { assert(ligature); - WriteLayerElement(currentNode, ligature); + this->WriteLayerElement(currentNode, ligature); ligature->WriteLigatureVis(currentNode); } @@ -2271,7 +2271,7 @@ void MEIOutput::WriteMensur(pugi::xml_node currentNode, Mensur *mensur) return; } - WriteLayerElement(currentNode, mensur); + this->WriteLayerElement(currentNode, mensur); mensur->WriteColor(currentNode); mensur->WriteCue(currentNode); mensur->WriteDurationRatio(currentNode); @@ -2297,7 +2297,7 @@ void MEIOutput::WriteMeterSig(pugi::xml_node currentNode, MeterSig *meterSig) return; } - WriteLayerElement(currentNode, meterSig); + this->WriteLayerElement(currentNode, meterSig); meterSig->WriteEnclosingChars(currentNode); meterSig->WriteMeterSigLog(currentNode); meterSig->WriteMeterSigVis(currentNode); @@ -2307,8 +2307,8 @@ void MEIOutput::WriteMRest(pugi::xml_node currentNode, MRest *mRest) { assert(mRest); - WriteLayerElement(currentNode, mRest); - WritePositionInterface(currentNode, mRest); + this->WriteLayerElement(currentNode, mRest); + this->WritePositionInterface(currentNode, mRest); mRest->WriteColor(currentNode); mRest->WriteCue(currentNode); mRest->WriteFermataPresent(currentNode); @@ -2319,7 +2319,7 @@ void MEIOutput::WriteMRpt(pugi::xml_node currentNode, MRpt *mRpt) { assert(mRpt); - WriteLayerElement(currentNode, mRpt); + this->WriteLayerElement(currentNode, mRpt); mRpt->WriteColor(currentNode); } @@ -2327,7 +2327,7 @@ void MEIOutput::WriteMRpt2(pugi::xml_node currentNode, MRpt2 *mRpt2) { assert(mRpt2); - WriteLayerElement(currentNode, mRpt2); + this->WriteLayerElement(currentNode, mRpt2); mRpt2->WriteColor(currentNode); } @@ -2335,15 +2335,15 @@ void MEIOutput::WriteMSpace(pugi::xml_node currentNode, MSpace *mSpace) { assert(mSpace); - WriteLayerElement(currentNode, mSpace); + this->WriteLayerElement(currentNode, mSpace); } void MEIOutput::WriteMultiRest(pugi::xml_node currentNode, MultiRest *multiRest) { assert(multiRest); - WriteLayerElement(currentNode, multiRest); - WritePositionInterface(currentNode, multiRest); + this->WriteLayerElement(currentNode, multiRest); + this->WritePositionInterface(currentNode, multiRest); multiRest->WriteColor(currentNode); multiRest->WriteMultiRestVis(currentNode); multiRest->WriteNumbered(currentNode); @@ -2355,7 +2355,7 @@ void MEIOutput::WriteMultiRpt(pugi::xml_node currentNode, MultiRpt *multiRpt) { assert(multiRpt); - WriteLayerElement(currentNode, multiRpt); + this->WriteLayerElement(currentNode, multiRpt); multiRpt->WriteNumbered(currentNode); } @@ -2363,11 +2363,11 @@ void MEIOutput::WriteNc(pugi::xml_node currentNode, Nc *nc) { assert(nc); - WriteLayerElement(currentNode, nc); - WriteDurationInterface(currentNode, nc); - WriteFacsimileInterface(currentNode, nc); - WritePitchInterface(currentNode, nc); - WritePositionInterface(currentNode, nc); + this->WriteLayerElement(currentNode, nc); + this->WriteDurationInterface(currentNode, nc); + this->WriteFacsimileInterface(currentNode, nc); + this->WritePitchInterface(currentNode, nc); + this->WritePositionInterface(currentNode, nc); nc->WriteColor(currentNode); nc->WriteIntervalMelodic(currentNode); nc->WriteNcForm(currentNode); @@ -2377,8 +2377,8 @@ void MEIOutput::WriteNeume(pugi::xml_node currentNode, Neume *neume) { assert(neume); - WriteLayerElement(currentNode, neume); - WriteFacsimileInterface(currentNode, neume); + this->WriteLayerElement(currentNode, neume); + this->WriteFacsimileInterface(currentNode, neume); neume->WriteColor(currentNode); } @@ -2386,10 +2386,10 @@ void MEIOutput::WriteNote(pugi::xml_node currentNode, Note *note) { assert(note); - WriteLayerElement(currentNode, note); - WriteDurationInterface(currentNode, note); - WritePitchInterface(currentNode, note); - WritePositionInterface(currentNode, note); + this->WriteLayerElement(currentNode, note); + this->WriteDurationInterface(currentNode, note); + this->WritePitchInterface(currentNode, note); + this->WritePositionInterface(currentNode, note); note->WriteColor(currentNode); note->WriteColoration(currentNode); note->WriteCue(currentNode); @@ -2409,9 +2409,9 @@ void MEIOutput::WriteRest(pugi::xml_node currentNode, Rest *rest) { assert(rest); - WriteLayerElement(currentNode, rest); - WriteDurationInterface(currentNode, rest); - WritePositionInterface(currentNode, rest); + this->WriteLayerElement(currentNode, rest); + this->WriteDurationInterface(currentNode, rest); + this->WritePositionInterface(currentNode, rest); rest->WriteColor(currentNode); rest->WriteCue(currentNode); rest->WriteExtSym(currentNode); @@ -2422,7 +2422,7 @@ void MEIOutput::WritePlica(pugi::xml_node currentNode, Plica *plica) { assert(plica); - WriteLayerElement(currentNode, plica); + this->WriteLayerElement(currentNode, plica); plica->WritePlicaVis(currentNode); } @@ -2430,22 +2430,22 @@ void MEIOutput::WriteProport(pugi::xml_node currentNode, Proport *proport) { assert(proport); - WriteLayerElement(currentNode, proport); + this->WriteLayerElement(currentNode, proport); } void MEIOutput::WriteSpace(pugi::xml_node currentNode, Space *space) { assert(space); - WriteLayerElement(currentNode, space); - WriteDurationInterface(currentNode, space); + this->WriteLayerElement(currentNode, space); + this->WriteDurationInterface(currentNode, space); } void MEIOutput::WriteTabDurSym(pugi::xml_node currentNode, TabDurSym *tabDurSym) { assert(tabDurSym); - WriteLayerElement(currentNode, tabDurSym); + this->WriteLayerElement(currentNode, tabDurSym); tabDurSym->WriteNNumberLike(currentNode); } @@ -2453,15 +2453,15 @@ void MEIOutput::WriteTabGrp(pugi::xml_node currentNode, TabGrp *tabGrp) { assert(tabGrp); - WriteLayerElement(currentNode, tabGrp); - WriteDurationInterface(currentNode, tabGrp); + this->WriteLayerElement(currentNode, tabGrp); + this->WriteDurationInterface(currentNode, tabGrp); } void MEIOutput::WriteTuplet(pugi::xml_node currentNode, Tuplet *tuplet) { assert(tuplet); - WriteLayerElement(currentNode, tuplet); + this->WriteLayerElement(currentNode, tuplet); tuplet->WriteColor(currentNode); tuplet->WriteDurationRatio(currentNode); tuplet->WriteNumberPlacement(currentNode); @@ -2472,7 +2472,7 @@ void MEIOutput::WriteVerse(pugi::xml_node currentNode, Verse *verse) { assert(verse); - WriteLayerElement(currentNode, verse); + this->WriteLayerElement(currentNode, verse); verse->WriteColor(currentNode); verse->WriteLang(currentNode); verse->WriteNInteger(currentNode); @@ -2483,8 +2483,8 @@ void MEIOutput::WriteSyl(pugi::xml_node currentNode, Syl *syl) { assert(syl); - WriteLayerElement(currentNode, syl); - WriteFacsimileInterface(currentNode, syl); + this->WriteLayerElement(currentNode, syl); + this->WriteFacsimileInterface(currentNode, syl); syl->WriteLang(currentNode); syl->WriteTypography(currentNode); syl->WriteSylLog(currentNode); @@ -2494,7 +2494,7 @@ void MEIOutput::WriteSyllable(pugi::xml_node currentNode, Syllable *syllable) { assert(syllable); - WriteLayerElement(currentNode, syllable); + this->WriteLayerElement(currentNode, syllable); syllable->WriteColor(currentNode); syllable->WriteSlashCount(currentNode); } @@ -2502,13 +2502,13 @@ void MEIOutput::WriteSyllable(pugi::xml_node currentNode, Syllable *syllable) void MEIOutput::WriteFacsimile(pugi::xml_node currentNode, Facsimile *facsimile) { assert(facsimile); - WriteXmlId(currentNode, facsimile); + this->WriteXmlId(currentNode, facsimile); // Write Surface(s) for (Object *child = facsimile->GetFirst(); child != NULL; child = facsimile->GetNext()) { if (child->GetClassId() == SURFACE) { pugi::xml_node childNode = currentNode.append_child("surface"); - WriteSurface(childNode, dynamic_cast(child)); + this->WriteSurface(childNode, dynamic_cast(child)); } else { LogWarning("Unable to write child '%s' of facsimile", child->GetClassName().c_str()); @@ -2519,14 +2519,14 @@ void MEIOutput::WriteFacsimile(pugi::xml_node currentNode, Facsimile *facsimile) void MEIOutput::WriteSurface(pugi::xml_node currentNode, Surface *surface) { assert(surface); - WriteXmlId(currentNode, surface); + this->WriteXmlId(currentNode, surface); surface->WriteCoordinated(currentNode); surface->WriteTyped(currentNode); for (Object *child = surface->GetFirst(); child != NULL; child = surface->GetNext()) { if (child->GetClassId() == ZONE) { pugi::xml_node childNode = currentNode.append_child("zone"); - WriteZone(childNode, dynamic_cast(child)); + this->WriteZone(childNode, dynamic_cast(child)); } else { LogWarning("Unable to write child '%s' of surface", child->GetClassName().c_str()); @@ -2537,7 +2537,7 @@ void MEIOutput::WriteSurface(pugi::xml_node currentNode, Surface *surface) void MEIOutput::WriteZone(pugi::xml_node currentNode, Zone *zone) { assert(zone); - WriteXmlId(currentNode, zone); + this->WriteXmlId(currentNode, zone); zone->WriteCoordinated(currentNode); zone->WriteTyped(currentNode); } @@ -2546,7 +2546,7 @@ void MEIOutput::WriteTextElement(pugi::xml_node currentNode, TextElement *textEl { assert(textElement); - WriteXmlId(currentNode, textElement); + this->WriteXmlId(currentNode, textElement); textElement->WriteLabelled(currentNode); textElement->WriteTyped(currentNode); } @@ -2555,8 +2555,8 @@ void MEIOutput::WriteF(pugi::xml_node currentNode, F *f) { assert(f); - WriteTextElement(currentNode, f); - WriteTimeSpanningInterface(currentNode, f); + this->WriteTextElement(currentNode, f); + this->WriteTimeSpanningInterface(currentNode, f); f->WriteExtender(currentNode); } @@ -2564,30 +2564,30 @@ void MEIOutput::WriteFig(pugi::xml_node currentNode, Fig *fig) { assert(fig); - WriteTextElement(currentNode, fig); - WriteAreaPosInterface(currentNode, fig); + this->WriteTextElement(currentNode, fig); + this->WriteAreaPosInterface(currentNode, fig); } void MEIOutput::WriteLb(pugi::xml_node currentNode, Lb *lb) { assert(lb); - WriteTextElement(currentNode, lb); + this->WriteTextElement(currentNode, lb); } void MEIOutput::WriteNum(pugi::xml_node currentNode, Num *num) { assert(num); - WriteTextElement(currentNode, num); + this->WriteTextElement(currentNode, num); } void MEIOutput::WriteRend(pugi::xml_node currentNode, Rend *rend) { assert(rend); - WriteTextElement(currentNode, rend); - WriteAreaPosInterface(currentNode, rend); + this->WriteTextElement(currentNode, rend); + this->WriteAreaPosInterface(currentNode, rend); rend->WriteColor(currentNode); rend->WriteLang(currentNode); rend->WriteTextRendition(currentNode); @@ -2599,7 +2599,7 @@ void MEIOutput::WriteSvg(pugi::xml_node currentNode, Svg *svg) { assert(svg); - WriteXmlId(currentNode, svg); + this->WriteXmlId(currentNode, svg); pugi::xml_node svgNode = svg->Get(); for (pugi::xml_attribute attr : svgNode.attributes()) { @@ -2715,7 +2715,7 @@ void MEIOutput::WriteTimeSpanningInterface(pugi::xml_node element, TimeSpanningI { assert(interface); - WriteTimePointInterface(element, interface); + this->WriteTimePointInterface(element, interface); interface->WriteStartEndId(element); interface->WriteTimestamp2Logical(element); } @@ -2736,7 +2736,7 @@ void MEIOutput::WriteEditorialElement(pugi::xml_node currentNode, EditorialEleme { assert(element); - WriteXmlId(currentNode, element); + this->WriteXmlId(currentNode, element); element->WriteLabelled(currentNode); element->WriteTyped(currentNode); } @@ -2745,7 +2745,7 @@ void MEIOutput::WriteAbbr(pugi::xml_node currentNode, Abbr *abbr) { assert(abbr); - WriteEditorialElement(currentNode, abbr); + this->WriteEditorialElement(currentNode, abbr); abbr->WriteSource(currentNode); } @@ -2753,7 +2753,7 @@ void MEIOutput::WriteAdd(pugi::xml_node currentNode, Add *add) { assert(add); - WriteEditorialElement(currentNode, add); + this->WriteEditorialElement(currentNode, add); add->WriteSource(currentNode); } @@ -2761,7 +2761,7 @@ void MEIOutput::WriteAnnot(pugi::xml_node currentNode, Annot *annot) { assert(annot); - WriteEditorialElement(currentNode, annot); + this->WriteEditorialElement(currentNode, annot); annot->WritePlist(currentNode); annot->WriteSource(currentNode); // special case where we keep the pugi::nodes @@ -2774,21 +2774,21 @@ void MEIOutput::WriteApp(pugi::xml_node currentNode, App *app) { assert(app); - WriteEditorialElement(currentNode, app); + this->WriteEditorialElement(currentNode, app); } void MEIOutput::WriteChoice(pugi::xml_node currentNode, Choice *choice) { assert(choice); - WriteEditorialElement(currentNode, choice); + this->WriteEditorialElement(currentNode, choice); } void MEIOutput::WriteCorr(pugi::xml_node currentNode, Corr *corr) { assert(corr); - WriteEditorialElement(currentNode, corr); + this->WriteEditorialElement(currentNode, corr); corr->WriteSource(currentNode); } @@ -2796,7 +2796,7 @@ void MEIOutput::WriteDamage(pugi::xml_node currentNode, Damage *damage) { assert(damage); - WriteEditorialElement(currentNode, damage); + this->WriteEditorialElement(currentNode, damage); damage->WriteSource(currentNode); } @@ -2804,7 +2804,7 @@ void MEIOutput::WriteDel(pugi::xml_node currentNode, Del *del) { assert(del); - WriteEditorialElement(currentNode, del); + this->WriteEditorialElement(currentNode, del); del->WriteSource(currentNode); } @@ -2812,7 +2812,7 @@ void MEIOutput::WriteExpan(pugi::xml_node currentNode, Expan *expan) { assert(expan); - WriteEditorialElement(currentNode, expan); + this->WriteEditorialElement(currentNode, expan); expan->WriteSource(currentNode); } @@ -2820,7 +2820,7 @@ void MEIOutput::WriteLem(pugi::xml_node currentNode, Lem *lem) { assert(lem); - WriteEditorialElement(currentNode, lem); + this->WriteEditorialElement(currentNode, lem); lem->WriteSource(currentNode); } @@ -2828,7 +2828,7 @@ void MEIOutput::WriteOrig(pugi::xml_node currentNode, Orig *orig) { assert(orig); - WriteEditorialElement(currentNode, orig); + this->WriteEditorialElement(currentNode, orig); orig->WriteSource(currentNode); } @@ -2836,7 +2836,7 @@ void MEIOutput::WriteRdg(pugi::xml_node currentNode, Rdg *rdg) { assert(rdg); - WriteEditorialElement(currentNode, rdg); + this->WriteEditorialElement(currentNode, rdg); rdg->WriteSource(currentNode); } @@ -2844,14 +2844,14 @@ void MEIOutput::WriteRef(pugi::xml_node currentNode, Ref *ref) { assert(ref); - WriteEditorialElement(currentNode, ref); + this->WriteEditorialElement(currentNode, ref); } void MEIOutput::WriteReg(pugi::xml_node currentNode, Reg *reg) { assert(reg); - WriteEditorialElement(currentNode, reg); + this->WriteEditorialElement(currentNode, reg); reg->WriteSource(currentNode); } @@ -2859,7 +2859,7 @@ void MEIOutput::WriteRestore(pugi::xml_node currentNode, Restore *restore) { assert(restore); - WriteEditorialElement(currentNode, restore); + this->WriteEditorialElement(currentNode, restore); restore->WriteSource(currentNode); return; @@ -2869,7 +2869,7 @@ void MEIOutput::WriteSic(pugi::xml_node currentNode, Sic *sic) { assert(sic); - WriteEditorialElement(currentNode, sic); + this->WriteEditorialElement(currentNode, sic); sic->WriteSource(currentNode); } @@ -2877,14 +2877,14 @@ void MEIOutput::WriteSubst(pugi::xml_node currentNode, Subst *subst) { assert(subst); - WriteEditorialElement(currentNode, subst); + this->WriteEditorialElement(currentNode, subst); } void MEIOutput::WriteSupplied(pugi::xml_node currentNode, Supplied *supplied) { assert(supplied); - WriteEditorialElement(currentNode, supplied); + this->WriteEditorialElement(currentNode, supplied); supplied->WriteSource(currentNode); } @@ -2892,7 +2892,7 @@ void MEIOutput::WriteUnclear(pugi::xml_node currentNode, Unclear *unclear) { assert(unclear); - WriteEditorialElement(currentNode, unclear); + this->WriteEditorialElement(currentNode, unclear); unclear->WriteSource(currentNode); } @@ -2967,7 +2967,7 @@ bool MEIInput::Import(const std::string &mei) pugi::xml_document doc; doc.load_string(mei.c_str(), (pugi::parse_comments | pugi::parse_default) & ~pugi::parse_eol); pugi::xml_node root = doc.first_child(); - return ReadDoc(root); + return this->ReadDoc(root); } catch (char *str) { LogError("%s", str); @@ -2982,7 +2982,7 @@ bool MEIInput::IsAllowed(std::string element, Object *filterParent) } // editorial - if (IsEditorialElementName(element)) { + if (this->IsEditorialElementName(element)) { // Because of the Clone issue on annot do not support it in label and labelAbbr if (filterParent->Is(LABEL) && (element == "annot")) { return false; @@ -3459,7 +3459,7 @@ bool MEIInput::ReadDoc(pugi::xml_node root) facsimile = music.child("facsimile"); if ((!facsimile.empty()) && (m_doc->GetOptions()->m_useFacsimile.GetValue())) { - ReadFacsimile(m_doc, facsimile); + this->ReadFacsimile(m_doc, facsimile); m_doc->SetType(Facs); m_doc->m_drawingPageHeight = m_doc->GetFacsimile()->GetMaxY(); m_doc->m_drawingPageWidth = m_doc->GetFacsimile()->GetMaxX(); @@ -3538,7 +3538,7 @@ bool MEIInput::ReadDoc(pugi::xml_node root) } const bool allMdivVisible = m_doc->GetOptions()->m_mdivAll.GetValue(); - success = ReadMdivChildren(m_doc, body, allMdivVisible); + success = this->ReadMdivChildren(m_doc, body, allMdivVisible); if (success) { m_doc->ExpandExpansions(); @@ -3570,7 +3570,7 @@ bool MEIInput::ReadDoc(pugi::xml_node root) bool MEIInput::ReadPages(Object *parent, pugi::xml_node pages) { Pages *vrvPages = new Pages(); - SetMeiUuid(pages, vrvPages); + this->SetMeiUuid(pages, vrvPages); vrvPages->ReadLabelled(pages); vrvPages->ReadNNumberLike(pages); @@ -3597,7 +3597,7 @@ bool MEIInput::ReadPages(Object *parent, pugi::xml_node pages) } else { // This actually sets the Doc::m_scoreDef - success = ReadScoreDef(vrvPages, scoreDef); + success = this->ReadScoreDef(vrvPages, scoreDef); } if (!success) return false; @@ -3609,25 +3609,25 @@ bool MEIInput::ReadPages(Object *parent, pugi::xml_node pages) if (!success) break; // page if (std::string(current.name()) == "page") { - success = ReadPage(vrvPages, current); + success = this->ReadPage(vrvPages, current); } // xml comment else if (std::string(current.name()) == "") { - success = ReadXMLComment(parent, current); + success = this->ReadXMLComment(parent, current); } else { LogWarning("Unsupported '<%s>' within ", current.name()); } } - ReadUnsupportedAttr(pages, vrvPages); + this->ReadUnsupportedAttr(pages, vrvPages); return success; } bool MEIInput::ReadPage(Object *parent, pugi::xml_node page) { Page *vrvPage = new Page(); - SetMeiUuid(page, vrvPage); + this->SetMeiUuid(page, vrvPage); if ((m_doc->GetType() == Transcription) && (m_version == MEI_2013)) { UpgradePageTo_3_0_0(vrvPage, m_doc); @@ -3666,7 +3666,7 @@ bool MEIInput::ReadPage(Object *parent, pugi::xml_node page) } parent->AddChild(vrvPage); - bool success = ReadPageChildren(vrvPage, page); + bool success = this->ReadPageChildren(vrvPage, page); if (success && (m_doc->GetType() == Transcription) && (vrvPage->GetPPUFactor() != 1.0)) { ApplyPPUFactorParams applyPPUFactorParams; @@ -3678,7 +3678,7 @@ bool MEIInput::ReadPage(Object *parent, pugi::xml_node page) UpgradePageTo_5_0_0(vrvPage); } - ReadUnsupportedAttr(page, vrvPage); + this->ReadUnsupportedAttr(page, vrvPage); return success; } @@ -3691,24 +3691,24 @@ bool MEIInput::ReadPageChildren(Object *parent, pugi::xml_node parentNode) pugi::xml_node current; for (current = parentNode.first_child(); current; current = current.next_sibling()) { if (std::string(current.name()) == "mdiv") { - ReadMdiv(parent, current, true); + this->ReadMdiv(parent, current, true); } else if (std::string(current.name()) == "score") { - ReadScore(parent, current); + this->ReadScore(parent, current); } else if (std::string(current.name()) == "system") { - ReadSystem(parent, current); + this->ReadSystem(parent, current); } // mdiv in page-based MEI else if (std::string(current.name()) == "mdivb") { - ReadMdiv(parent, current, true); + this->ReadMdiv(parent, current, true); } else if (std::string(current.name()) == "milestoneEnd") { - ReadPageMilestoneEnd(parent, current); + this->ReadPageMilestoneEnd(parent, current); } // xml comment else if (std::string(current.name()) == "") { - ReadXMLComment(parent, current); + this->ReadXMLComment(parent, current); } else { LogWarning("Unsupported '<%s>' within ", current.name()); @@ -3744,7 +3744,7 @@ bool MEIInput::ReadPageMilestoneEnd(Object *parent, pugi::xml_node milestoneEnd) } PageMilestoneEnd *vrvElementEnd = new PageMilestoneEnd(start); - SetMeiUuid(milestoneEnd, vrvElementEnd); + this->SetMeiUuid(milestoneEnd, vrvElementEnd); interface->SetEnd(vrvElementEnd); parent->AddChild(vrvElementEnd); @@ -3754,7 +3754,7 @@ bool MEIInput::ReadPageMilestoneEnd(Object *parent, pugi::xml_node milestoneEnd) bool MEIInput::ReadMdiv(Object *parent, pugi::xml_node mdiv, bool isVisible) { Mdiv *vrvMdiv = new Mdiv(); - SetMeiUuid(mdiv, vrvMdiv); + this->SetMeiUuid(mdiv, vrvMdiv); vrvMdiv->ReadLabelled(mdiv); vrvMdiv->ReadNNumberLike(mdiv); @@ -3765,8 +3765,8 @@ bool MEIInput::ReadMdiv(Object *parent, pugi::xml_node mdiv, bool isVisible) vrvMdiv->MakeVisible(); } - ReadUnsupportedAttr(mdiv, vrvMdiv); - return ReadMdivChildren(vrvMdiv, mdiv, isVisible); + this->ReadUnsupportedAttr(mdiv, vrvMdiv); + return this->ReadMdivChildren(vrvMdiv, mdiv, isVisible); } bool MEIInput::ReadMdivChildren(Object *parent, pugi::xml_node parentNode, bool isVisible) @@ -3787,10 +3787,10 @@ bool MEIInput::ReadMdivChildren(Object *parent, pugi::xml_node parentNode, bool bool makeVisible = (isVisible || (m_selectedMdiv == current)); if (!success) break; if (std::string(current.name()) == "mdiv") { - success = ReadMdiv(parent, current, makeVisible); + success = this->ReadMdiv(parent, current, makeVisible); } else if (std::string(current.name()) == "score") { - success = ReadScore(parent, current); + success = this->ReadScore(parent, current); if (parentNode.last_child() != current) { LogWarning("Skipping nodes after element"); } @@ -3798,7 +3798,7 @@ bool MEIInput::ReadMdivChildren(Object *parent, pugi::xml_node parentNode, bool } // xml comment else if (std::string(current.name()) == "") { - success = ReadXMLComment(parent, current); + success = this->ReadXMLComment(parent, current); } else { LogWarning("Unsupported '<%s>' within ", current.name()); @@ -3811,7 +3811,7 @@ bool MEIInput::ReadMdivChildren(Object *parent, pugi::xml_node parentNode, bool bool MEIInput::ReadScore(Object *parent, pugi::xml_node score) { Score *vrvScore = new Score(); - SetMeiUuid(score, vrvScore); + this->SetMeiUuid(score, vrvScore); vrvScore->ReadLabelled(score); vrvScore->ReadNNumberLike(score); @@ -3829,7 +3829,7 @@ bool MEIInput::ReadScore(Object *parent, pugi::xml_node score) } // This actually sets the Doc::m_scoreDef - bool success = ReadScoreDef(vrvScore, scoreDef); + bool success = this->ReadScoreDef(vrvScore, scoreDef); if (!success) return false; @@ -3838,47 +3838,47 @@ bool MEIInput::ReadScore(Object *parent, pugi::xml_node score) if (!success) break; std::string elementName = std::string(current.name()); // editorial - if (IsEditorialElementName(current.name())) { - success = ReadEditorialElement(vrvScore, current, EDITORIAL_TOPLEVEL); + if (this->IsEditorialElementName(current.name())) { + success = this->ReadEditorialElement(vrvScore, current, EDITORIAL_TOPLEVEL); } // content else if (elementName == "ending") { - success = ReadEnding(vrvScore, current); + success = this->ReadEnding(vrvScore, current); } else if (elementName == "section") { - success = ReadSection(vrvScore, current); + success = this->ReadSection(vrvScore, current); } else if (elementName == "sb") { - success = ReadSb(vrvScore, current); + success = this->ReadSb(vrvScore, current); } else if (elementName == "pb") { - success = ReadPb(vrvScore, current); + success = this->ReadPb(vrvScore, current); } // xml comment else if (std::string(current.name()) == "") { - success = ReadXMLComment(parent, current); + success = this->ReadXMLComment(parent, current); } else { LogWarning("Element <%s> within is not supported and will be ignored ", elementName.c_str()); } } - ReadUnsupportedAttr(score, vrvScore); + this->ReadUnsupportedAttr(score, vrvScore); return success; } bool MEIInput::ReadSection(Object *parent, pugi::xml_node section) { Section *vrvSection = new Section(); - SetMeiUuid(section, vrvSection); + this->SetMeiUuid(section, vrvSection); vrvSection->ReadNNumberLike(section); vrvSection->ReadSectionVis(section); parent->AddChild(vrvSection); - ReadUnsupportedAttr(section, vrvSection); + this->ReadUnsupportedAttr(section, vrvSection); if (m_readingScoreBased) { - return ReadSectionChildren(vrvSection, section); + return this->ReadSectionChildren(vrvSection, section); } else if (section.first_child()) { LogWarning("Unexpected
content in page-based MEI"); @@ -3897,30 +3897,30 @@ bool MEIInput::ReadSectionChildren(Object *parent, pugi::xml_node parentNode) for (current = parentNode.first_child(); current; current = current.next_sibling()) { if (!success) break; // editorial - else if (IsEditorialElementName(current.name())) { - success = ReadEditorialElement(parent, current, EDITORIAL_TOPLEVEL); + else if (this->IsEditorialElementName(current.name())) { + success = this->ReadEditorialElement(parent, current, EDITORIAL_TOPLEVEL); } // content else if (std::string(current.name()) == "ending") { // we should not endings with unmeasured music ... (?) assert(!unmeasured); - success = ReadEnding(parent, current); + success = this->ReadEnding(parent, current); } else if (std::string(current.name()) == "expansion") { - success = ReadExpansion(parent, current); + success = this->ReadExpansion(parent, current); } else if (std::string(current.name()) == "scoreDef") { - success = ReadScoreDef(parent, current); + success = this->ReadScoreDef(parent, current); } else if (std::string(current.name()) == "section") { - success = ReadSection(parent, current); + success = this->ReadSection(parent, current); } // pb and sb else if (std::string(current.name()) == "pb") { - success = ReadPb(parent, current); + success = this->ReadPb(parent, current); } else if (std::string(current.name()) == "sb") { - success = ReadSb(parent, current); + success = this->ReadSb(parent, current); } // unmeasured music else if (std::string(current.name()) == "staff") { @@ -3935,7 +3935,7 @@ bool MEIInput::ReadSectionChildren(Object *parent, pugi::xml_node parentNode) return false; } } - success = ReadStaff(unmeasured, current); + success = this->ReadStaff(unmeasured, current); } else if (std::string(current.name()) == "measure") { // we should not mix measured and unmeasured music within a system... @@ -3943,11 +3943,11 @@ bool MEIInput::ReadSectionChildren(Object *parent, pugi::xml_node parentNode) // if (parent->IsEditorialElement()) { // m_hasMeasureWithinEditMarkup = true; //} - success = ReadMeasure(parent, current); + success = this->ReadMeasure(parent, current); } // xml comment else if (std::string(current.name()) == "") { - success = ReadXMLComment(parent, current); + success = this->ReadXMLComment(parent, current); } else { LogWarning("Unsupported '<%s>' within
", current.name()); @@ -3958,7 +3958,7 @@ bool MEIInput::ReadSectionChildren(Object *parent, pugi::xml_node parentNode) bool MEIInput::ReadSystemElement(pugi::xml_node element, SystemElement *object) { - SetMeiUuid(element, object); + this->SetMeiUuid(element, object); object->ReadTyped(element); return true; @@ -3967,15 +3967,15 @@ bool MEIInput::ReadSystemElement(pugi::xml_node element, SystemElement *object) bool MEIInput::ReadEnding(Object *parent, pugi::xml_node ending) { Ending *vrvEnding = new Ending(); - ReadSystemElement(ending, vrvEnding); + this->ReadSystemElement(ending, vrvEnding); vrvEnding->ReadLineRend(ending); vrvEnding->ReadNNumberLike(ending); parent->AddChild(vrvEnding); - ReadUnsupportedAttr(ending, vrvEnding); + this->ReadUnsupportedAttr(ending, vrvEnding); if (m_readingScoreBased) { - return ReadSectionChildren(vrvEnding, ending); + return this->ReadSectionChildren(vrvEnding, ending); } return true; } @@ -3983,13 +3983,13 @@ bool MEIInput::ReadEnding(Object *parent, pugi::xml_node ending) bool MEIInput::ReadExpansion(Object *parent, pugi::xml_node expansion) { Expansion *vrvExpansion = new Expansion(); - ReadSystemElement(expansion, vrvExpansion); - ReadPlistInterface(expansion, vrvExpansion); + this->ReadSystemElement(expansion, vrvExpansion); + this->ReadPlistInterface(expansion, vrvExpansion); parent->AddChild(vrvExpansion); - ReadUnsupportedAttr(expansion, vrvExpansion); + this->ReadUnsupportedAttr(expansion, vrvExpansion); if (m_readingScoreBased) { - return ReadSectionChildren(vrvExpansion, expansion); + return this->ReadSectionChildren(vrvExpansion, expansion); } return true; } @@ -3999,12 +3999,12 @@ bool MEIInput::ReadPb(Object *parent, pugi::xml_node pb) m_layoutInformation = LAYOUT_ENCODED; Pb *vrvPb = new Pb(); - ReadSystemElement(pb, vrvPb); + this->ReadSystemElement(pb, vrvPb); vrvPb->ReadNNumberLike(pb); parent->AddChild(vrvPb); - ReadUnsupportedAttr(pb, vrvPb); + this->ReadUnsupportedAttr(pb, vrvPb); return true; } @@ -4015,12 +4015,12 @@ bool MEIInput::ReadSb(Object *parent, pugi::xml_node sb) m_layoutInformation = LAYOUT_ENCODED; Sb *vrvSb = new Sb(); - ReadSystemElement(sb, vrvSb); + this->ReadSystemElement(sb, vrvSb); vrvSb->ReadNNumberLike(sb); parent->AddChild(vrvSb); - ReadUnsupportedAttr(sb, vrvSb); + this->ReadUnsupportedAttr(sb, vrvSb); return true; } @@ -4031,7 +4031,7 @@ bool MEIInput::ReadSystem(Object *parent, pugi::xml_node system) assert(dynamic_cast(parent)); System *vrvSystem = new System(); - SetMeiUuid(system, vrvSystem); + this->SetMeiUuid(system, vrvSystem); vrvSystem->ReadTyped(system); if (system.attribute("system.leftmar")) { @@ -4048,8 +4048,8 @@ bool MEIInput::ReadSystem(Object *parent, pugi::xml_node system) } parent->AddChild(vrvSystem); - ReadUnsupportedAttr(system, vrvSystem); - return ReadSystemChildren(vrvSystem, system); + this->ReadUnsupportedAttr(system, vrvSystem); + return this->ReadSystemChildren(vrvSystem, system); } bool MEIInput::ReadSystemChildren(Object *parent, pugi::xml_node parentNode) @@ -4062,25 +4062,25 @@ bool MEIInput::ReadSystemChildren(Object *parent, pugi::xml_node parentNode) for (current = parentNode.first_child(); current; current = current.next_sibling()) { if (!success) break; // editorial - else if (IsEditorialElementName(current.name())) { - success = ReadEditorialElement(parent, current, EDITORIAL_TOPLEVEL); + else if (this->IsEditorialElementName(current.name())) { + success = this->ReadEditorialElement(parent, current, EDITORIAL_TOPLEVEL); } // section else if (std::string(current.name()) == "section") { - success = ReadSection(parent, current); + success = this->ReadSection(parent, current); } // section in page-based MEI else if (std::string(current.name()) == "secb") { - success = ReadSection(parent, current); + success = this->ReadSection(parent, current); } else if (std::string(current.name()) == "milestoneEnd") { - success = ReadSystemMilestoneEnd(parent, current); + success = this->ReadSystemMilestoneEnd(parent, current); } // content else if (std::string(current.name()) == "scoreDef") { // we should not have scoredef with unmeasured music within a system... (?) assert(!unmeasured); - ReadScoreDef(parent, current); + this->ReadScoreDef(parent, current); } // unmeasured music else if (std::string(current.name()) == "staff") { @@ -4100,16 +4100,16 @@ bool MEIInput::ReadSystemChildren(Object *parent, pugi::xml_node parentNode) return false; } } - success = ReadStaff(unmeasured, current); + success = this->ReadStaff(unmeasured, current); } else if (std::string(current.name()) == "measure") { // we should not mix measured and unmeasured music within a system... assert(!unmeasured); - success = ReadMeasure(parent, current); + success = this->ReadMeasure(parent, current); } // xml comment else if (std::string(current.name()) == "") { - success = ReadXMLComment(parent, current); + success = this->ReadXMLComment(parent, current); } else { LogWarning("Unsupported '<%s>' within ", current.name()); @@ -4144,7 +4144,7 @@ bool MEIInput::ReadSystemMilestoneEnd(Object *parent, pugi::xml_node milestoneEn } SystemMilestoneEnd *vrvElementEnd = new SystemMilestoneEnd(start); - SetMeiUuid(milestoneEnd, vrvElementEnd); + this->SetMeiUuid(milestoneEnd, vrvElementEnd); interface->SetEnd(vrvElementEnd); parent->AddChild(vrvElementEnd); @@ -4153,7 +4153,7 @@ bool MEIInput::ReadSystemMilestoneEnd(Object *parent, pugi::xml_node milestoneEn bool MEIInput::ReadScoreDefElement(pugi::xml_node element, ScoreDefElement *object) { - SetMeiUuid(element, object); + this->SetMeiUuid(element, object); object->ReadMeasureNumbers(element); object->ReadSpacing(element); object->ReadSystems(element); @@ -4263,20 +4263,20 @@ bool MEIInput::ReadScoreDef(Object *parent, pugi::xml_node scoreDef) vrvScoreDef = new ScoreDef(); parent->AddChild(vrvScoreDef); } - ReadScoreDefElement(scoreDef, vrvScoreDef); + this->ReadScoreDefElement(scoreDef, vrvScoreDef); if (m_version < MEI_4_0_0) { UpgradeScoreDefElementTo_4_0_0(scoreDef, vrvScoreDef); } - ReadScoreDefInterface(scoreDef, vrvScoreDef); + this->ReadScoreDefInterface(scoreDef, vrvScoreDef); vrvScoreDef->ReadDistances(scoreDef); vrvScoreDef->ReadEndings(scoreDef); vrvScoreDef->ReadOptimization(scoreDef); vrvScoreDef->ReadTimeBase(scoreDef); - ReadUnsupportedAttr(scoreDef, vrvScoreDef); - return ReadScoreDefChildren(vrvScoreDef, scoreDef); + this->ReadUnsupportedAttr(scoreDef, vrvScoreDef); + return this->ReadScoreDefChildren(vrvScoreDef, scoreDef); } bool MEIInput::ReadScoreDefChildren(Object *parent, pugi::xml_node parentNode) @@ -4288,48 +4288,48 @@ bool MEIInput::ReadScoreDefChildren(Object *parent, pugi::xml_node parentNode) for (current = parentNode.first_child(); current; current = current.next_sibling()) { if (!success) break; // editorial - else if (IsEditorialElementName(current.name())) { - success = ReadEditorialElement(parent, current, EDITORIAL_SCOREDEF); + else if (this->IsEditorialElementName(current.name())) { + success = this->ReadEditorialElement(parent, current, EDITORIAL_SCOREDEF); } // clef, keySig, etc. else if (std::string(current.name()) == "clef") { - success = ReadClef(parent, current); + success = this->ReadClef(parent, current); } else if (std::string(current.name()) == "grpSym") { - success = ReadGrpSym(parent, current); + success = this->ReadGrpSym(parent, current); } else if (std::string(current.name()) == "keySig") { - success = ReadKeySig(parent, current); + success = this->ReadKeySig(parent, current); } else if (std::string(current.name()) == "mensur") { - success = ReadMensur(parent, current); + success = this->ReadMensur(parent, current); } else if (std::string(current.name()) == "meterSig") { - success = ReadMeterSig(parent, current); + success = this->ReadMeterSig(parent, current); } else if (std::string(current.name()) == "meterSigGrp") { - success = ReadMeterSigGrp(parent, current); + success = this->ReadMeterSigGrp(parent, current); } // headers and footers else if (std::string(current.name()) == "pgFoot") { - success = ReadPgFoot(parent, current); + success = this->ReadPgFoot(parent, current); } else if (std::string(current.name()) == "pgFoot2") { - success = ReadPgFoot2(parent, current); + success = this->ReadPgFoot2(parent, current); } else if (std::string(current.name()) == "pgHead") { - success = ReadPgHead(parent, current); + success = this->ReadPgHead(parent, current); } else if (std::string(current.name()) == "pgHead2") { - success = ReadPgHead2(parent, current); + success = this->ReadPgHead2(parent, current); } // content else if (std::string(current.name()) == "staffGrp") { - success = ReadStaffGrp(parent, current); + success = this->ReadStaffGrp(parent, current); } // xml comment else if (std::string(current.name()) == "") { - success = ReadXMLComment(parent, current); + success = this->ReadXMLComment(parent, current); } else { LogWarning("Unsupported '<%s>' within ", current.name()); @@ -4343,7 +4343,7 @@ bool MEIInput::ReadStaffGrp(Object *parent, pugi::xml_node staffGrp) assert(dynamic_cast(parent) || dynamic_cast(parent)); StaffGrp *vrvStaffGrp = new StaffGrp(); - SetMeiUuid(staffGrp, vrvStaffGrp); + this->SetMeiUuid(staffGrp, vrvStaffGrp); if (m_version < MEI_4_0_0) { UpgradeStaffGrpTo_4_0_0(staffGrp, vrvStaffGrp); @@ -4364,8 +4364,8 @@ bool MEIInput::ReadStaffGrp(Object *parent, pugi::xml_node staffGrp) vrvStaffGrp->ReadTyped(staffGrp); parent->AddChild(vrvStaffGrp); - ReadUnsupportedAttr(staffGrp, vrvStaffGrp); - return ReadStaffGrpChildren(vrvStaffGrp, staffGrp); + this->ReadUnsupportedAttr(staffGrp, vrvStaffGrp); + return this->ReadStaffGrpChildren(vrvStaffGrp, staffGrp); } bool MEIInput::ReadStaffGrpChildren(Object *parent, pugi::xml_node parentNode) @@ -4378,33 +4378,33 @@ bool MEIInput::ReadStaffGrpChildren(Object *parent, pugi::xml_node parentNode) for (current = parentNode.first_child(); current; current = current.next_sibling()) { if (!success) break; // editorial - else if (IsEditorialElementName(current.name())) { - success = ReadEditorialElement(parent, current, EDITORIAL_STAFFGRP); + else if (this->IsEditorialElementName(current.name())) { + success = this->ReadEditorialElement(parent, current, EDITORIAL_STAFFGRP); } // content else if (std::string(current.name()) == "grpSym") { - success = ReadGrpSym(parent, current); + success = this->ReadGrpSym(parent, current); } else if (std::string(current.name()) == "instrDef") { - success = ReadInstrDef(parent, current); + success = this->ReadInstrDef(parent, current); } else if (std::string(current.name()) == "label") { - success = ReadLabel(parent, current); + success = this->ReadLabel(parent, current); } else if (std::string(current.name()) == "labelAbbr") { - success = ReadLabelAbbr(parent, current); + success = this->ReadLabelAbbr(parent, current); } else if (std::string(current.name()) == "staffGrp") { - success = ReadStaffGrp(parent, current); + success = this->ReadStaffGrp(parent, current); missingStaffDef = false; // innermost staffGrp child will report missing staffDef } else if (std::string(current.name()) == "staffDef") { - success = ReadStaffDef(parent, current); + success = this->ReadStaffDef(parent, current); missingStaffDef = false; } // xml comment else if (std::string(current.name()) == "") { - success = ReadXMLComment(parent, current); + success = this->ReadXMLComment(parent, current); } else { LogWarning("Unsupported '<%s>' within ", current.name()); @@ -4422,7 +4422,7 @@ bool MEIInput::ReadStaffGrpChildren(Object *parent, pugi::xml_node parentNode) bool MEIInput::ReadRunningElement(pugi::xml_node element, RunningElement *object) { - SetMeiUuid(element, object); + this->SetMeiUuid(element, object); object->ReadHorizontalAlign(element); object->ReadTyped(element); @@ -4432,7 +4432,7 @@ bool MEIInput::ReadRunningElement(pugi::xml_node element, RunningElement *object bool MEIInput::ReadGrpSym(Object *parent, pugi::xml_node grpSym) { GrpSym *vrvGrpSym = new GrpSym(); - SetMeiUuid(grpSym, vrvGrpSym); + this->SetMeiUuid(grpSym, vrvGrpSym); vrvGrpSym->ReadColor(grpSym); vrvGrpSym->ReadGrpSymLog(grpSym); @@ -4449,48 +4449,48 @@ bool MEIInput::ReadGrpSym(Object *parent, pugi::xml_node grpSym) } parent->AddChild(vrvGrpSym); - ReadUnsupportedAttr(grpSym, vrvGrpSym); + this->ReadUnsupportedAttr(grpSym, vrvGrpSym); return true; } bool MEIInput::ReadPgFoot(Object *parent, pugi::xml_node pgFoot) { PgFoot *vrvPgFoot = new PgFoot(); - ReadRunningElement(pgFoot, vrvPgFoot); + this->ReadRunningElement(pgFoot, vrvPgFoot); parent->AddChild(vrvPgFoot); - ReadUnsupportedAttr(pgFoot, vrvPgFoot); - return ReadRunningChildren(vrvPgFoot, pgFoot, vrvPgFoot); + this->ReadUnsupportedAttr(pgFoot, vrvPgFoot); + return this->ReadRunningChildren(vrvPgFoot, pgFoot, vrvPgFoot); } bool MEIInput::ReadPgFoot2(Object *parent, pugi::xml_node pgFoot2) { PgFoot2 *vrvPgFoot2 = new PgFoot2(); - ReadRunningElement(pgFoot2, vrvPgFoot2); + this->ReadRunningElement(pgFoot2, vrvPgFoot2); parent->AddChild(vrvPgFoot2); - ReadUnsupportedAttr(pgFoot2, vrvPgFoot2); - return ReadRunningChildren(vrvPgFoot2, pgFoot2, vrvPgFoot2); + this->ReadUnsupportedAttr(pgFoot2, vrvPgFoot2); + return this->ReadRunningChildren(vrvPgFoot2, pgFoot2, vrvPgFoot2); } bool MEIInput::ReadPgHead(Object *parent, pugi::xml_node pgHead) { PgHead *vrvPgHead = new PgHead(); - ReadRunningElement(pgHead, vrvPgHead); + this->ReadRunningElement(pgHead, vrvPgHead); parent->AddChild(vrvPgHead); - ReadUnsupportedAttr(pgHead, vrvPgHead); - return ReadRunningChildren(vrvPgHead, pgHead, vrvPgHead); + this->ReadUnsupportedAttr(pgHead, vrvPgHead); + return this->ReadRunningChildren(vrvPgHead, pgHead, vrvPgHead); } bool MEIInput::ReadPgHead2(Object *parent, pugi::xml_node pgHead2) { PgHead2 *vrvPgHead2 = new PgHead2(); - ReadRunningElement(pgHead2, vrvPgHead2); + this->ReadRunningElement(pgHead2, vrvPgHead2); parent->AddChild(vrvPgHead2); - ReadUnsupportedAttr(pgHead2, vrvPgHead2); - return ReadRunningChildren(vrvPgHead2, pgHead2, vrvPgHead2); + this->ReadUnsupportedAttr(pgHead2, vrvPgHead2); + return this->ReadRunningChildren(vrvPgHead2, pgHead2, vrvPgHead2); } bool MEIInput::ReadRunningChildren(Object *parent, pugi::xml_node parentNode, Object *filter) @@ -4504,7 +4504,7 @@ bool MEIInput::ReadRunningChildren(Object *parent, pugi::xml_node parentNode, Ob break; } elementName = std::string(xmlElement.name()); - if (filter && !IsAllowed(elementName, filter)) { + if (filter && !this->IsAllowed(elementName, filter)) { std::string meiElementName = filter->GetClassName(); std::transform(meiElementName.begin(), meiElementName.begin() + 1, meiElementName.begin(), ::tolower); LogWarning("Element <%s> within <%s> is not supported and will be ignored ", xmlElement.name(), @@ -4512,19 +4512,19 @@ bool MEIInput::ReadRunningChildren(Object *parent, pugi::xml_node parentNode, Ob continue; } // editorial - if (IsEditorialElementName(xmlElement.name())) { - success = ReadEditorialElement(parent, xmlElement, EDITORIAL_RUNNING, filter); + if (this->IsEditorialElementName(xmlElement.name())) { + success = this->ReadEditorialElement(parent, xmlElement, EDITORIAL_RUNNING, filter); } // content else if (elementName == "fig") { - success = ReadFig(parent, xmlElement); + success = this->ReadFig(parent, xmlElement); } else if (elementName == "rend") { - success = ReadRend(parent, xmlElement); + success = this->ReadRend(parent, xmlElement); } // xml comment else if (elementName == "") { - success = ReadXMLComment(parent, xmlElement); + success = this->ReadXMLComment(parent, xmlElement); } // unknown else { @@ -4540,7 +4540,7 @@ bool MEIInput::ReadStaffDef(Object *parent, pugi::xml_node staffDef) assert(dynamic_cast(parent) || dynamic_cast(parent)); StaffDef *vrvStaffDef = new StaffDef(); - ReadScoreDefElement(staffDef, vrvStaffDef); + this->ReadScoreDefElement(staffDef, vrvStaffDef); if (m_version < MEI_4_0_0) { UpgradeScoreDefElementTo_4_0_0(staffDef, vrvStaffDef); @@ -4561,13 +4561,13 @@ bool MEIInput::ReadStaffDef(Object *parent, pugi::xml_node staffDef) LogWarning("No @n on might yield unpredictable results"); } - ReadScoreDefInterface(staffDef, vrvStaffDef); + this->ReadScoreDefInterface(staffDef, vrvStaffDef); m_doc->m_notationType = vrvStaffDef->GetNotationtype(); parent->AddChild(vrvStaffDef); - ReadUnsupportedAttr(staffDef, vrvStaffDef); - return ReadStaffDefChildren(vrvStaffDef, staffDef); + this->ReadUnsupportedAttr(staffDef, vrvStaffDef); + return this->ReadStaffDefChildren(vrvStaffDef, staffDef); } bool MEIInput::ReadStaffDefChildren(Object *parent, pugi::xml_node parentNode) @@ -4580,36 +4580,36 @@ bool MEIInput::ReadStaffDefChildren(Object *parent, pugi::xml_node parentNode) if (!success) break; // clef, keySig, etc. else if (std::string(current.name()) == "clef") { - success = ReadClef(parent, current); + success = this->ReadClef(parent, current); } else if (std::string(current.name()) == "keySig") { - success = ReadKeySig(parent, current); + success = this->ReadKeySig(parent, current); } else if (std::string(current.name()) == "mensur") { - success = ReadMensur(parent, current); + success = this->ReadMensur(parent, current); } else if (std::string(current.name()) == "meterSig") { - success = ReadMeterSig(parent, current); + success = this->ReadMeterSig(parent, current); } else if (std::string(current.name()) == "meterSigGrp") { - success = ReadMeterSigGrp(parent, current); + success = this->ReadMeterSigGrp(parent, current); } // content else if (std::string(current.name()) == "instrDef") { - success = ReadInstrDef(parent, current); + success = this->ReadInstrDef(parent, current); } else if (std::string(current.name()) == "label") { - success = ReadLabel(parent, current); + success = this->ReadLabel(parent, current); } else if (std::string(current.name()) == "labelAbbr") { - success = ReadLabelAbbr(parent, current); + success = this->ReadLabelAbbr(parent, current); } else if (std::string(current.name()) == "tuning") { - success = ReadTuning(parent, current); + success = this->ReadTuning(parent, current); } // xml comment else if (std::string(current.name()) == "") { - success = ReadXMLComment(parent, current); + success = this->ReadXMLComment(parent, current); } else { LogWarning("Unsupported '<%s>' within ", current.name()); @@ -4623,13 +4623,13 @@ bool MEIInput::ReadTuning(Object *parent, pugi::xml_node tuning) assert(dynamic_cast(parent) || dynamic_cast(parent)); Tuning *vrvTuning = new Tuning(); - SetMeiUuid(tuning, vrvTuning); + this->SetMeiUuid(tuning, vrvTuning); parent->AddChild(vrvTuning); vrvTuning->ReadCourseLog(tuning); - ReadUnsupportedAttr(tuning, vrvTuning); - return ReadTuningChildren(vrvTuning, tuning); + this->ReadUnsupportedAttr(tuning, vrvTuning); + return this->ReadTuningChildren(vrvTuning, tuning); } bool MEIInput::ReadTuningChildren(Object *parent, pugi::xml_node parentNode) @@ -4642,7 +4642,7 @@ bool MEIInput::ReadTuningChildren(Object *parent, pugi::xml_node parentNode) if (!success) break; // content else if (std::string(current.name()) == "course") { - success = ReadCourse(parent, current); + success = this->ReadCourse(parent, current); } else { LogWarning("Unsupported '<%s>' within ", current.name()); @@ -4656,7 +4656,7 @@ bool MEIInput::ReadCourse(Object *parent, pugi::xml_node course) assert(dynamic_cast(parent) || dynamic_cast(parent)); Course *vrvCourse = new Course(); - SetMeiUuid(course, vrvCourse); + this->SetMeiUuid(course, vrvCourse); parent->AddChild(vrvCourse); vrvCourse->ReadAccidental(course); @@ -4664,7 +4664,7 @@ bool MEIInput::ReadCourse(Object *parent, pugi::xml_node course) vrvCourse->ReadOctave(course); vrvCourse->ReadPitch(course); - ReadUnsupportedAttr(course, vrvCourse); + this->ReadUnsupportedAttr(course, vrvCourse); return true; } @@ -4672,7 +4672,7 @@ bool MEIInput::ReadCourse(Object *parent, pugi::xml_node course) bool MEIInput::ReadInstrDef(Object *parent, pugi::xml_node instrDef) { InstrDef *vrvInstrDef = new InstrDef(); - SetMeiUuid(instrDef, vrvInstrDef); + this->SetMeiUuid(instrDef, vrvInstrDef); if (m_version < MEI_4_0_0) { if (instrDef.attribute("midi.volume")) { @@ -4693,21 +4693,21 @@ bool MEIInput::ReadInstrDef(Object *parent, pugi::xml_node instrDef) bool MEIInput::ReadLabel(Object *parent, pugi::xml_node label) { Label *vrvLabel = new Label(); - SetMeiUuid(label, vrvLabel); + this->SetMeiUuid(label, vrvLabel); parent->AddChild(vrvLabel); - ReadUnsupportedAttr(label, vrvLabel); - return ReadTextChildren(vrvLabel, label, vrvLabel); + this->ReadUnsupportedAttr(label, vrvLabel); + return this->ReadTextChildren(vrvLabel, label, vrvLabel); } bool MEIInput::ReadLabelAbbr(Object *parent, pugi::xml_node labelAbbr) { LabelAbbr *vrvLabelAbbr = new LabelAbbr(); - SetMeiUuid(labelAbbr, vrvLabelAbbr); + this->SetMeiUuid(labelAbbr, vrvLabelAbbr); parent->AddChild(vrvLabelAbbr); - ReadUnsupportedAttr(labelAbbr, vrvLabelAbbr); - return ReadTextChildren(vrvLabelAbbr, labelAbbr, vrvLabelAbbr); + this->ReadUnsupportedAttr(labelAbbr, vrvLabelAbbr); + return this->ReadTextChildren(vrvLabelAbbr, labelAbbr, vrvLabelAbbr); } bool MEIInput::ReadMeasure(Object *parent, pugi::xml_node measure) @@ -4717,7 +4717,7 @@ bool MEIInput::ReadMeasure(Object *parent, pugi::xml_node measure) LogWarning("Mixing mensural and non mensural music is not supported. Trying to go ahead..."); m_doc->SetMensuralMusicOnly(false); } - SetMeiUuid(measure, vrvMeasure); + this->SetMeiUuid(measure, vrvMeasure); vrvMeasure->ReadBarring(measure); vrvMeasure->ReadMeasureLog(measure); @@ -4738,8 +4738,8 @@ bool MEIInput::ReadMeasure(Object *parent, pugi::xml_node measure) } parent->AddChild(vrvMeasure); - ReadUnsupportedAttr(measure, vrvMeasure); - return ReadMeasureChildren(vrvMeasure, measure); + this->ReadUnsupportedAttr(measure, vrvMeasure); + return this->ReadMeasureChildren(vrvMeasure, measure); } bool MEIInput::ReadMeasureChildren(Object *parent, pugi::xml_node parentNode) @@ -4751,15 +4751,15 @@ bool MEIInput::ReadMeasureChildren(Object *parent, pugi::xml_node parentNode) for (current = parentNode.first_child(); current; current = current.next_sibling()) { if (!success) break; // editorial - else if (IsEditorialElementName(current.name())) { - success = ReadEditorialElement(parent, current, EDITORIAL_MEASURE); + else if (this->IsEditorialElementName(current.name())) { + success = this->ReadEditorialElement(parent, current, EDITORIAL_MEASURE); } // content else if (std::string(current.name()) == "anchoredText") { - success = ReadAnchoredText(parent, current); + success = this->ReadAnchoredText(parent, current); } else if (std::string(current.name()) == "arpeg") { - success = ReadArpeg(parent, current); + success = this->ReadArpeg(parent, current); } else if (std::string(current.name()) == "beamSpan") { if (!ReadBeamSpanAsBeam(dynamic_cast(parent), current)) { @@ -4767,76 +4767,76 @@ bool MEIInput::ReadMeasureChildren(Object *parent, pugi::xml_node parentNode) } } else if (std::string(current.name()) == "bracketSpan") { - success = ReadBracketSpan(parent, current); + success = this->ReadBracketSpan(parent, current); } else if (std::string(current.name()) == "breath") { - success = ReadBreath(parent, current); + success = this->ReadBreath(parent, current); } else if (std::string(current.name()) == "caesura") { - success = ReadCaesura(parent, current); + success = this->ReadCaesura(parent, current); } else if (std::string(current.name()) == "dir") { - success = ReadDir(parent, current); + success = this->ReadDir(parent, current); } else if (std::string(current.name()) == "dynam") { - success = ReadDynam(parent, current); + success = this->ReadDynam(parent, current); } else if (std::string(current.name()) == "fermata") { - success = ReadFermata(parent, current); + success = this->ReadFermata(parent, current); } else if (std::string(current.name()) == "fing") { - success = ReadFing(parent, current); + success = this->ReadFing(parent, current); } else if (std::string(current.name()) == "gliss") { - success = ReadGliss(parent, current); + success = this->ReadGliss(parent, current); } else if (std::string(current.name()) == "hairpin") { - success = ReadHairpin(parent, current); + success = this->ReadHairpin(parent, current); } else if (std::string(current.name()) == "harm") { - success = ReadHarm(parent, current); + success = this->ReadHarm(parent, current); } else if (std::string(current.name()) == "lv") { - success = ReadLv(parent, current); + success = this->ReadLv(parent, current); } else if (std::string(current.name()) == "mNum") { - success = ReadMNum(parent, current); + success = this->ReadMNum(parent, current); } else if (std::string(current.name()) == "mordent") { - success = ReadMordent(parent, current); + success = this->ReadMordent(parent, current); } else if (std::string(current.name()) == "octave") { - success = ReadOctave(parent, current); + success = this->ReadOctave(parent, current); } else if (std::string(current.name()) == "pedal") { - success = ReadPedal(parent, current); + success = this->ReadPedal(parent, current); } else if (std::string(current.name()) == "phrase") { - success = ReadPhrase(parent, current); + success = this->ReadPhrase(parent, current); } else if (std::string(current.name()) == "pitchInflection") { - success = ReadPitchInflection(parent, current); + success = this->ReadPitchInflection(parent, current); } else if (std::string(current.name()) == "reh") { - success = ReadReh(parent, current); + success = this->ReadReh(parent, current); } else if (std::string(current.name()) == "slur") { - success = ReadSlur(parent, current); + success = this->ReadSlur(parent, current); } else if (std::string(current.name()) == "staff") { - success = ReadStaff(parent, current); + success = this->ReadStaff(parent, current); } else if (std::string(current.name()) == "tempo") { - success = ReadTempo(parent, current); + success = this->ReadTempo(parent, current); } else if (std::string(current.name()) == "tie") { - success = ReadTie(parent, current); + success = this->ReadTie(parent, current); } else if (std::string(current.name()) == "trill") { - success = ReadTrill(parent, current); + success = this->ReadTrill(parent, current); } else if (std::string(current.name()) == "turn") { - success = ReadTurn(parent, current); + success = this->ReadTurn(parent, current); } else if (std::string(current.name()) == "tupletSpan") { if (!ReadTupletSpanAsTuplet(dynamic_cast(parent), current)) { @@ -4845,7 +4845,7 @@ bool MEIInput::ReadMeasureChildren(Object *parent, pugi::xml_node parentNode) } // xml comment else if (std::string(current.name()) == "") { - success = ReadXMLComment(parent, current); + success = this->ReadXMLComment(parent, current); } else { LogWarning("Unsupported '<%s>' within ", current.name()); @@ -4859,16 +4859,16 @@ bool MEIInput::ReadMeterSigGrp(Object *parent, pugi::xml_node meterSigGrp) assert(dynamic_cast(parent) || dynamic_cast(parent) || dynamic_cast(parent)); MeterSigGrp *vrvMeterSigGrp = new MeterSigGrp(); - SetMeiUuid(meterSigGrp, vrvMeterSigGrp); - ReadLinkingInterface(meterSigGrp, vrvMeterSigGrp); + this->SetMeiUuid(meterSigGrp, vrvMeterSigGrp); + this->ReadLinkingInterface(meterSigGrp, vrvMeterSigGrp); vrvMeterSigGrp->ReadBasic(meterSigGrp); vrvMeterSigGrp->ReadLabelled(meterSigGrp); vrvMeterSigGrp->ReadMeterSigGrpLog(meterSigGrp); vrvMeterSigGrp->ReadTyped(meterSigGrp); parent->AddChild(vrvMeterSigGrp); - ReadUnsupportedAttr(meterSigGrp, vrvMeterSigGrp); - return ReadMeterSigGrpChildren(vrvMeterSigGrp, meterSigGrp); + this->ReadUnsupportedAttr(meterSigGrp, vrvMeterSigGrp); + return this->ReadMeterSigGrpChildren(vrvMeterSigGrp, meterSigGrp); } bool MEIInput::ReadMeterSigGrpChildren(Object *parent, pugi::xml_node parentNode) @@ -4881,11 +4881,11 @@ bool MEIInput::ReadMeterSigGrpChildren(Object *parent, pugi::xml_node parentNode if (!success) break; // content else if (std::string(current.name()) == "meterSig") { - success = ReadMeterSig(parent, current); + success = this->ReadMeterSig(parent, current); } // xml comment else if (std::string(current.name()) == "") { - success = ReadXMLComment(parent, current); + success = this->ReadXMLComment(parent, current); } else { LogWarning("Unsupported '<%s>' within ", current.name()); @@ -4896,8 +4896,8 @@ bool MEIInput::ReadMeterSigGrpChildren(Object *parent, pugi::xml_node parentNode bool MEIInput::ReadControlElement(pugi::xml_node element, ControlElement *object) { - SetMeiUuid(element, object); - ReadLinkingInterface(element, object); + this->SetMeiUuid(element, object); + this->ReadLinkingInterface(element, object); object->ReadLabelled(element); object->ReadTyped(element); @@ -4907,100 +4907,100 @@ bool MEIInput::ReadControlElement(pugi::xml_node element, ControlElement *object bool MEIInput::ReadAnchoredText(Object *parent, pugi::xml_node anchoredText) { AnchoredText *vrvAnchoredText = new AnchoredText(); - ReadControlElement(anchoredText, vrvAnchoredText); + this->ReadControlElement(anchoredText, vrvAnchoredText); - ReadTextDirInterface(anchoredText, vrvAnchoredText); + this->ReadTextDirInterface(anchoredText, vrvAnchoredText); - ReadUnsupportedAttr(anchoredText, vrvAnchoredText); + this->ReadUnsupportedAttr(anchoredText, vrvAnchoredText); parent->AddChild(vrvAnchoredText); - return ReadTextChildren(vrvAnchoredText, anchoredText, vrvAnchoredText); + return this->ReadTextChildren(vrvAnchoredText, anchoredText, vrvAnchoredText); } bool MEIInput::ReadArpeg(Object *parent, pugi::xml_node arpeg) { Arpeg *vrvArpeg = new Arpeg(); - ReadControlElement(arpeg, vrvArpeg); + this->ReadControlElement(arpeg, vrvArpeg); - ReadPlistInterface(arpeg, vrvArpeg); - ReadTimePointInterface(arpeg, vrvArpeg); + this->ReadPlistInterface(arpeg, vrvArpeg); + this->ReadTimePointInterface(arpeg, vrvArpeg); vrvArpeg->ReadArpegLog(arpeg); vrvArpeg->ReadArpegVis(arpeg); vrvArpeg->ReadColor(arpeg); vrvArpeg->ReadEnclosingChars(arpeg); parent->AddChild(vrvArpeg); - ReadUnsupportedAttr(arpeg, vrvArpeg); + this->ReadUnsupportedAttr(arpeg, vrvArpeg); return true; } bool MEIInput::ReadBracketSpan(Object *parent, pugi::xml_node bracketSpan) { BracketSpan *vrvBracketSpan = new BracketSpan(); - ReadControlElement(bracketSpan, vrvBracketSpan); + this->ReadControlElement(bracketSpan, vrvBracketSpan); - ReadTimeSpanningInterface(bracketSpan, vrvBracketSpan); + this->ReadTimeSpanningInterface(bracketSpan, vrvBracketSpan); vrvBracketSpan->ReadBracketSpanLog(bracketSpan); vrvBracketSpan->ReadColor(bracketSpan); vrvBracketSpan->ReadLineRend(bracketSpan); vrvBracketSpan->ReadLineRendBase(bracketSpan); parent->AddChild(vrvBracketSpan); - ReadUnsupportedAttr(bracketSpan, vrvBracketSpan); + this->ReadUnsupportedAttr(bracketSpan, vrvBracketSpan); return true; } bool MEIInput::ReadBreath(Object *parent, pugi::xml_node breath) { Breath *vrvBreath = new Breath(); - ReadControlElement(breath, vrvBreath); + this->ReadControlElement(breath, vrvBreath); - ReadTimePointInterface(breath, vrvBreath); + this->ReadTimePointInterface(breath, vrvBreath); vrvBreath->ReadColor(breath); vrvBreath->ReadPlacementRelStaff(breath); parent->AddChild(vrvBreath); - ReadUnsupportedAttr(breath, vrvBreath); + this->ReadUnsupportedAttr(breath, vrvBreath); return true; } bool MEIInput::ReadCaesura(Object *parent, pugi::xml_node caesura) { Caesura *vrvCaesura = new Caesura(); - ReadControlElement(caesura, vrvCaesura); + this->ReadControlElement(caesura, vrvCaesura); - ReadTimePointInterface(caesura, vrvCaesura); + this->ReadTimePointInterface(caesura, vrvCaesura); vrvCaesura->ReadColor(caesura); vrvCaesura->ReadPlacementRelStaff(caesura); parent->AddChild(vrvCaesura); - ReadUnsupportedAttr(caesura, vrvCaesura); + this->ReadUnsupportedAttr(caesura, vrvCaesura); return true; } bool MEIInput::ReadDir(Object *parent, pugi::xml_node dir) { Dir *vrvDir = new Dir(); - ReadControlElement(dir, vrvDir); + this->ReadControlElement(dir, vrvDir); - ReadTextDirInterface(dir, vrvDir); - ReadTimeSpanningInterface(dir, vrvDir); + this->ReadTextDirInterface(dir, vrvDir); + this->ReadTimeSpanningInterface(dir, vrvDir); vrvDir->ReadLang(dir); vrvDir->ReadLineRendBase(dir); vrvDir->ReadExtender(dir); vrvDir->ReadVerticalGroup(dir); parent->AddChild(vrvDir); - ReadUnsupportedAttr(dir, vrvDir); - return ReadTextChildren(vrvDir, dir, vrvDir); + this->ReadUnsupportedAttr(dir, vrvDir); + return this->ReadTextChildren(vrvDir, dir, vrvDir); } bool MEIInput::ReadDynam(Object *parent, pugi::xml_node dynam) { Dynam *vrvDynam = new Dynam(); - ReadControlElement(dynam, vrvDynam); + this->ReadControlElement(dynam, vrvDynam); - ReadTextDirInterface(dynam, vrvDynam); - ReadTimeSpanningInterface(dynam, vrvDynam); + this->ReadTextDirInterface(dynam, vrvDynam); + this->ReadTimeSpanningInterface(dynam, vrvDynam); vrvDynam->ReadEnclosingChars(dynam); vrvDynam->ReadExtender(dynam); vrvDynam->ReadLineRendBase(dynam); @@ -5009,16 +5009,16 @@ bool MEIInput::ReadDynam(Object *parent, pugi::xml_node dynam) vrvDynam->ReadVerticalGroup(dynam); parent->AddChild(vrvDynam); - ReadUnsupportedAttr(dynam, vrvDynam); - return ReadTextChildren(vrvDynam, dynam, vrvDynam); + this->ReadUnsupportedAttr(dynam, vrvDynam); + return this->ReadTextChildren(vrvDynam, dynam, vrvDynam); } bool MEIInput::ReadFermata(Object *parent, pugi::xml_node fermata) { Fermata *vrvFermata = new Fermata(); - ReadControlElement(fermata, vrvFermata); + this->ReadControlElement(fermata, vrvFermata); - ReadTimePointInterface(fermata, vrvFermata); + this->ReadTimePointInterface(fermata, vrvFermata); vrvFermata->ReadColor(fermata); vrvFermata->ReadEnclosingChars(fermata); vrvFermata->ReadExtSym(fermata); @@ -5026,46 +5026,46 @@ bool MEIInput::ReadFermata(Object *parent, pugi::xml_node fermata) vrvFermata->ReadPlacementRelStaff(fermata); parent->AddChild(vrvFermata); - ReadUnsupportedAttr(fermata, vrvFermata); + this->ReadUnsupportedAttr(fermata, vrvFermata); return true; } bool MEIInput::ReadFing(Object *parent, pugi::xml_node fing) { Fing *vrvFing = new Fing(); - ReadControlElement(fing, vrvFing); + this->ReadControlElement(fing, vrvFing); - ReadTextDirInterface(fing, vrvFing); - ReadTimePointInterface(fing, vrvFing); + this->ReadTextDirInterface(fing, vrvFing); + this->ReadTimePointInterface(fing, vrvFing); vrvFing->ReadNNumberLike(fing); parent->AddChild(vrvFing); - ReadUnsupportedAttr(fing, vrvFing); - return ReadTextChildren(vrvFing, fing, vrvFing); + this->ReadUnsupportedAttr(fing, vrvFing); + return this->ReadTextChildren(vrvFing, fing, vrvFing); } bool MEIInput::ReadGliss(Object *parent, pugi::xml_node gliss) { Gliss *vrvGliss = new Gliss(); - ReadControlElement(gliss, vrvGliss); + this->ReadControlElement(gliss, vrvGliss); - ReadTimeSpanningInterface(gliss, vrvGliss); + this->ReadTimeSpanningInterface(gliss, vrvGliss); vrvGliss->ReadColor(gliss); vrvGliss->ReadLineRend(gliss); vrvGliss->ReadLineRendBase(gliss); vrvGliss->ReadNNumberLike(gliss); parent->AddChild(vrvGliss); - ReadUnsupportedAttr(gliss, vrvGliss); + this->ReadUnsupportedAttr(gliss, vrvGliss); return true; } bool MEIInput::ReadHairpin(Object *parent, pugi::xml_node hairpin) { Hairpin *vrvHairpin = new Hairpin(); - ReadControlElement(hairpin, vrvHairpin); + this->ReadControlElement(hairpin, vrvHairpin); - ReadTimeSpanningInterface(hairpin, vrvHairpin); + this->ReadTimeSpanningInterface(hairpin, vrvHairpin); vrvHairpin->ReadColor(hairpin); vrvHairpin->ReadHairpinLog(hairpin); vrvHairpin->ReadHairpinVis(hairpin); @@ -5073,65 +5073,65 @@ bool MEIInput::ReadHairpin(Object *parent, pugi::xml_node hairpin) vrvHairpin->ReadVerticalGroup(hairpin); parent->AddChild(vrvHairpin); - ReadUnsupportedAttr(hairpin, vrvHairpin); + this->ReadUnsupportedAttr(hairpin, vrvHairpin); return true; } bool MEIInput::ReadHarm(Object *parent, pugi::xml_node harm) { Harm *vrvHarm = new Harm(); - ReadControlElement(harm, vrvHarm); + this->ReadControlElement(harm, vrvHarm); - ReadTextDirInterface(harm, vrvHarm); - ReadTimeSpanningInterface(harm, vrvHarm); + this->ReadTextDirInterface(harm, vrvHarm); + this->ReadTimeSpanningInterface(harm, vrvHarm); vrvHarm->ReadLang(harm); vrvHarm->ReadNNumberLike(harm); parent->AddChild(vrvHarm); - ReadUnsupportedAttr(harm, vrvHarm); - return ReadTextChildren(vrvHarm, harm, vrvHarm); + this->ReadUnsupportedAttr(harm, vrvHarm); + return this->ReadTextChildren(vrvHarm, harm, vrvHarm); } bool MEIInput::ReadLv(Object *parent, pugi::xml_node lv) { Lv *vrvLv = new Lv(); - ReadControlElement(lv, vrvLv); + this->ReadControlElement(lv, vrvLv); - ReadTimeSpanningInterface(lv, vrvLv); + this->ReadTimeSpanningInterface(lv, vrvLv); vrvLv->ReadColor(lv); vrvLv->ReadCurvature(lv); vrvLv->ReadCurveRend(lv); parent->AddChild(vrvLv); - ReadUnsupportedAttr(lv, vrvLv); + this->ReadUnsupportedAttr(lv, vrvLv); return true; } bool MEIInput::ReadMNum(Object *parent, pugi::xml_node mNum) { MNum *vrvMNum = new MNum(); - ReadControlElement(mNum, vrvMNum); + this->ReadControlElement(mNum, vrvMNum); - ReadTextDirInterface(mNum, vrvMNum); - ReadTimePointInterface(mNum, vrvMNum); + this->ReadTextDirInterface(mNum, vrvMNum); + this->ReadTimePointInterface(mNum, vrvMNum); vrvMNum->ReadColor(mNum); vrvMNum->ReadLang(mNum); vrvMNum->ReadTypography(mNum); parent->AddChild(vrvMNum); - return ReadTextChildren(vrvMNum, mNum, vrvMNum); + return this->ReadTextChildren(vrvMNum, mNum, vrvMNum); } bool MEIInput::ReadMordent(Object *parent, pugi::xml_node mordent) { Mordent *vrvMordent = new Mordent(); - ReadControlElement(mordent, vrvMordent); + this->ReadControlElement(mordent, vrvMordent); if (m_version < MEI_4_0_0) { UpgradeMordentTo_4_0_0(mordent, vrvMordent); } - ReadTimePointInterface(mordent, vrvMordent); + this->ReadTimePointInterface(mordent, vrvMordent); vrvMordent->ReadColor(mordent); vrvMordent->ReadExtSym(mordent); vrvMordent->ReadOrnamentAccid(mordent); @@ -5139,16 +5139,16 @@ bool MEIInput::ReadMordent(Object *parent, pugi::xml_node mordent) vrvMordent->ReadMordentLog(mordent); parent->AddChild(vrvMordent); - ReadUnsupportedAttr(mordent, vrvMordent); + this->ReadUnsupportedAttr(mordent, vrvMordent); return true; } bool MEIInput::ReadOctave(Object *parent, pugi::xml_node octave) { Octave *vrvOctave = new Octave(); - ReadControlElement(octave, vrvOctave); + this->ReadControlElement(octave, vrvOctave); - ReadTimeSpanningInterface(octave, vrvOctave); + this->ReadTimeSpanningInterface(octave, vrvOctave); vrvOctave->ReadColor(octave); vrvOctave->ReadExtender(octave); vrvOctave->ReadLineRend(octave); @@ -5157,16 +5157,16 @@ bool MEIInput::ReadOctave(Object *parent, pugi::xml_node octave) vrvOctave->ReadOctaveDisplacement(octave); parent->AddChild(vrvOctave); - ReadUnsupportedAttr(octave, vrvOctave); + this->ReadUnsupportedAttr(octave, vrvOctave); return true; } bool MEIInput::ReadPedal(Object *parent, pugi::xml_node pedal) { Pedal *vrvPedal = new Pedal(); - ReadControlElement(pedal, vrvPedal); + this->ReadControlElement(pedal, vrvPedal); - ReadTimeSpanningInterface(pedal, vrvPedal); + this->ReadTimeSpanningInterface(pedal, vrvPedal); vrvPedal->ReadColor(pedal); vrvPedal->ReadExtSym(pedal); vrvPedal->ReadPedalLog(pedal); @@ -5175,107 +5175,107 @@ bool MEIInput::ReadPedal(Object *parent, pugi::xml_node pedal) vrvPedal->ReadVerticalGroup(pedal); parent->AddChild(vrvPedal); - ReadUnsupportedAttr(pedal, vrvPedal); + this->ReadUnsupportedAttr(pedal, vrvPedal); return true; } bool MEIInput::ReadPhrase(Object *parent, pugi::xml_node phrase) { Phrase *vrvPhrase = new Phrase(); - ReadControlElement(phrase, vrvPhrase); + this->ReadControlElement(phrase, vrvPhrase); - ReadTimeSpanningInterface(phrase, vrvPhrase); + this->ReadTimeSpanningInterface(phrase, vrvPhrase); vrvPhrase->ReadColor(phrase); vrvPhrase->ReadCurvature(phrase); vrvPhrase->ReadCurveRend(phrase); vrvPhrase->ReadLayerIdent(phrase); parent->AddChild(vrvPhrase); - ReadUnsupportedAttr(phrase, vrvPhrase); + this->ReadUnsupportedAttr(phrase, vrvPhrase); return true; } bool MEIInput::ReadPitchInflection(Object *parent, pugi::xml_node pitchInflection) { PitchInflection *vrvPitchInflection = new PitchInflection(); - ReadControlElement(pitchInflection, vrvPitchInflection); + this->ReadControlElement(pitchInflection, vrvPitchInflection); - ReadTimeSpanningInterface(pitchInflection, vrvPitchInflection); + this->ReadTimeSpanningInterface(pitchInflection, vrvPitchInflection); parent->AddChild(vrvPitchInflection); - ReadUnsupportedAttr(pitchInflection, vrvPitchInflection); + this->ReadUnsupportedAttr(pitchInflection, vrvPitchInflection); return true; } bool MEIInput::ReadReh(Object *parent, pugi::xml_node reh) { Reh *vrvReh = new Reh(); - ReadControlElement(reh, vrvReh); + this->ReadControlElement(reh, vrvReh); - ReadTextDirInterface(reh, vrvReh); - ReadTimePointInterface(reh, vrvReh); + this->ReadTextDirInterface(reh, vrvReh); + this->ReadTimePointInterface(reh, vrvReh); vrvReh->ReadColor(reh); vrvReh->ReadLang(reh); vrvReh->ReadVerticalGroup(reh); parent->AddChild(vrvReh); - ReadUnsupportedAttr(reh, vrvReh); - return ReadTextChildren(vrvReh, reh, vrvReh); + this->ReadUnsupportedAttr(reh, vrvReh); + return this->ReadTextChildren(vrvReh, reh, vrvReh); } bool MEIInput::ReadSlur(Object *parent, pugi::xml_node slur) { Slur *vrvSlur = new Slur(); - ReadControlElement(slur, vrvSlur); + this->ReadControlElement(slur, vrvSlur); - ReadTimeSpanningInterface(slur, vrvSlur); + this->ReadTimeSpanningInterface(slur, vrvSlur); vrvSlur->ReadColor(slur); vrvSlur->ReadCurvature(slur); vrvSlur->ReadCurveRend(slur); vrvSlur->ReadLayerIdent(slur); parent->AddChild(vrvSlur); - ReadUnsupportedAttr(slur, vrvSlur); + this->ReadUnsupportedAttr(slur, vrvSlur); return true; } bool MEIInput::ReadTempo(Object *parent, pugi::xml_node tempo) { Tempo *vrvTempo = new Tempo(); - ReadControlElement(tempo, vrvTempo); + this->ReadControlElement(tempo, vrvTempo); - ReadTextDirInterface(tempo, vrvTempo); - ReadTimePointInterface(tempo, vrvTempo); + this->ReadTextDirInterface(tempo, vrvTempo); + this->ReadTimePointInterface(tempo, vrvTempo); vrvTempo->ReadLang(tempo); vrvTempo->ReadMidiTempo(tempo); vrvTempo->ReadMmTempo(tempo); parent->AddChild(vrvTempo); - ReadUnsupportedAttr(tempo, vrvTempo); - return ReadTextChildren(vrvTempo, tempo, vrvTempo); + this->ReadUnsupportedAttr(tempo, vrvTempo); + return this->ReadTextChildren(vrvTempo, tempo, vrvTempo); } bool MEIInput::ReadTie(Object *parent, pugi::xml_node tie) { Tie *vrvTie = new Tie(); - ReadControlElement(tie, vrvTie); + this->ReadControlElement(tie, vrvTie); - ReadTimeSpanningInterface(tie, vrvTie); + this->ReadTimeSpanningInterface(tie, vrvTie); vrvTie->ReadColor(tie); vrvTie->ReadCurvature(tie); vrvTie->ReadCurveRend(tie); parent->AddChild(vrvTie); - ReadUnsupportedAttr(tie, vrvTie); + this->ReadUnsupportedAttr(tie, vrvTie); return true; } bool MEIInput::ReadTrill(Object *parent, pugi::xml_node trill) { Trill *vrvTrill = new Trill(); - ReadControlElement(trill, vrvTrill); + this->ReadControlElement(trill, vrvTrill); - ReadTimeSpanningInterface(trill, vrvTrill); + this->ReadTimeSpanningInterface(trill, vrvTrill); vrvTrill->ReadColor(trill); vrvTrill->ReadExtender(trill); vrvTrill->ReadExtSym(trill); @@ -5285,20 +5285,20 @@ bool MEIInput::ReadTrill(Object *parent, pugi::xml_node trill) vrvTrill->ReadPlacementRelStaff(trill); parent->AddChild(vrvTrill); - ReadUnsupportedAttr(trill, vrvTrill); + this->ReadUnsupportedAttr(trill, vrvTrill); return true; } bool MEIInput::ReadTurn(Object *parent, pugi::xml_node turn) { Turn *vrvTurn = new Turn(); - ReadControlElement(turn, vrvTurn); + this->ReadControlElement(turn, vrvTurn); if (m_version < MEI_4_0_0) { UpgradeTurnTo_4_0_0(turn, vrvTurn); } - ReadTimePointInterface(turn, vrvTurn); + this->ReadTimePointInterface(turn, vrvTurn); vrvTurn->ReadColor(turn); vrvTurn->ReadExtSym(turn); vrvTurn->ReadOrnamentAccid(turn); @@ -5306,18 +5306,18 @@ bool MEIInput::ReadTurn(Object *parent, pugi::xml_node turn) vrvTurn->ReadTurnLog(turn); parent->AddChild(vrvTurn); - ReadUnsupportedAttr(turn, vrvTurn); + this->ReadUnsupportedAttr(turn, vrvTurn); return true; } bool MEIInput::ReadFb(Object *parent, pugi::xml_node fb) { Fb *vrvFb = new Fb(); - SetMeiUuid(fb, vrvFb); + this->SetMeiUuid(fb, vrvFb); parent->AddChild(vrvFb); - ReadUnsupportedAttr(fb, vrvFb); - return ReadFbChildren(vrvFb, fb); + this->ReadUnsupportedAttr(fb, vrvFb); + return this->ReadFbChildren(vrvFb, fb); } bool MEIInput::ReadFbChildren(Object *parent, pugi::xml_node parentNode) @@ -5329,16 +5329,16 @@ bool MEIInput::ReadFbChildren(Object *parent, pugi::xml_node parentNode) for (current = parentNode.first_child(); current; current = current.next_sibling()) { if (!success) break; // editorial - else if (IsEditorialElementName(current.name())) { - success = ReadEditorialElement(parent, current, EDITORIAL_FB); + else if (this->IsEditorialElementName(current.name())) { + success = this->ReadEditorialElement(parent, current, EDITORIAL_FB); } // content else if (std::string(current.name()) == "f") { - success = ReadF(parent, current); + success = this->ReadF(parent, current); } // xml comment else if (std::string(current.name()) == "") { - success = ReadXMLComment(parent, current); + success = this->ReadXMLComment(parent, current); } else { LogWarning("Unsupported '<%s>' within ", current.name()); @@ -5350,7 +5350,7 @@ bool MEIInput::ReadFbChildren(Object *parent, pugi::xml_node parentNode) bool MEIInput::ReadStaff(Object *parent, pugi::xml_node staff) { Staff *vrvStaff = new Staff(); - SetMeiUuid(staff, vrvStaff); + this->SetMeiUuid(staff, vrvStaff); vrvStaff->ReadFacsimile(staff); vrvStaff->ReadNInteger(staff); @@ -5371,8 +5371,8 @@ bool MEIInput::ReadStaff(Object *parent, pugi::xml_node staff) } parent->AddChild(vrvStaff); - ReadUnsupportedAttr(staff, vrvStaff); - return ReadStaffChildren(vrvStaff, staff); + this->ReadUnsupportedAttr(staff, vrvStaff); + return this->ReadStaffChildren(vrvStaff, staff); } bool MEIInput::ReadStaffChildren(Object *parent, pugi::xml_node parentNode) @@ -5384,16 +5384,16 @@ bool MEIInput::ReadStaffChildren(Object *parent, pugi::xml_node parentNode) for (current = parentNode.first_child(); current; current = current.next_sibling()) { if (!success) break; // editorial - else if (IsEditorialElementName(current.name())) { - success = ReadEditorialElement(parent, current, EDITORIAL_STAFF); + else if (this->IsEditorialElementName(current.name())) { + success = this->ReadEditorialElement(parent, current, EDITORIAL_STAFF); } // content else if (std::string(current.name()) == "layer") { - success = ReadLayer(parent, current); + success = this->ReadLayer(parent, current); } // xml comment else if (std::string(current.name()) == "") { - success = ReadXMLComment(parent, current); + success = this->ReadXMLComment(parent, current); } else { LogWarning("Unsupported '<%s>' within ", current.name()); @@ -5405,7 +5405,7 @@ bool MEIInput::ReadStaffChildren(Object *parent, pugi::xml_node parentNode) bool MEIInput::ReadLayer(Object *parent, pugi::xml_node layer) { Layer *vrvLayer = new Layer(); - SetMeiUuid(layer, vrvLayer); + this->SetMeiUuid(layer, vrvLayer); vrvLayer->ReadNInteger(layer); vrvLayer->ReadTyped(layer); @@ -5419,8 +5419,8 @@ bool MEIInput::ReadLayer(Object *parent, pugi::xml_node layer) } parent->AddChild(vrvLayer); - ReadUnsupportedAttr(layer, vrvLayer); - return ReadLayerChildren(vrvLayer, layer); + this->ReadUnsupportedAttr(layer, vrvLayer); + return this->ReadLayerChildren(vrvLayer, layer); } bool MEIInput::ReadLayerChildren(Object *parent, pugi::xml_node parentNode, Object *filter) @@ -5434,7 +5434,7 @@ bool MEIInput::ReadLayerChildren(Object *parent, pugi::xml_node parentNode, Obje } elementName = std::string(xmlElement.name()); // LogDebug("ReadLayerChildren: element <%s>", xmlElement.name()); - if (!IsAllowed(elementName, filter)) { + if (!this->IsAllowed(elementName, filter)) { std::string meiElementName = filter->GetClassName(); std::transform(meiElementName.begin(), meiElementName.begin() + 1, meiElementName.begin(), ::tolower); LogWarning("Element <%s> within <%s> is not supported and will be ignored ", xmlElement.name(), @@ -5442,133 +5442,133 @@ bool MEIInput::ReadLayerChildren(Object *parent, pugi::xml_node parentNode, Obje continue; } // editorial - else if (IsEditorialElementName(xmlElement.name())) { - success = ReadEditorialElement(parent, xmlElement, EDITORIAL_LAYER, filter); + else if (this->IsEditorialElementName(xmlElement.name())) { + success = this->ReadEditorialElement(parent, xmlElement, EDITORIAL_LAYER, filter); } // content else if (elementName == "accid") { - success = ReadAccid(parent, xmlElement); + success = this->ReadAccid(parent, xmlElement); } else if (elementName == "artic") { - success = ReadArtic(parent, xmlElement); + success = this->ReadArtic(parent, xmlElement); } else if (elementName == "barLine") { - success = ReadBarLine(parent, xmlElement); + success = this->ReadBarLine(parent, xmlElement); } else if (elementName == "beam") { - success = ReadBeam(parent, xmlElement); + success = this->ReadBeam(parent, xmlElement); } else if (elementName == "beatRpt") { - success = ReadBeatRpt(parent, xmlElement); + success = this->ReadBeatRpt(parent, xmlElement); } else if (elementName == "bTrem") { - success = ReadBTrem(parent, xmlElement); + success = this->ReadBTrem(parent, xmlElement); } else if (elementName == "chord") { - success = ReadChord(parent, xmlElement); + success = this->ReadChord(parent, xmlElement); } else if (elementName == "clef") { - success = ReadClef(parent, xmlElement); + success = this->ReadClef(parent, xmlElement); } else if (elementName == "custos") { - success = ReadCustos(parent, xmlElement); + success = this->ReadCustos(parent, xmlElement); } else if (elementName == "dot") { - success = ReadDot(parent, xmlElement); + success = this->ReadDot(parent, xmlElement); } else if (elementName == "fTrem") { - success = ReadFTrem(parent, xmlElement); + success = this->ReadFTrem(parent, xmlElement); } else if (elementName == "graceGrp") { - success = ReadGraceGrp(parent, xmlElement); + success = this->ReadGraceGrp(parent, xmlElement); } else if (elementName == "halfmRpt") { - success = ReadHalfmRpt(parent, xmlElement); + success = this->ReadHalfmRpt(parent, xmlElement); } else if (elementName == "keyAccid") { - success = ReadKeyAccid(parent, xmlElement); + success = this->ReadKeyAccid(parent, xmlElement); } else if (elementName == "keySig") { - success = ReadKeySig(parent, xmlElement); + success = this->ReadKeySig(parent, xmlElement); } else if (elementName == "label") { - success = ReadLabel(parent, xmlElement); + success = this->ReadLabel(parent, xmlElement); } else if (elementName == "labelAbbr") { - success = ReadLabelAbbr(parent, xmlElement); + success = this->ReadLabelAbbr(parent, xmlElement); } else if (elementName == "ligature") { - success = ReadLigature(parent, xmlElement); + success = this->ReadLigature(parent, xmlElement); } else if (elementName == "mensur") { - success = ReadMensur(parent, xmlElement); + success = this->ReadMensur(parent, xmlElement); } else if (elementName == "meterSig") { - success = ReadMeterSig(parent, xmlElement); + success = this->ReadMeterSig(parent, xmlElement); } else if (elementName == "meterSigGrp") { - success = ReadMeterSigGrp(parent, xmlElement); + success = this->ReadMeterSigGrp(parent, xmlElement); } else if (elementName == "nc") { - success = ReadNc(parent, xmlElement); + success = this->ReadNc(parent, xmlElement); } else if (elementName == "neume") { - success = ReadNeume(parent, xmlElement); + success = this->ReadNeume(parent, xmlElement); } else if (elementName == "note") { - success = ReadNote(parent, xmlElement); + success = this->ReadNote(parent, xmlElement); } else if (elementName == "rest") { - success = ReadRest(parent, xmlElement); + success = this->ReadRest(parent, xmlElement); } else if (elementName == "mRest") { - success = ReadMRest(parent, xmlElement); + success = this->ReadMRest(parent, xmlElement); } else if (elementName == "mRpt") { - success = ReadMRpt(parent, xmlElement); + success = this->ReadMRpt(parent, xmlElement); } else if (elementName == "mRpt2") { - success = ReadMRpt2(parent, xmlElement); + success = this->ReadMRpt2(parent, xmlElement); } else if (elementName == "mSpace") { - success = ReadMSpace(parent, xmlElement); + success = this->ReadMSpace(parent, xmlElement); } else if (elementName == "multiRest") { - success = ReadMultiRest(parent, xmlElement); + success = this->ReadMultiRest(parent, xmlElement); } else if (elementName == "multiRpt") { - success = ReadMultiRpt(parent, xmlElement); + success = this->ReadMultiRpt(parent, xmlElement); } else if (elementName == "plica") { - success = ReadPlica(parent, xmlElement); + success = this->ReadPlica(parent, xmlElement); } else if (elementName == "proport") { - success = ReadProport(parent, xmlElement); + success = this->ReadProport(parent, xmlElement); } else if (elementName == "space") { - success = ReadSpace(parent, xmlElement); + success = this->ReadSpace(parent, xmlElement); } else if (elementName == "syl") { - success = ReadSyl(parent, xmlElement); + success = this->ReadSyl(parent, xmlElement); } else if (elementName == "syllable") { - success = ReadSyllable(parent, xmlElement); + success = this->ReadSyllable(parent, xmlElement); } else if (elementName == "tabDurSym") { - success = ReadTabDurSym(parent, xmlElement); + success = this->ReadTabDurSym(parent, xmlElement); } else if (elementName == "tabGrp") { - success = ReadTabGrp(parent, xmlElement); + success = this->ReadTabGrp(parent, xmlElement); } else if (elementName == "tuplet") { - success = ReadTuplet(parent, xmlElement); + success = this->ReadTuplet(parent, xmlElement); } else if (elementName == "verse") { - success = ReadVerse(parent, xmlElement); + success = this->ReadVerse(parent, xmlElement); } // xml comment else if (elementName == "") { - success = ReadXMLComment(parent, xmlElement); + success = this->ReadXMLComment(parent, xmlElement); } // unknown else { @@ -5580,8 +5580,8 @@ bool MEIInput::ReadLayerChildren(Object *parent, pugi::xml_node parentNode, Obje bool MEIInput::ReadLayerElement(pugi::xml_node element, LayerElement *object) { - SetMeiUuid(element, object); - ReadLinkingInterface(element, object); + this->SetMeiUuid(element, object); + this->ReadLinkingInterface(element, object); object->ReadLabelled(element); object->ReadTyped(element); @@ -5600,9 +5600,9 @@ bool MEIInput::ReadLayerElement(pugi::xml_node element, LayerElement *object) bool MEIInput::ReadAccid(Object *parent, pugi::xml_node accid) { Accid *vrvAccid = new Accid(); - ReadLayerElement(accid, vrvAccid); + this->ReadLayerElement(accid, vrvAccid); - ReadPositionInterface(accid, vrvAccid); + this->ReadPositionInterface(accid, vrvAccid); vrvAccid->ReadAccidental(accid); vrvAccid->ReadAccidentalGestural(accid); vrvAccid->ReadAccidLog(accid); @@ -5611,14 +5611,14 @@ bool MEIInput::ReadAccid(Object *parent, pugi::xml_node accid) vrvAccid->ReadExtSym(accid); parent->AddChild(vrvAccid); - ReadUnsupportedAttr(accid, vrvAccid); + this->ReadUnsupportedAttr(accid, vrvAccid); return true; } bool MEIInput::ReadArtic(Object *parent, pugi::xml_node artic) { Artic *vrvArtic = new Artic(); - ReadLayerElement(artic, vrvArtic); + this->ReadLayerElement(artic, vrvArtic); vrvArtic->ReadArticulation(artic); vrvArtic->ReadColor(artic); @@ -5631,14 +5631,14 @@ bool MEIInput::ReadArtic(Object *parent, pugi::xml_node artic) } parent->AddChild(vrvArtic); - ReadUnsupportedAttr(artic, vrvArtic); + this->ReadUnsupportedAttr(artic, vrvArtic); return true; } bool MEIInput::ReadBarLine(Object *parent, pugi::xml_node barLine) { BarLine *vrvBarLine = new BarLine(); - ReadLayerElement(barLine, vrvBarLine); + this->ReadLayerElement(barLine, vrvBarLine); vrvBarLine->ReadBarLineLog(barLine); vrvBarLine->ReadColor(barLine); @@ -5646,14 +5646,14 @@ bool MEIInput::ReadBarLine(Object *parent, pugi::xml_node barLine) vrvBarLine->ReadVisibility(barLine); parent->AddChild(vrvBarLine); - ReadUnsupportedAttr(barLine, vrvBarLine); + this->ReadUnsupportedAttr(barLine, vrvBarLine); return true; } bool MEIInput::ReadBeam(Object *parent, pugi::xml_node beam) { Beam *vrvBeam = new Beam(); - ReadLayerElement(beam, vrvBeam); + this->ReadLayerElement(beam, vrvBeam); vrvBeam->ReadBeamedWith(beam); vrvBeam->ReadBeamRend(beam); @@ -5661,14 +5661,14 @@ bool MEIInput::ReadBeam(Object *parent, pugi::xml_node beam) vrvBeam->ReadCue(beam); parent->AddChild(vrvBeam); - ReadUnsupportedAttr(beam, vrvBeam); - return ReadLayerChildren(vrvBeam, beam, vrvBeam); + this->ReadUnsupportedAttr(beam, vrvBeam); + return this->ReadLayerChildren(vrvBeam, beam, vrvBeam); } bool MEIInput::ReadBeatRpt(Object *parent, pugi::xml_node beatRpt) { BeatRpt *vrvBeatRpt = new BeatRpt(); - ReadLayerElement(beatRpt, vrvBeatRpt); + this->ReadLayerElement(beatRpt, vrvBeatRpt); vrvBeatRpt->ReadColor(beatRpt); vrvBeatRpt->ReadBeatRptLog(beatRpt); @@ -5679,27 +5679,27 @@ bool MEIInput::ReadBeatRpt(Object *parent, pugi::xml_node beatRpt) } parent->AddChild(vrvBeatRpt); - ReadUnsupportedAttr(beatRpt, vrvBeatRpt); + this->ReadUnsupportedAttr(beatRpt, vrvBeatRpt); return true; } bool MEIInput::ReadBTrem(Object *parent, pugi::xml_node bTrem) { BTrem *vrvBTrem = new BTrem(); - ReadLayerElement(bTrem, vrvBTrem); + this->ReadLayerElement(bTrem, vrvBTrem); vrvBTrem->ReadBTremLog(bTrem); vrvBTrem->ReadTremMeasured(bTrem); parent->AddChild(vrvBTrem); - ReadUnsupportedAttr(bTrem, vrvBTrem); - return ReadLayerChildren(vrvBTrem, bTrem, vrvBTrem); + this->ReadUnsupportedAttr(bTrem, vrvBTrem); + return this->ReadLayerChildren(vrvBTrem, bTrem, vrvBTrem); } bool MEIInput::ReadChord(Object *parent, pugi::xml_node chord) { Chord *vrvChord = new Chord(); - ReadLayerElement(chord, vrvChord); + this->ReadLayerElement(chord, vrvChord); if (m_version < MEI_4_0_0) { if (chord.attribute("size")) { @@ -5708,7 +5708,7 @@ bool MEIInput::ReadChord(Object *parent, pugi::xml_node chord) } } - ReadDurationInterface(chord, vrvChord); + this->ReadDurationInterface(chord, vrvChord); vrvChord->ReadColor(chord); vrvChord->ReadCue(chord); vrvChord->ReadGraced(chord); @@ -5731,15 +5731,15 @@ bool MEIInput::ReadChord(Object *parent, pugi::xml_node chord) } parent->AddChild(vrvChord); - ReadUnsupportedAttr(chord, vrvChord); - return ReadLayerChildren(vrvChord, chord, vrvChord); + this->ReadUnsupportedAttr(chord, vrvChord); + return this->ReadLayerChildren(vrvChord, chord, vrvChord); } bool MEIInput::ReadClef(Object *parent, pugi::xml_node clef) { Clef *vrvClef = new Clef(); - ReadLayerElement(clef, vrvClef); - ReadFacsimileInterface(clef, vrvClef); + this->ReadLayerElement(clef, vrvClef); + this->ReadFacsimileInterface(clef, vrvClef); vrvClef->ReadClefShape(clef); vrvClef->ReadColor(clef); @@ -5750,7 +5750,7 @@ bool MEIInput::ReadClef(Object *parent, pugi::xml_node clef) vrvClef->ReadVisibility(clef); parent->AddChild(vrvClef); - ReadUnsupportedAttr(clef, vrvClef); + this->ReadUnsupportedAttr(clef, vrvClef); return true; } @@ -5772,39 +5772,39 @@ void MEIInput::ReadAccidAttr(pugi::xml_node node, Object *object) bool MEIInput::ReadCustos(Object *parent, pugi::xml_node custos) { Custos *vrvCustos = new Custos(); - ReadLayerElement(custos, vrvCustos); + this->ReadLayerElement(custos, vrvCustos); - ReadFacsimileInterface(custos, vrvCustos); - ReadPitchInterface(custos, vrvCustos); - ReadPositionInterface(custos, vrvCustos); + this->ReadFacsimileInterface(custos, vrvCustos); + this->ReadPitchInterface(custos, vrvCustos); + this->ReadPositionInterface(custos, vrvCustos); vrvCustos->ReadColor(custos); vrvCustos->ReadExtSym(custos); - ReadAccidAttr(custos, vrvCustos); + this->ReadAccidAttr(custos, vrvCustos); parent->AddChild(vrvCustos); - ReadUnsupportedAttr(custos, vrvCustos); - return ReadLayerChildren(vrvCustos, custos, vrvCustos); + this->ReadUnsupportedAttr(custos, vrvCustos); + return this->ReadLayerChildren(vrvCustos, custos, vrvCustos); } bool MEIInput::ReadDot(Object *parent, pugi::xml_node dot) { Dot *vrvDot = new Dot(); - ReadLayerElement(dot, vrvDot); + this->ReadLayerElement(dot, vrvDot); - ReadPositionInterface(dot, vrvDot); + this->ReadPositionInterface(dot, vrvDot); vrvDot->ReadColor(dot); vrvDot->ReadDotLog(dot); parent->AddChild(vrvDot); - ReadUnsupportedAttr(dot, vrvDot); + this->ReadUnsupportedAttr(dot, vrvDot); return true; } bool MEIInput::ReadFTrem(Object *parent, pugi::xml_node fTrem) { FTrem *vrvFTrem = new FTrem(); - ReadLayerElement(fTrem, vrvFTrem); + this->ReadLayerElement(fTrem, vrvFTrem); if (m_version < MEI_4_0_0) { UpgradeFTremTo_4_0_0(fTrem, vrvFTrem); @@ -5814,55 +5814,55 @@ bool MEIInput::ReadFTrem(Object *parent, pugi::xml_node fTrem) vrvFTrem->ReadTremMeasured(fTrem); parent->AddChild(vrvFTrem); - ReadUnsupportedAttr(fTrem, vrvFTrem); - return ReadLayerChildren(vrvFTrem, fTrem, vrvFTrem); + this->ReadUnsupportedAttr(fTrem, vrvFTrem); + return this->ReadLayerChildren(vrvFTrem, fTrem, vrvFTrem); } bool MEIInput::ReadGraceGrp(Object *parent, pugi::xml_node graceGrp) { GraceGrp *vrvGraceGrp = new GraceGrp(); - ReadLayerElement(graceGrp, vrvGraceGrp); + this->ReadLayerElement(graceGrp, vrvGraceGrp); vrvGraceGrp->ReadColor(graceGrp); vrvGraceGrp->ReadGraced(graceGrp); vrvGraceGrp->ReadGraceGrpLog(graceGrp); parent->AddChild(vrvGraceGrp); - ReadUnsupportedAttr(graceGrp, vrvGraceGrp); - return ReadLayerChildren(vrvGraceGrp, graceGrp, vrvGraceGrp); + this->ReadUnsupportedAttr(graceGrp, vrvGraceGrp); + return this->ReadLayerChildren(vrvGraceGrp, graceGrp, vrvGraceGrp); } bool MEIInput::ReadHalfmRpt(Object *parent, pugi::xml_node halfmRpt) { HalfmRpt *vrvHalfmRpt = new HalfmRpt(); - ReadLayerElement(halfmRpt, vrvHalfmRpt); + this->ReadLayerElement(halfmRpt, vrvHalfmRpt); vrvHalfmRpt->ReadColor(halfmRpt); parent->AddChild(vrvHalfmRpt); - ReadUnsupportedAttr(halfmRpt, vrvHalfmRpt); + this->ReadUnsupportedAttr(halfmRpt, vrvHalfmRpt); return true; } bool MEIInput::ReadKeyAccid(Object *parent, pugi::xml_node keyAccid) { KeyAccid *vrvKeyAccid = new KeyAccid(); - ReadLayerElement(keyAccid, vrvKeyAccid); + this->ReadLayerElement(keyAccid, vrvKeyAccid); - ReadPitchInterface(keyAccid, vrvKeyAccid); + this->ReadPitchInterface(keyAccid, vrvKeyAccid); vrvKeyAccid->ReadAccidental(keyAccid); vrvKeyAccid->ReadColor(keyAccid); vrvKeyAccid->ReadEnclosingChars(keyAccid); parent->AddChild(vrvKeyAccid); - ReadUnsupportedAttr(keyAccid, vrvKeyAccid); + this->ReadUnsupportedAttr(keyAccid, vrvKeyAccid); return true; } bool MEIInput::ReadKeySig(Object *parent, pugi::xml_node keySig) { KeySig *vrvKeySig = new KeySig(); - ReadLayerElement(keySig, vrvKeySig); + this->ReadLayerElement(keySig, vrvKeySig); vrvKeySig->ReadAccidental(keySig); vrvKeySig->ReadPitch(keySig); @@ -5872,26 +5872,26 @@ bool MEIInput::ReadKeySig(Object *parent, pugi::xml_node keySig) vrvKeySig->ReadVisibility(keySig); parent->AddChild(vrvKeySig); - ReadUnsupportedAttr(keySig, vrvKeySig); - return ReadLayerChildren(vrvKeySig, keySig, vrvKeySig); + this->ReadUnsupportedAttr(keySig, vrvKeySig); + return this->ReadLayerChildren(vrvKeySig, keySig, vrvKeySig); } bool MEIInput::ReadLigature(Object *parent, pugi::xml_node ligature) { Ligature *vrvLigature = new Ligature(); - SetMeiUuid(ligature, vrvLigature); + this->SetMeiUuid(ligature, vrvLigature); vrvLigature->ReadLigatureVis(ligature); parent->AddChild(vrvLigature); - ReadUnsupportedAttr(ligature, vrvLigature); - return ReadLayerChildren(vrvLigature, ligature, vrvLigature); + this->ReadUnsupportedAttr(ligature, vrvLigature); + return this->ReadLayerChildren(vrvLigature, ligature, vrvLigature); } bool MEIInput::ReadMensur(Object *parent, pugi::xml_node mensur) { Mensur *vrvMensur = new Mensur(); - ReadLayerElement(mensur, vrvMensur); + this->ReadLayerElement(mensur, vrvMensur); if (m_version < MEI_4_0_0) { if (mensur.attribute("size")) { @@ -5913,29 +5913,29 @@ bool MEIInput::ReadMensur(Object *parent, pugi::xml_node mensur) } parent->AddChild(vrvMensur); - ReadUnsupportedAttr(mensur, vrvMensur); + this->ReadUnsupportedAttr(mensur, vrvMensur); return true; } bool MEIInput::ReadMeterSig(Object *parent, pugi::xml_node meterSig) { MeterSig *vrvMeterSig = new MeterSig(); - ReadLayerElement(meterSig, vrvMeterSig); + this->ReadLayerElement(meterSig, vrvMeterSig); vrvMeterSig->ReadEnclosingChars(meterSig); vrvMeterSig->ReadMeterSigLog(meterSig); vrvMeterSig->ReadMeterSigVis(meterSig); parent->AddChild(vrvMeterSig); - ReadUnsupportedAttr(meterSig, vrvMeterSig); + this->ReadUnsupportedAttr(meterSig, vrvMeterSig); return true; } bool MEIInput::ReadMRest(Object *parent, pugi::xml_node mRest) { MRest *vrvMRest = new MRest(); - ReadLayerElement(mRest, vrvMRest); - ReadPositionInterface(mRest, vrvMRest); + this->ReadLayerElement(mRest, vrvMRest); + this->ReadPositionInterface(mRest, vrvMRest); if (m_version < MEI_4_0_0) { if (mRest.attribute("size")) { @@ -5959,50 +5959,50 @@ bool MEIInput::ReadMRest(Object *parent, pugi::xml_node mRest) } parent->AddChild(vrvMRest); - ReadUnsupportedAttr(mRest, vrvMRest); + this->ReadUnsupportedAttr(mRest, vrvMRest); return true; } bool MEIInput::ReadMRpt(Object *parent, pugi::xml_node mRpt) { MRpt *vrvMRpt = new MRpt(); - ReadLayerElement(mRpt, vrvMRpt); + this->ReadLayerElement(mRpt, vrvMRpt); vrvMRpt->ReadColor(mRpt); parent->AddChild(vrvMRpt); - ReadUnsupportedAttr(mRpt, vrvMRpt); + this->ReadUnsupportedAttr(mRpt, vrvMRpt); return true; } bool MEIInput::ReadMRpt2(Object *parent, pugi::xml_node mRpt2) { MRpt2 *vrvMRpt2 = new MRpt2(); - ReadLayerElement(mRpt2, vrvMRpt2); + this->ReadLayerElement(mRpt2, vrvMRpt2); vrvMRpt2->ReadColor(mRpt2); parent->AddChild(vrvMRpt2); - ReadUnsupportedAttr(mRpt2, vrvMRpt2); + this->ReadUnsupportedAttr(mRpt2, vrvMRpt2); return true; } bool MEIInput::ReadMSpace(Object *parent, pugi::xml_node mSpace) { MSpace *vrvMSpace = new MSpace(); - ReadLayerElement(mSpace, vrvMSpace); + this->ReadLayerElement(mSpace, vrvMSpace); parent->AddChild(vrvMSpace); - ReadUnsupportedAttr(mSpace, vrvMSpace); + this->ReadUnsupportedAttr(mSpace, vrvMSpace); return true; } bool MEIInput::ReadMultiRest(Object *parent, pugi::xml_node multiRest) { MultiRest *vrvMultiRest = new MultiRest(); - ReadLayerElement(multiRest, vrvMultiRest); + this->ReadLayerElement(multiRest, vrvMultiRest); - ReadPositionInterface(multiRest, vrvMultiRest); + this->ReadPositionInterface(multiRest, vrvMultiRest); vrvMultiRest->ReadColor(multiRest); vrvMultiRest->ReadMultiRestVis(multiRest); vrvMultiRest->ReadNumbered(multiRest); @@ -6010,55 +6010,55 @@ bool MEIInput::ReadMultiRest(Object *parent, pugi::xml_node multiRest) vrvMultiRest->ReadWidth(multiRest); parent->AddChild(vrvMultiRest); - ReadUnsupportedAttr(multiRest, vrvMultiRest); + this->ReadUnsupportedAttr(multiRest, vrvMultiRest); return true; } bool MEIInput::ReadMultiRpt(Object *parent, pugi::xml_node multiRpt) { MultiRpt *vrvMultiRpt = new MultiRpt(); - ReadLayerElement(multiRpt, vrvMultiRpt); + this->ReadLayerElement(multiRpt, vrvMultiRpt); vrvMultiRpt->ReadNumbered(multiRpt); parent->AddChild(vrvMultiRpt); - ReadUnsupportedAttr(multiRpt, vrvMultiRpt); + this->ReadUnsupportedAttr(multiRpt, vrvMultiRpt); return true; } bool MEIInput::ReadNc(Object *parent, pugi::xml_node nc) { Nc *vrvNc = new Nc(); - ReadLayerElement(nc, vrvNc); + this->ReadLayerElement(nc, vrvNc); - ReadDurationInterface(nc, vrvNc); - ReadFacsimileInterface(nc, vrvNc); - ReadPitchInterface(nc, vrvNc); - ReadPositionInterface(nc, vrvNc); + this->ReadDurationInterface(nc, vrvNc); + this->ReadFacsimileInterface(nc, vrvNc); + this->ReadPitchInterface(nc, vrvNc); + this->ReadPositionInterface(nc, vrvNc); vrvNc->ReadColor(nc); vrvNc->ReadIntervalMelodic(nc); vrvNc->ReadNcForm(nc); parent->AddChild(vrvNc); - return ReadLayerChildren(vrvNc, nc, vrvNc); + return this->ReadLayerChildren(vrvNc, nc, vrvNc); } bool MEIInput::ReadNeume(Object *parent, pugi::xml_node neume) { Neume *vrvNeume = new Neume(); - ReadLayerElement(neume, vrvNeume); - ReadFacsimileInterface(neume, vrvNeume); + this->ReadLayerElement(neume, vrvNeume); + this->ReadFacsimileInterface(neume, vrvNeume); vrvNeume->ReadColor(neume); parent->AddChild(vrvNeume); - return ReadLayerChildren(vrvNeume, neume, vrvNeume); + return this->ReadLayerChildren(vrvNeume, neume, vrvNeume); } bool MEIInput::ReadNote(Object *parent, pugi::xml_node note) { Note *vrvNote = new Note(); - ReadLayerElement(note, vrvNote); + this->ReadLayerElement(note, vrvNote); if (m_version < MEI_4_0_0) { if (note.attribute("size")) { @@ -6067,9 +6067,9 @@ bool MEIInput::ReadNote(Object *parent, pugi::xml_node note) } } - ReadDurationInterface(note, vrvNote); - ReadPitchInterface(note, vrvNote); - ReadPositionInterface(note, vrvNote); + this->ReadDurationInterface(note, vrvNote); + this->ReadPitchInterface(note, vrvNote); + this->ReadPositionInterface(note, vrvNote); vrvNote->ReadColor(note); vrvNote->ReadColoration(note); vrvNote->ReadCue(note); @@ -6096,21 +6096,21 @@ bool MEIInput::ReadNote(Object *parent, pugi::xml_node note) vrvNote->AddChild(vrvArtic); } - ReadAccidAttr(note, vrvNote); + this->ReadAccidAttr(note, vrvNote); if (vrvNote->HasTie()) { m_doc->SetMarkup(MARKUP_ANALYTICAL_TIE); } parent->AddChild(vrvNote); - ReadUnsupportedAttr(note, vrvNote); - return ReadLayerChildren(vrvNote, note, vrvNote); + this->ReadUnsupportedAttr(note, vrvNote); + return this->ReadLayerChildren(vrvNote, note, vrvNote); } bool MEIInput::ReadRest(Object *parent, pugi::xml_node rest) { Rest *vrvRest = new Rest(); - ReadLayerElement(rest, vrvRest); + this->ReadLayerElement(rest, vrvRest); if (m_version < MEI_4_0_0) { if (rest.attribute("size")) { @@ -6119,110 +6119,110 @@ bool MEIInput::ReadRest(Object *parent, pugi::xml_node rest) } } - ReadDurationInterface(rest, vrvRest); - ReadPositionInterface(rest, vrvRest); + this->ReadDurationInterface(rest, vrvRest); + this->ReadPositionInterface(rest, vrvRest); vrvRest->ReadColor(rest); vrvRest->ReadCue(rest); vrvRest->ReadExtSym(rest); vrvRest->ReadRestVisMensural(rest); parent->AddChild(vrvRest); - ReadUnsupportedAttr(rest, vrvRest); - return ReadLayerChildren(vrvRest, rest, vrvRest); + this->ReadUnsupportedAttr(rest, vrvRest); + return this->ReadLayerChildren(vrvRest, rest, vrvRest); } bool MEIInput::ReadPlica(Object *parent, pugi::xml_node plica) { Plica *vrvPlica = new Plica(); - ReadLayerElement(plica, vrvPlica); + this->ReadLayerElement(plica, vrvPlica); vrvPlica->ReadPlicaVis(plica); parent->AddChild(vrvPlica); - ReadUnsupportedAttr(plica, vrvPlica); + this->ReadUnsupportedAttr(plica, vrvPlica); return true; } bool MEIInput::ReadProport(Object *parent, pugi::xml_node proport) { Proport *vrvProport = new Proport(); - ReadLayerElement(proport, vrvProport); + this->ReadLayerElement(proport, vrvProport); vrvProport->ReadDurationRatio(proport); parent->AddChild(vrvProport); - ReadUnsupportedAttr(proport, vrvProport); + this->ReadUnsupportedAttr(proport, vrvProport); return true; } bool MEIInput::ReadSpace(Object *parent, pugi::xml_node space) { Space *vrvSpace = new Space(); - ReadLayerElement(space, vrvSpace); + this->ReadLayerElement(space, vrvSpace); - ReadDurationInterface(space, vrvSpace); + this->ReadDurationInterface(space, vrvSpace); parent->AddChild(vrvSpace); - ReadUnsupportedAttr(space, vrvSpace); + this->ReadUnsupportedAttr(space, vrvSpace); return true; } bool MEIInput::ReadSyl(Object *parent, pugi::xml_node syl) { Syl *vrvSyl = new Syl(); - ReadLayerElement(syl, vrvSyl); + this->ReadLayerElement(syl, vrvSyl); vrvSyl->ReadLang(syl); vrvSyl->ReadTypography(syl); vrvSyl->ReadSylLog(syl); - ReadFacsimileInterface(syl, vrvSyl); + this->ReadFacsimileInterface(syl, vrvSyl); parent->AddChild(vrvSyl); - ReadUnsupportedAttr(syl, vrvSyl); - return ReadTextChildren(vrvSyl, syl, vrvSyl); + this->ReadUnsupportedAttr(syl, vrvSyl); + return this->ReadTextChildren(vrvSyl, syl, vrvSyl); } bool MEIInput::ReadSyllable(Object *parent, pugi::xml_node syllable) { Syllable *vrvSyllable = new Syllable(); - ReadLayerElement(syllable, vrvSyllable); + this->ReadLayerElement(syllable, vrvSyllable); vrvSyllable->ReadColor(syllable); vrvSyllable->ReadSlashCount(syllable); parent->AddChild(vrvSyllable); - return ReadLayerChildren(vrvSyllable, syllable, vrvSyllable); + return this->ReadLayerChildren(vrvSyllable, syllable, vrvSyllable); } bool MEIInput::ReadTabDurSym(Object *parent, pugi::xml_node tabRhyhtm) { TabDurSym *vrvTabDurSym = new TabDurSym(); - ReadLayerElement(tabRhyhtm, vrvTabDurSym); + this->ReadLayerElement(tabRhyhtm, vrvTabDurSym); vrvTabDurSym->ReadNNumberLike(tabRhyhtm); parent->AddChild(vrvTabDurSym); - ReadUnsupportedAttr(tabRhyhtm, vrvTabDurSym); + this->ReadUnsupportedAttr(tabRhyhtm, vrvTabDurSym); return true; } bool MEIInput::ReadTabGrp(Object *parent, pugi::xml_node tabGrp) { TabGrp *vrvTabGrp = new TabGrp(); - ReadLayerElement(tabGrp, vrvTabGrp); + this->ReadLayerElement(tabGrp, vrvTabGrp); - ReadDurationInterface(tabGrp, vrvTabGrp); + this->ReadDurationInterface(tabGrp, vrvTabGrp); parent->AddChild(vrvTabGrp); - ReadUnsupportedAttr(tabGrp, vrvTabGrp); - return ReadLayerChildren(vrvTabGrp, tabGrp, vrvTabGrp); + this->ReadUnsupportedAttr(tabGrp, vrvTabGrp); + return this->ReadLayerChildren(vrvTabGrp, tabGrp, vrvTabGrp); } bool MEIInput::ReadTuplet(Object *parent, pugi::xml_node tuplet) { Tuplet *vrvTuplet = new Tuplet(); - ReadLayerElement(tuplet, vrvTuplet); + this->ReadLayerElement(tuplet, vrvTuplet); vrvTuplet->ReadColor(tuplet); vrvTuplet->ReadDurationRatio(tuplet); @@ -6230,14 +6230,14 @@ bool MEIInput::ReadTuplet(Object *parent, pugi::xml_node tuplet) vrvTuplet->ReadTupletVis(tuplet); parent->AddChild(vrvTuplet); - ReadUnsupportedAttr(tuplet, vrvTuplet); - return ReadLayerChildren(vrvTuplet, tuplet, vrvTuplet); + this->ReadUnsupportedAttr(tuplet, vrvTuplet); + return this->ReadLayerChildren(vrvTuplet, tuplet, vrvTuplet); } bool MEIInput::ReadVerse(Object *parent, pugi::xml_node verse) { Verse *vrvVerse = new Verse(); - ReadLayerElement(verse, vrvVerse); + this->ReadLayerElement(verse, vrvVerse); vrvVerse->ReadColor(verse); vrvVerse->ReadLang(verse); @@ -6245,8 +6245,8 @@ bool MEIInput::ReadVerse(Object *parent, pugi::xml_node verse) vrvVerse->ReadTypography(verse); parent->AddChild(vrvVerse); - ReadUnsupportedAttr(verse, vrvVerse); - return ReadLayerChildren(vrvVerse, verse, vrvVerse); + this->ReadUnsupportedAttr(verse, vrvVerse); + return this->ReadLayerChildren(vrvVerse, verse, vrvVerse); } bool MEIInput::ReadTextChildren(Object *parent, pugi::xml_node parentNode, Object *filter) @@ -6260,7 +6260,7 @@ bool MEIInput::ReadTextChildren(Object *parent, pugi::xml_node parentNode, Objec break; } elementName = std::string(xmlElement.name()); - if (filter && !IsAllowed(elementName, filter)) { + if (filter && !this->IsAllowed(elementName, filter)) { std::string meiElementName = filter->GetClassName(); std::transform(meiElementName.begin(), meiElementName.begin() + 1, meiElementName.begin(), ::tolower); LogWarning("Element <%s> within <%s> is not supported and will be ignored ", xmlElement.name(), @@ -6268,37 +6268,37 @@ bool MEIInput::ReadTextChildren(Object *parent, pugi::xml_node parentNode, Objec continue; } // editorial - else if (IsEditorialElementName(xmlElement.name())) { - success = ReadEditorialElement(parent, xmlElement, EDITORIAL_TEXT, filter); + else if (this->IsEditorialElementName(xmlElement.name())) { + success = this->ReadEditorialElement(parent, xmlElement, EDITORIAL_TEXT, filter); } // content else if (elementName == "fig") { - success = ReadFig(parent, xmlElement); + success = this->ReadFig(parent, xmlElement); } else if (elementName == "lb") { - success = ReadLb(parent, xmlElement); + success = this->ReadLb(parent, xmlElement); } else if (elementName == "num") { - success = ReadNum(parent, xmlElement); + success = this->ReadNum(parent, xmlElement); } else if (elementName == "rend") { - success = ReadRend(parent, xmlElement); + success = this->ReadRend(parent, xmlElement); } else if (elementName == "svg") { - success = ReadSvg(parent, xmlElement); + success = this->ReadSvg(parent, xmlElement); } else if (xmlElement.text()) { bool trimLeft = (i == 0); bool trimRight = (!xmlElement.next_sibling()); - success = ReadText(parent, xmlElement, trimLeft, trimRight); + success = this->ReadText(parent, xmlElement, trimLeft, trimRight); } // figured bass else if (elementName == "fb") { - success = ReadFb(parent, xmlElement); + success = this->ReadFb(parent, xmlElement); } // xml comment else if (elementName == "") { - success = ReadXMLComment(parent, xmlElement); + success = this->ReadXMLComment(parent, xmlElement); } // unknown else { @@ -6311,7 +6311,7 @@ bool MEIInput::ReadTextChildren(Object *parent, pugi::xml_node parentNode, Objec bool MEIInput::ReadTextElement(pugi::xml_node element, TextElement *object) { - SetMeiUuid(element, object); + this->SetMeiUuid(element, object); object->ReadLabelled(element); object->ReadTyped(element); @@ -6321,54 +6321,54 @@ bool MEIInput::ReadTextElement(pugi::xml_node element, TextElement *object) bool MEIInput::ReadF(Object *parent, pugi::xml_node f) { F *vrvF = new F(); - ReadTextElement(f, vrvF); + this->ReadTextElement(f, vrvF); - ReadTimeSpanningInterface(f, vrvF); + this->ReadTimeSpanningInterface(f, vrvF); vrvF->ReadExtender(f); parent->AddChild(vrvF); - ReadUnsupportedAttr(f, vrvF); - return ReadTextChildren(vrvF, f, vrvF); + this->ReadUnsupportedAttr(f, vrvF); + return this->ReadTextChildren(vrvF, f, vrvF); } bool MEIInput::ReadFig(Object *parent, pugi::xml_node fig) { Fig *vrvFig = new Fig(); - ReadTextElement(fig, vrvFig); + this->ReadTextElement(fig, vrvFig); - ReadAreaPosInterface(fig, vrvFig); + this->ReadAreaPosInterface(fig, vrvFig); parent->AddChild(vrvFig); - ReadUnsupportedAttr(fig, vrvFig); - return ReadTextChildren(vrvFig, fig, vrvFig); + this->ReadUnsupportedAttr(fig, vrvFig); + return this->ReadTextChildren(vrvFig, fig, vrvFig); } bool MEIInput::ReadLb(Object *parent, pugi::xml_node lb) { Lb *vrvLb = new Lb(); - ReadTextElement(lb, vrvLb); + this->ReadTextElement(lb, vrvLb); parent->AddChild(vrvLb); - ReadUnsupportedAttr(lb, vrvLb); + this->ReadUnsupportedAttr(lb, vrvLb); return true; } bool MEIInput::ReadNum(Object *parent, pugi::xml_node num) { Num *vrvNum = new Num(); - ReadTextElement(num, vrvNum); + this->ReadTextElement(num, vrvNum); parent->AddChild(vrvNum); - ReadUnsupportedAttr(num, vrvNum); - return ReadTextChildren(vrvNum, num, vrvNum); + this->ReadUnsupportedAttr(num, vrvNum); + return this->ReadTextChildren(vrvNum, num, vrvNum); } bool MEIInput::ReadRend(Object *parent, pugi::xml_node rend) { Rend *vrvRend = new Rend(); - ReadTextElement(rend, vrvRend); + this->ReadTextElement(rend, vrvRend); - ReadAreaPosInterface(rend, vrvRend); + this->ReadAreaPosInterface(rend, vrvRend); vrvRend->ReadColor(rend); vrvRend->ReadLang(rend); @@ -6384,14 +6384,14 @@ bool MEIInput::ReadRend(Object *parent, pugi::xml_node rend) } parent->AddChild(vrvRend); - ReadUnsupportedAttr(rend, vrvRend); - return ReadTextChildren(vrvRend, rend, vrvRend); + this->ReadUnsupportedAttr(rend, vrvRend); + return this->ReadTextChildren(vrvRend, rend, vrvRend); } bool MEIInput::ReadSvg(Object *parent, pugi::xml_node svg) { Svg *vrvSvg = new Svg(); - SetMeiUuid(svg, vrvSvg); + this->SetMeiUuid(svg, vrvSvg); if (std::string(svg.name()) == "svg") { vrvSvg->Set(svg); @@ -6401,7 +6401,7 @@ bool MEIInput::ReadSvg(Object *parent, pugi::xml_node svg) } parent->AddChild(vrvSvg); - ReadUnsupportedAttr(svg, vrvSvg); + this->ReadUnsupportedAttr(svg, vrvSvg); return true; } @@ -6508,7 +6508,7 @@ bool MEIInput::ReadTimePointInterface(pugi::xml_node element, TimePointInterface bool MEIInput::ReadTimeSpanningInterface(pugi::xml_node element, TimeSpanningInterface *interface) { - ReadTimePointInterface(element, interface); + this->ReadTimePointInterface(element, interface); interface->ReadStartEndId(element); interface->ReadTimestamp2Logical(element); return true; @@ -6524,55 +6524,55 @@ void MEIInput::ReadUnsupportedAttr(pugi::xml_node element, Object *object) bool MEIInput::ReadEditorialElement(Object *parent, pugi::xml_node current, EditorialLevel level, Object *filter) { if (std::string(current.name()) == "abbr") { - return ReadAbbr(parent, current, level, filter); + return this->ReadAbbr(parent, current, level, filter); } else if (std::string(current.name()) == "add") { - return ReadAdd(parent, current, level, filter); + return this->ReadAdd(parent, current, level, filter); } else if (std::string(current.name()) == "app") { - return ReadApp(parent, current, level, filter); + return this->ReadApp(parent, current, level, filter); } else if (std::string(current.name()) == "annot") { - return ReadAnnot(parent, current); + return this->ReadAnnot(parent, current); } else if (std::string(current.name()) == "choice") { - return ReadChoice(parent, current, level, filter); + return this->ReadChoice(parent, current, level, filter); } else if (std::string(current.name()) == "corr") { - return ReadCorr(parent, current, level, filter); + return this->ReadCorr(parent, current, level, filter); } else if (std::string(current.name()) == "damage") { - return ReadDamage(parent, current, level, filter); + return this->ReadDamage(parent, current, level, filter); } else if (std::string(current.name()) == "del") { - return ReadDel(parent, current, level, filter); + return this->ReadDel(parent, current, level, filter); } else if (std::string(current.name()) == "expan") { - return ReadExpan(parent, current, level, filter); + return this->ReadExpan(parent, current, level, filter); } else if (std::string(current.name()) == "orig") { - return ReadOrig(parent, current, level, filter); + return this->ReadOrig(parent, current, level, filter); } else if (std::string(current.name()) == "ref") { - return ReadRef(parent, current, level, filter); + return this->ReadRef(parent, current, level, filter); } else if (std::string(current.name()) == "reg") { - return ReadReg(parent, current, level, filter); + return this->ReadReg(parent, current, level, filter); } else if (std::string(current.name()) == "restore") { - return ReadRestore(parent, current, level, filter); + return this->ReadRestore(parent, current, level, filter); } else if (std::string(current.name()) == "sic") { - return ReadSic(parent, current, level, filter); + return this->ReadSic(parent, current, level, filter); } else if (std::string(current.name()) == "subst") { - return ReadSubst(parent, current, level, filter); + return this->ReadSubst(parent, current, level, filter); } else if (std::string(current.name()) == "supplied") { - return ReadSupplied(parent, current, level, filter); + return this->ReadSupplied(parent, current, level, filter); } else if (std::string(current.name()) == "unclear") { - return ReadUnclear(parent, current, level, filter); + return this->ReadUnclear(parent, current, level, filter); } else { assert(false); // this should never happen, MEIInput::s_editorialElementNames should be updated @@ -6582,7 +6582,7 @@ bool MEIInput::ReadEditorialElement(Object *parent, pugi::xml_node current, Edit bool MEIInput::ReadEditorialElement(pugi::xml_node element, EditorialElement *object) { - SetMeiUuid(element, object); + this->SetMeiUuid(element, object); object->ReadLabelled(element); object->ReadTyped(element); @@ -6593,31 +6593,31 @@ bool MEIInput::ReadEditorialElement(pugi::xml_node element, EditorialElement *ob bool MEIInput::ReadAbbr(Object *parent, pugi::xml_node abbr, EditorialLevel level, Object *filter) { Abbr *vrvAbbr = new Abbr(); - ReadEditorialElement(abbr, vrvAbbr); + this->ReadEditorialElement(abbr, vrvAbbr); vrvAbbr->ReadSource(abbr); parent->AddChild(vrvAbbr); - ReadUnsupportedAttr(abbr, vrvAbbr); - return ReadEditorialChildren(vrvAbbr, abbr, level, filter); + this->ReadUnsupportedAttr(abbr, vrvAbbr); + return this->ReadEditorialChildren(vrvAbbr, abbr, level, filter); } bool MEIInput::ReadAdd(Object *parent, pugi::xml_node add, EditorialLevel level, Object *filter) { Add *vrvAdd = new Add(); - ReadEditorialElement(add, vrvAdd); + this->ReadEditorialElement(add, vrvAdd); vrvAdd->ReadSource(add); parent->AddChild(vrvAdd); - ReadUnsupportedAttr(add, vrvAdd); - return ReadEditorialChildren(vrvAdd, add, level, filter); + this->ReadUnsupportedAttr(add, vrvAdd); + return this->ReadEditorialChildren(vrvAdd, add, level, filter); } bool MEIInput::ReadAnnot(Object *parent, pugi::xml_node annot) { Annot *vrvAnnot = new Annot(); - ReadEditorialElement(annot, vrvAnnot); + this->ReadEditorialElement(annot, vrvAnnot); vrvAnnot->ReadPlist(annot); vrvAnnot->ReadSource(annot); @@ -6629,7 +6629,7 @@ bool MEIInput::ReadAnnot(Object *parent, pugi::xml_node annot) } parent->AddChild(vrvAnnot); - ReadUnsupportedAttr(annot, vrvAnnot); + this->ReadUnsupportedAttr(annot, vrvAnnot); // for Annot we do not load children because they preserved in Annot::m_content return true; } @@ -6641,11 +6641,11 @@ bool MEIInput::ReadApp(Object *parent, pugi::xml_node app, EditorialLevel level, return false; } App *vrvApp = new App(level); - ReadEditorialElement(app, vrvApp); + this->ReadEditorialElement(app, vrvApp); parent->AddChild(vrvApp); - ReadUnsupportedAttr(app, vrvApp); - return ReadAppChildren(vrvApp, app, level, filter); + this->ReadUnsupportedAttr(app, vrvApp); + return this->ReadAppChildren(vrvApp, app, level, filter); } bool MEIInput::ReadAppChildren(Object *parent, pugi::xml_node parentNode, EditorialLevel level, Object *filter) @@ -6667,14 +6667,14 @@ bool MEIInput::ReadAppChildren(Object *parent, pugi::xml_node parentNode, Editor for (current = parentNode.first_child(); current; current = current.next_sibling()) { if (!success) break; if (std::string(current.name()) == "lem") { - success = ReadLem(parent, current, level, filter); + success = this->ReadLem(parent, current, level, filter); } else if (std::string(current.name()) == "rdg") { - success = ReadRdg(parent, current, level, filter); + success = this->ReadRdg(parent, current, level, filter); } // xml comment else if (std::string(current.name()) == "") { - success = ReadXMLComment(parent, current); + success = this->ReadXMLComment(parent, current); } else { LogWarning("Unsupported '<%s>' within ", current.name()); @@ -6710,11 +6710,11 @@ bool MEIInput::ReadChoice(Object *parent, pugi::xml_node choice, EditorialLevel return false; } Choice *vrvChoice = new Choice(level); - ReadEditorialElement(choice, vrvChoice); + this->ReadEditorialElement(choice, vrvChoice); parent->AddChild(vrvChoice); - ReadUnsupportedAttr(choice, vrvChoice); - return ReadChoiceChildren(vrvChoice, choice, level, filter); + this->ReadUnsupportedAttr(choice, vrvChoice); + return this->ReadChoiceChildren(vrvChoice, choice, level, filter); } bool MEIInput::ReadChoiceChildren(Object *parent, pugi::xml_node parentNode, EditorialLevel level, Object *filter) @@ -6738,35 +6738,35 @@ bool MEIInput::ReadChoiceChildren(Object *parent, pugi::xml_node parentNode, Edi for (current = parentNode.first_child(); current; current = current.next_sibling()) { if (!success) break; if (std::string(current.name()) == "abbr") { - success = ReadAbbr(parent, current, level, filter); + success = this->ReadAbbr(parent, current, level, filter); } else if (std::string(current.name()) == "choice") { - success = ReadChoice(parent, current, level, filter); + success = this->ReadChoice(parent, current, level, filter); } else if (std::string(current.name()) == "corr") { - success = ReadCorr(parent, current, level, filter); + success = this->ReadCorr(parent, current, level, filter); } else if (std::string(current.name()) == "expan") { - success = ReadExpan(parent, current, level, filter); + success = this->ReadExpan(parent, current, level, filter); } else if (std::string(current.name()) == "orig") { - success = ReadOrig(parent, current, level, filter); + success = this->ReadOrig(parent, current, level, filter); } else if (std::string(current.name()) == "ref") { - success = ReadRef(parent, current, level, filter); + success = this->ReadRef(parent, current, level, filter); } else if (std::string(current.name()) == "reg") { - success = ReadReg(parent, current, level, filter); + success = this->ReadReg(parent, current, level, filter); } else if (std::string(current.name()) == "sic") { - success = ReadSic(parent, current, level, filter); + success = this->ReadSic(parent, current, level, filter); } else if (std::string(current.name()) == "unclear") { - success = ReadUnclear(parent, current, level, filter); + success = this->ReadUnclear(parent, current, level, filter); } // xml comment else if (std::string(current.name()) == "") { - success = ReadXMLComment(parent, current); + success = this->ReadXMLComment(parent, current); } else { LogWarning("Unsupported '<%s>' within ", current.name()); @@ -6801,49 +6801,49 @@ bool MEIInput::ReadChoiceChildren(Object *parent, pugi::xml_node parentNode, Edi bool MEIInput::ReadCorr(Object *parent, pugi::xml_node corr, EditorialLevel level, Object *filter) { Corr *vrvCorr = new Corr(); - ReadEditorialElement(corr, vrvCorr); + this->ReadEditorialElement(corr, vrvCorr); vrvCorr->ReadSource(corr); parent->AddChild(vrvCorr); - ReadUnsupportedAttr(corr, vrvCorr); - return ReadEditorialChildren(vrvCorr, corr, level, filter); + this->ReadUnsupportedAttr(corr, vrvCorr); + return this->ReadEditorialChildren(vrvCorr, corr, level, filter); } bool MEIInput::ReadDamage(Object *parent, pugi::xml_node damage, EditorialLevel level, Object *filter) { Damage *vrvDamage = new Damage(); - ReadEditorialElement(damage, vrvDamage); + this->ReadEditorialElement(damage, vrvDamage); vrvDamage->ReadSource(damage); parent->AddChild(vrvDamage); - ReadUnsupportedAttr(damage, vrvDamage); - return ReadEditorialChildren(vrvDamage, damage, level, filter); + this->ReadUnsupportedAttr(damage, vrvDamage); + return this->ReadEditorialChildren(vrvDamage, damage, level, filter); } bool MEIInput::ReadDel(Object *parent, pugi::xml_node del, EditorialLevel level, Object *filter) { Del *vrvDel = new Del(); - ReadEditorialElement(del, vrvDel); + this->ReadEditorialElement(del, vrvDel); vrvDel->ReadSource(del); parent->AddChild(vrvDel); - ReadUnsupportedAttr(del, vrvDel); - return ReadEditorialChildren(vrvDel, del, level, filter); + this->ReadUnsupportedAttr(del, vrvDel); + return this->ReadEditorialChildren(vrvDel, del, level, filter); } bool MEIInput::ReadExpan(Object *parent, pugi::xml_node expan, EditorialLevel level, Object *filter) { Expan *vrvExpan = new Expan(); - ReadEditorialElement(expan, vrvExpan); + this->ReadEditorialElement(expan, vrvExpan); vrvExpan->ReadSource(expan); parent->AddChild(vrvExpan); - ReadUnsupportedAttr(expan, vrvExpan); - return ReadEditorialChildren(vrvExpan, expan, level, filter); + this->ReadUnsupportedAttr(expan, vrvExpan); + return this->ReadEditorialChildren(vrvExpan, expan, level, filter); } bool MEIInput::ReadLem(Object *parent, pugi::xml_node lem, EditorialLevel level, Object *filter) @@ -6853,25 +6853,25 @@ bool MEIInput::ReadLem(Object *parent, pugi::xml_node lem, EditorialLevel level, Lem *vrvLem = new Lem(); // By default make them all hidden. MEIInput::ReadAppChildren will make one visible. vrvLem->m_visibility = Hidden; - ReadEditorialElement(lem, vrvLem); + this->ReadEditorialElement(lem, vrvLem); vrvLem->ReadSource(lem); parent->AddChild(vrvLem); - ReadUnsupportedAttr(lem, vrvLem); - return ReadEditorialChildren(vrvLem, lem, level, filter); + this->ReadUnsupportedAttr(lem, vrvLem); + return this->ReadEditorialChildren(vrvLem, lem, level, filter); } bool MEIInput::ReadOrig(Object *parent, pugi::xml_node orig, EditorialLevel level, Object *filter) { Orig *vrvOrig = new Orig(); - ReadEditorialElement(orig, vrvOrig); + this->ReadEditorialElement(orig, vrvOrig); vrvOrig->ReadSource(orig); parent->AddChild(vrvOrig); - ReadUnsupportedAttr(orig, vrvOrig); - return ReadEditorialChildren(vrvOrig, orig, level, filter); + this->ReadUnsupportedAttr(orig, vrvOrig); + return this->ReadEditorialChildren(vrvOrig, orig, level, filter); } bool MEIInput::ReadRdg(Object *parent, pugi::xml_node rdg, EditorialLevel level, Object *filter) @@ -6881,59 +6881,59 @@ bool MEIInput::ReadRdg(Object *parent, pugi::xml_node rdg, EditorialLevel level, Rdg *vrvRdg = new Rdg(); // By default make them all hidden. MEIInput::ReadAppChildren will make one visible. vrvRdg->m_visibility = Hidden; - ReadEditorialElement(rdg, vrvRdg); + this->ReadEditorialElement(rdg, vrvRdg); vrvRdg->ReadSource(rdg); parent->AddChild(vrvRdg); - ReadUnsupportedAttr(rdg, vrvRdg); - return ReadEditorialChildren(vrvRdg, rdg, level, filter); + this->ReadUnsupportedAttr(rdg, vrvRdg); + return this->ReadEditorialChildren(vrvRdg, rdg, level, filter); } bool MEIInput::ReadRef(Object *parent, pugi::xml_node ref, EditorialLevel level, Object *filter) { Ref *vrvRef = new Ref(); - ReadEditorialElement(ref, vrvRef); + this->ReadEditorialElement(ref, vrvRef); parent->AddChild(vrvRef); - ReadUnsupportedAttr(ref, vrvRef); - return ReadEditorialChildren(vrvRef, ref, level, filter); + this->ReadUnsupportedAttr(ref, vrvRef); + return this->ReadEditorialChildren(vrvRef, ref, level, filter); } bool MEIInput::ReadReg(Object *parent, pugi::xml_node reg, EditorialLevel level, Object *filter) { Reg *vrvReg = new Reg(); - ReadEditorialElement(reg, vrvReg); + this->ReadEditorialElement(reg, vrvReg); vrvReg->ReadSource(reg); parent->AddChild(vrvReg); - ReadUnsupportedAttr(reg, vrvReg); - return ReadEditorialChildren(vrvReg, reg, level, filter); + this->ReadUnsupportedAttr(reg, vrvReg); + return this->ReadEditorialChildren(vrvReg, reg, level, filter); } bool MEIInput::ReadRestore(Object *parent, pugi::xml_node restore, EditorialLevel level, Object *filter) { Restore *vrvRestore = new Restore(); - ReadEditorialElement(restore, vrvRestore); + this->ReadEditorialElement(restore, vrvRestore); vrvRestore->ReadSource(restore); parent->AddChild(vrvRestore); - ReadUnsupportedAttr(restore, vrvRestore); - return ReadEditorialChildren(vrvRestore, restore, level, filter); + this->ReadUnsupportedAttr(restore, vrvRestore); + return this->ReadEditorialChildren(vrvRestore, restore, level, filter); } bool MEIInput::ReadSic(Object *parent, pugi::xml_node sic, EditorialLevel level, Object *filter) { Sic *vrvSic = new Sic(); - ReadEditorialElement(sic, vrvSic); + this->ReadEditorialElement(sic, vrvSic); vrvSic->ReadSource(sic); parent->AddChild(vrvSic); - ReadUnsupportedAttr(sic, vrvSic); - return ReadEditorialChildren(vrvSic, sic, level, filter); + this->ReadUnsupportedAttr(sic, vrvSic); + return this->ReadEditorialChildren(vrvSic, sic, level, filter); } bool MEIInput::ReadSubst(Object *parent, pugi::xml_node subst, EditorialLevel level, Object *filter) @@ -6943,11 +6943,11 @@ bool MEIInput::ReadSubst(Object *parent, pugi::xml_node subst, EditorialLevel le return false; } Subst *vrvSubst = new Subst(level); - ReadEditorialElement(subst, vrvSubst); + this->ReadEditorialElement(subst, vrvSubst); parent->AddChild(vrvSubst); - ReadUnsupportedAttr(subst, vrvSubst); - return ReadSubstChildren(vrvSubst, subst, level, filter); + this->ReadUnsupportedAttr(subst, vrvSubst); + return this->ReadSubstChildren(vrvSubst, subst, level, filter); } bool MEIInput::ReadSubstChildren(Object *parent, pugi::xml_node parentNode, EditorialLevel level, Object *filter) @@ -6971,17 +6971,17 @@ bool MEIInput::ReadSubstChildren(Object *parent, pugi::xml_node parentNode, Edit for (current = parentNode.first_child(); current; current = current.next_sibling()) { if (!success) break; if (std::string(current.name()) == "add") { - success = ReadAdd(parent, current, level, filter); + success = this->ReadAdd(parent, current, level, filter); } else if (std::string(current.name()) == "del") { - success = ReadDel(parent, current, level, filter); + success = this->ReadDel(parent, current, level, filter); } else if (std::string(current.name()) == "subst") { - success = ReadSubst(parent, current, level, filter); + success = this->ReadSubst(parent, current, level, filter); } // xml comment else if (std::string(current.name()) == "") { - success = ReadXMLComment(parent, current); + success = this->ReadXMLComment(parent, current); } else { LogWarning("Unsupported '<%s>' within ", current.name()); @@ -7016,25 +7016,25 @@ bool MEIInput::ReadSubstChildren(Object *parent, pugi::xml_node parentNode, Edit bool MEIInput::ReadSupplied(Object *parent, pugi::xml_node supplied, EditorialLevel level, Object *filter) { Supplied *vrvSupplied = new Supplied(); - ReadEditorialElement(supplied, vrvSupplied); + this->ReadEditorialElement(supplied, vrvSupplied); vrvSupplied->ReadSource(supplied); parent->AddChild(vrvSupplied); - ReadUnsupportedAttr(supplied, vrvSupplied); - return ReadEditorialChildren(vrvSupplied, supplied, level, filter); + this->ReadUnsupportedAttr(supplied, vrvSupplied); + return this->ReadEditorialChildren(vrvSupplied, supplied, level, filter); } bool MEIInput::ReadUnclear(Object *parent, pugi::xml_node unclear, EditorialLevel level, Object *filter) { Unclear *vrvUnclear = new Unclear(); - ReadEditorialElement(unclear, vrvUnclear); + this->ReadEditorialElement(unclear, vrvUnclear); vrvUnclear->ReadSource(unclear); parent->AddChild(vrvUnclear); - ReadUnsupportedAttr(unclear, vrvUnclear); - return ReadEditorialChildren(vrvUnclear, unclear, level, filter); + this->ReadUnsupportedAttr(unclear, vrvUnclear); + return this->ReadEditorialChildren(vrvUnclear, unclear, level, filter); } bool MEIInput::ReadEditorialChildren(Object *parent, pugi::xml_node parentNode, EditorialLevel level, Object *filter) @@ -7043,33 +7043,33 @@ bool MEIInput::ReadEditorialChildren(Object *parent, pugi::xml_node parentNode, if (level == EDITORIAL_TOPLEVEL) { if (m_readingScoreBased) - return ReadSectionChildren(parent, parentNode); + return this->ReadSectionChildren(parent, parentNode); else - return ReadSystemChildren(parent, parentNode); + return this->ReadSystemChildren(parent, parentNode); } else if (level == EDITORIAL_SCOREDEF) { - return ReadScoreDefChildren(parent, parentNode); + return this->ReadScoreDefChildren(parent, parentNode); } else if (level == EDITORIAL_STAFFGRP) { - return ReadStaffGrpChildren(parent, parentNode); + return this->ReadStaffGrpChildren(parent, parentNode); } else if (level == EDITORIAL_MEASURE) { - return ReadMeasureChildren(parent, parentNode); + return this->ReadMeasureChildren(parent, parentNode); } else if (level == EDITORIAL_STAFF) { - return ReadStaffChildren(parent, parentNode); + return this->ReadStaffChildren(parent, parentNode); } else if (level == EDITORIAL_LAYER) { - return ReadLayerChildren(parent, parentNode, filter); + return this->ReadLayerChildren(parent, parentNode, filter); } else if (level == EDITORIAL_TEXT) { - return ReadTextChildren(parent, parentNode, filter); + return this->ReadTextChildren(parent, parentNode, filter); } else if (level == EDITORIAL_FB) { - return ReadFbChildren(parent, parentNode); + return this->ReadFbChildren(parent, parentNode); } else if (level == EDITORIAL_RUNNING) { - return ReadRunningChildren(parent, parentNode, filter); + return this->ReadRunningChildren(parent, parentNode, filter); } else { return false; @@ -7084,7 +7084,7 @@ bool MEIInput::ReadBeamSpanAsBeam(Measure *measure, pugi::xml_node beamSpan) } Beam *beam = new Beam(); - SetMeiUuid(beamSpan, beam); + this->SetMeiUuid(beamSpan, beam); LayerElement *start = NULL; LayerElement *end = NULL; @@ -7161,7 +7161,7 @@ bool MEIInput::ReadTupletSpanAsTuplet(Measure *measure, pugi::xml_node tupletSpa } Tuplet *tuplet = new Tuplet(); - SetMeiUuid(tupletSpan, tuplet); + this->SetMeiUuid(tupletSpan, tuplet); LayerElement *start = NULL; LayerElement *end = NULL; @@ -7574,13 +7574,13 @@ bool MEIInput::ReadSurface(Facsimile *parent, pugi::xml_node surface) { assert(parent); Surface *vrvSurface = new Surface(); - SetMeiUuid(surface, vrvSurface); + this->SetMeiUuid(surface, vrvSurface); vrvSurface->ReadCoordinated(surface); vrvSurface->ReadTyped(surface); for (pugi::xml_node child = surface.first_child(); child; child = child.next_sibling()) { if (strcmp(child.name(), "zone") == 0) { - ReadZone(vrvSurface, child); + this->ReadZone(vrvSurface, child); } else { LogWarning("Unsupported element <%s> in ", child.name()); @@ -7594,7 +7594,7 @@ bool MEIInput::ReadZone(Surface *parent, pugi::xml_node zone) { assert(parent); Zone *vrvZone = new Zone(); - SetMeiUuid(zone, vrvZone); + this->SetMeiUuid(zone, vrvZone); vrvZone->ReadCoordinated(zone); vrvZone->ReadTyped(zone); parent->AddChild(vrvZone); @@ -7606,11 +7606,11 @@ bool MEIInput::ReadFacsimile(Doc *doc, pugi::xml_node facsimile) assert(doc); Facsimile *vrvFacsimile = new Facsimile(); // Read xmlId (if present) - SetMeiUuid(facsimile, vrvFacsimile); + this->SetMeiUuid(facsimile, vrvFacsimile); // Read children for (pugi::xml_node child = facsimile.first_child(); child; child = child.next_sibling()) { if (strcmp(child.name(), "surface") == 0) { - ReadSurface(vrvFacsimile, child); + this->ReadSurface(vrvFacsimile, child); } else { LogWarning("Unsupported element <%s> in ", child.name()); diff --git a/src/iopae.cpp b/src/iopae.cpp index d143b2e8ccd..16c2aa02434 100644 --- a/src/iopae.cpp +++ b/src/iopae.cpp @@ -86,71 +86,71 @@ bool PAEOutput::Export(std::string &output) bool PAEOutput::WriteObject(Object *object) { if (object->Is(MDIV)) { - WriteMdiv(dynamic_cast(object)); + this->WriteMdiv(dynamic_cast(object)); } if (object->Is(SCOREDEF)) { - WriteScoreDef(dynamic_cast(object)); + this->WriteScoreDef(dynamic_cast(object)); } else if (object->Is(STAFFDEF)) { - WriteStaffDef(dynamic_cast(object)); + this->WriteStaffDef(dynamic_cast(object)); } else if (object->Is(MEASURE)) { - WriteMeasure(dynamic_cast(object)); + this->WriteMeasure(dynamic_cast(object)); } else if (object->Is(STAFF)) { - WriteStaff(dynamic_cast(object)); + this->WriteStaff(dynamic_cast(object)); } else if (object->Is(LAYER)) { - WriteLayer(dynamic_cast(object)); + this->WriteLayer(dynamic_cast(object)); } // Measure elements // Layer elements else if (object->Is(BARLINE)) { - WriteBarLine(dynamic_cast(object)); + this->WriteBarLine(dynamic_cast(object)); } else if (object->Is(BEAM)) { - WriteBeam(dynamic_cast(object)); + this->WriteBeam(dynamic_cast(object)); } else if (object->Is(CHORD)) { - WriteChord(dynamic_cast(object)); + this->WriteChord(dynamic_cast(object)); } else if (object->Is(CLEF)) { - WriteClef(dynamic_cast(object)); + this->WriteClef(dynamic_cast(object)); } else if (object->Is(GRACEGRP)) { - WriteGraceGrp(dynamic_cast(object)); + this->WriteGraceGrp(dynamic_cast(object)); } else if (object->Is(KEYACCID)) { - WriteKeyAccid(dynamic_cast(object)); + this->WriteKeyAccid(dynamic_cast(object)); } else if (object->Is(KEYSIG)) { - WriteKeySig(dynamic_cast(object)); + this->WriteKeySig(dynamic_cast(object)); } else if (object->Is(MENSUR)) { - WriteMensur(dynamic_cast(object)); + this->WriteMensur(dynamic_cast(object)); } else if (object->Is(METERSIG)) { - WriteMeterSig(dynamic_cast(object)); + this->WriteMeterSig(dynamic_cast(object)); } else if (object->Is(MREST)) { - WriteMRest(dynamic_cast(object)); + this->WriteMRest(dynamic_cast(object)); } else if (object->Is(MULTIREST)) { - WriteMultiRest(dynamic_cast(object)); + this->WriteMultiRest(dynamic_cast(object)); } else if (object->Is(NOTE)) { - WriteNote(dynamic_cast(object)); + this->WriteNote(dynamic_cast(object)); } else if (object->Is(REST)) { - WriteRest(dynamic_cast(object)); + this->WriteRest(dynamic_cast(object)); } else if (object->Is(SPACE)) { - WriteSpace(dynamic_cast(object)); + this->WriteSpace(dynamic_cast(object)); } else if (object->Is(TUPLET)) { - WriteTuplet(dynamic_cast(object)); + this->WriteTuplet(dynamic_cast(object)); } else { // Log something? @@ -162,13 +162,13 @@ bool PAEOutput::WriteObject(Object *object) bool PAEOutput::WriteObjectEnd(Object *object) { if (object->Is(MEASURE)) { - WriteMeasureEnd(dynamic_cast(object)); + this->WriteMeasureEnd(dynamic_cast(object)); } else if (object->Is(BEAM)) { - WriteBeamEnd(dynamic_cast(object)); + this->WriteBeamEnd(dynamic_cast(object)); } else if (object->Is(TUPLET)) { - WriteTupletEnd(dynamic_cast(object)); + this->WriteTupletEnd(dynamic_cast(object)); } return true; @@ -300,8 +300,8 @@ void PAEOutput::WriteChord(Chord *chord) std::string oct; - WriteDur(chord); - WriteGrace(chord); + this->WriteDur(chord); + this->WriteGrace(chord); } void PAEOutput::WriteClef(Clef *clef) @@ -427,8 +427,8 @@ void PAEOutput::WriteNote(Note *note) if (note != chord->GetTopNote()) return; } else { - WriteDur(note); - WriteGrace(note); + this->WriteDur(note); + this->WriteGrace(note); } if (note->GetOct() != m_currentOct) { @@ -479,7 +479,7 @@ void PAEOutput::WriteRest(Rest *rest) if (m_skip) return; - WriteDur(rest); + this->WriteDur(rest); m_streamStringOutput << "-"; } @@ -489,7 +489,7 @@ void PAEOutput::WriteSpace(Space *space) if (m_skip) return; - WriteDur(space); + this->WriteDur(space); // Simply make it a rest - no other option in PAE m_streamStringOutput << "-"; } @@ -3368,7 +3368,7 @@ bool PAEInput::ConvertPitch() for (auto &token : m_pae) { if (token.IsVoid()) continue; - if (Is(token, pae::NOTENAME)) { + if (this->Is(token, pae::NOTENAME)) { Note *note = new Note(); data_PITCHNAME pitch = PITCHNAME_c; switch (token.m_char) { @@ -3544,7 +3544,7 @@ bool PAEInput::ConvertAccidental() for (auto &token : m_pae) { if (token.IsVoid()) continue; - if (Is(token, pae::ACCIDENTAL_INTERNAL)) { + if (this->Is(token, pae::ACCIDENTAL_INTERNAL)) { switch (token.m_char) { case 'x': accidental = ACCIDENTAL_WRITTEN_s; break; case 'b': accidental = ACCIDENTAL_WRITTEN_f; break; diff --git a/src/keyaccid.cpp b/src/keyaccid.cpp index 7159b84e375..0d16ca5f373 100644 --- a/src/keyaccid.cpp +++ b/src/keyaccid.cpp @@ -34,12 +34,12 @@ KeyAccid::KeyAccid() : LayerElement(KEYACCID, "keyaccid-"), PitchInterface(), AttAccidental(), AttColor(), AttEnclosingChars() { - RegisterInterface(PitchInterface::GetAttClasses(), PitchInterface::IsInterface()); - RegisterAttClass(ATT_ACCIDENTAL); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_ENCLOSINGCHARS); + this->RegisterInterface(PitchInterface::GetAttClasses(), PitchInterface::IsInterface()); + this->RegisterAttClass(ATT_ACCIDENTAL); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_ENCLOSINGCHARS); - Reset(); + this->Reset(); } KeyAccid::~KeyAccid() {} @@ -48,9 +48,9 @@ void KeyAccid::Reset() { LayerElement::Reset(); PitchInterface::Reset(); - ResetAccidental(); - ResetColor(); - ResetEnclosingChars(); + this->ResetAccidental(); + this->ResetColor(); + this->ResetEnclosingChars(); } bool KeySig::IsSupportedChild(Object *child) diff --git a/src/keysig.cpp b/src/keysig.cpp index 260a54d6c9a..419c55eaecd 100644 --- a/src/keysig.cpp +++ b/src/keysig.cpp @@ -78,14 +78,14 @@ KeySig::KeySig() , AttKeySigVis() , AttVisibility() { - RegisterAttClass(ATT_ACCIDENTAL); - RegisterAttClass(ATT_PITCH); - RegisterAttClass(ATT_KEYSIGANL); - RegisterAttClass(ATT_KEYSIGLOG); - RegisterAttClass(ATT_KEYSIGVIS); - RegisterAttClass(ATT_VISIBILITY); - - Reset(); + this->RegisterAttClass(ATT_ACCIDENTAL); + this->RegisterAttClass(ATT_PITCH); + this->RegisterAttClass(ATT_KEYSIGANL); + this->RegisterAttClass(ATT_KEYSIGLOG); + this->RegisterAttClass(ATT_KEYSIGVIS); + this->RegisterAttClass(ATT_VISIBILITY); + + this->Reset(); } KeySig::~KeySig() {} @@ -93,12 +93,12 @@ KeySig::~KeySig() {} void KeySig::Reset() { LayerElement::Reset(); - ResetAccidental(); - ResetPitch(); - ResetKeySigAnl(); - ResetKeySigLog(); - ResetKeySigVis(); - ResetVisibility(); + this->ResetAccidental(); + this->ResetPitch(); + this->ResetKeySigAnl(); + this->ResetKeySigLog(); + this->ResetKeySigVis(); + this->ResetVisibility(); m_mixedChildrenAccidType = false; diff --git a/src/label.cpp b/src/label.cpp index f03180e3d3e..1008ff814d0 100644 --- a/src/label.cpp +++ b/src/label.cpp @@ -27,7 +27,7 @@ static const ClassRegistrar
s_factory("section", SECTION); Section::Section() : SystemElement(SECTION, "section-"), SystemMilestoneInterface(), AttNNumberLike(), AttSectionVis() { - RegisterAttClass(ATT_NNUMBERLIKE); - RegisterAttClass(ATT_SECTIONVIS); + this->RegisterAttClass(ATT_NNUMBERLIKE); + this->RegisterAttClass(ATT_SECTIONVIS); - Reset(); + this->Reset(); } Section::~Section() {} @@ -46,8 +46,8 @@ void Section::Reset() { SystemElement::Reset(); SystemMilestoneInterface::Reset(); - ResetNNumberLike(); - ResetSectionVis(); + this->ResetNNumberLike(); + this->ResetSectionVis(); } bool Section::IsSupportedChild(Object *child) diff --git a/src/sic.cpp b/src/sic.cpp index db95cbd2890..21e0e5162ab 100644 --- a/src/sic.cpp +++ b/src/sic.cpp @@ -25,9 +25,9 @@ static const ClassRegistrar s_factory("sic", SIC); Sic::Sic() : EditorialElement(SIC, "sic-"), AttSource() { - RegisterAttClass(ATT_SOURCE); + this->RegisterAttClass(ATT_SOURCE); - Reset(); + this->Reset(); } Sic::~Sic() {} @@ -35,7 +35,7 @@ Sic::~Sic() {} void Sic::Reset() { EditorialElement::Reset(); - ResetSource(); + this->ResetSource(); } //---------------------------------------------------------------------------- diff --git a/src/slur.cpp b/src/slur.cpp index 0c0235715d4..93c0b18dad7 100644 --- a/src/slur.cpp +++ b/src/slur.cpp @@ -45,13 +45,13 @@ Slur::Slur() , AttCurveRend() , AttLayerIdent() { - RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_CURVATURE); - RegisterAttClass(ATT_CURVEREND); - RegisterAttClass(ATT_LAYERIDENT); + this->RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_CURVATURE); + this->RegisterAttClass(ATT_CURVEREND); + this->RegisterAttClass(ATT_LAYERIDENT); - Reset(); + this->Reset(); } Slur::Slur(ClassId classId) @@ -62,13 +62,13 @@ Slur::Slur(ClassId classId) , AttCurveRend() , AttLayerIdent() { - RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_CURVATURE); - RegisterAttClass(ATT_CURVEREND); - RegisterAttClass(ATT_LAYERIDENT); + this->RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_CURVATURE); + this->RegisterAttClass(ATT_CURVEREND); + this->RegisterAttClass(ATT_LAYERIDENT); - Reset(); + this->Reset(); } Slur::Slur(ClassId classId, const std::string &classIdStr) @@ -79,13 +79,13 @@ Slur::Slur(ClassId classId, const std::string &classIdStr) , AttCurveRend() , AttLayerIdent() { - RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_CURVATURE); - RegisterAttClass(ATT_CURVEREND); - RegisterAttClass(ATT_LAYERIDENT); + this->RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_CURVATURE); + this->RegisterAttClass(ATT_CURVEREND); + this->RegisterAttClass(ATT_LAYERIDENT); - Reset(); + this->Reset(); } Slur::~Slur() {} @@ -94,10 +94,10 @@ void Slur::Reset() { ControlElement::Reset(); TimeSpanningInterface::Reset(); - ResetColor(); - ResetCurvature(); - ResetCurveRend(); - ResetLayerIdent(); + this->ResetColor(); + this->ResetCurvature(); + this->ResetCurveRend(); + this->ResetLayerIdent(); m_drawingCurvedir = curvature_CURVEDIR_NONE; } diff --git a/src/space.cpp b/src/space.cpp index 49e7a3b18b3..42a1f321dca 100644 --- a/src/space.cpp +++ b/src/space.cpp @@ -27,9 +27,9 @@ static const ClassRegistrar s_factory("space", SPACE); Space::Space() : LayerElement(SPACE, "space-"), DurationInterface() { - RegisterInterface(DurationInterface::GetAttClasses(), DurationInterface::IsInterface()); + this->RegisterInterface(DurationInterface::GetAttClasses(), DurationInterface::IsInterface()); - Reset(); + this->Reset(); } Space::~Space() {} diff --git a/src/staff.cpp b/src/staff.cpp index 7ddeb69176b..8aad8981e79 100644 --- a/src/staff.cpp +++ b/src/staff.cpp @@ -44,14 +44,14 @@ static const ClassRegistrar s_factory("staff", STAFF); Staff::Staff(int n) : Object(STAFF, "staff-"), FacsimileInterface(), AttCoordY1(), AttNInteger(), AttTyped(), AttVisibility() { - RegisterAttClass(ATT_COORDY1); - RegisterAttClass(ATT_NINTEGER); - RegisterAttClass(ATT_TYPED); - RegisterAttClass(ATT_VISIBILITY); - RegisterInterface(FacsimileInterface::GetAttClasses(), FacsimileInterface::IsInterface()); + this->RegisterAttClass(ATT_COORDY1); + this->RegisterAttClass(ATT_NINTEGER); + this->RegisterAttClass(ATT_TYPED); + this->RegisterAttClass(ATT_VISIBILITY); + this->RegisterInterface(FacsimileInterface::GetAttClasses(), FacsimileInterface::IsInterface()); - Reset(); - SetN(n); + this->Reset(); + this->SetN(n); } Staff::~Staff() {} @@ -60,10 +60,10 @@ void Staff::Reset() { Object::Reset(); FacsimileInterface::Reset(); - ResetCoordY1(); - ResetNInteger(); - ResetTyped(); - ResetVisibility(); + this->ResetCoordY1(); + this->ResetNInteger(); + this->ResetTyped(); + this->ResetVisibility(); m_yAbs = VRV_UNSET; @@ -383,7 +383,7 @@ int Staff::GetNearestInterStaffPosition(int y, Doc *doc, data_STAFFREL place) LedgerLine::LedgerLine() { - Reset(); + this->Reset(); } LedgerLine::~LedgerLine() {} @@ -525,7 +525,7 @@ int Staff::AlignHorizontally(FunctorParams *functorParams) else { params->m_notationType = NOTATIONTYPE_cmn; } - Measure *parentMeasure = vrv_cast(GetFirstAncestor(MEASURE)); + Measure *parentMeasure = vrv_cast(this->GetFirstAncestor(MEASURE)); if (parentMeasure) m_drawingStaffDef->AlternateCurrentMeterSig(parentMeasure); return FUNCTOR_CONTINUE; diff --git a/src/staffdef.cpp b/src/staffdef.cpp index d0609cf871f..50b547b910c 100644 --- a/src/staffdef.cpp +++ b/src/staffdef.cpp @@ -42,17 +42,17 @@ StaffDef::StaffDef() , AttTimeBase() , AttTransposition() { - RegisterAttClass(ATT_DISTANCES); - RegisterAttClass(ATT_LABELLED); - RegisterAttClass(ATT_NINTEGER); - RegisterAttClass(ATT_NOTATIONTYPE); - RegisterAttClass(ATT_SCALABLE); - RegisterAttClass(ATT_STAFFDEFLOG); - RegisterAttClass(ATT_STAFFDEFVIS); - RegisterAttClass(ATT_TIMEBASE); - RegisterAttClass(ATT_TRANSPOSITION); - - Reset(); + this->RegisterAttClass(ATT_DISTANCES); + this->RegisterAttClass(ATT_LABELLED); + this->RegisterAttClass(ATT_NINTEGER); + this->RegisterAttClass(ATT_NOTATIONTYPE); + this->RegisterAttClass(ATT_SCALABLE); + this->RegisterAttClass(ATT_STAFFDEFLOG); + this->RegisterAttClass(ATT_STAFFDEFVIS); + this->RegisterAttClass(ATT_TIMEBASE); + this->RegisterAttClass(ATT_TRANSPOSITION); + + this->Reset(); } StaffDef::~StaffDef() {} @@ -61,15 +61,15 @@ void StaffDef::Reset() { ScoreDefElement::Reset(); StaffDefDrawingInterface::Reset(); - ResetDistances(); - ResetLabelled(); - ResetNInteger(); - ResetNotationType(); - ResetScalable(); - ResetStaffDefLog(); - ResetStaffDefVis(); - ResetTimeBase(); - ResetTransposition(); + this->ResetDistances(); + this->ResetLabelled(); + this->ResetNInteger(); + this->ResetNotationType(); + this->ResetScalable(); + this->ResetStaffDefLog(); + this->ResetStaffDefVis(); + this->ResetTimeBase(); + this->ResetTransposition(); m_drawingVisibility = OPTIMIZATION_NONE; } diff --git a/src/staffgrp.cpp b/src/staffgrp.cpp index 3856a8e92e0..262e8779e7b 100644 --- a/src/staffgrp.cpp +++ b/src/staffgrp.cpp @@ -39,14 +39,14 @@ StaffGrp::StaffGrp() , AttStaffGrpVis() , AttTyped() { - RegisterAttClass(ATT_BASIC); - RegisterAttClass(ATT_LABELLED); - RegisterAttClass(ATT_NNUMBERLIKE); - RegisterAttClass(ATT_STAFFGROUPINGSYM); - RegisterAttClass(ATT_STAFFGRPVIS); - RegisterAttClass(ATT_TYPED); - - Reset(); + this->RegisterAttClass(ATT_BASIC); + this->RegisterAttClass(ATT_LABELLED); + this->RegisterAttClass(ATT_NNUMBERLIKE); + this->RegisterAttClass(ATT_STAFFGROUPINGSYM); + this->RegisterAttClass(ATT_STAFFGRPVIS); + this->RegisterAttClass(ATT_TYPED); + + this->Reset(); } StaffGrp::~StaffGrp() {} @@ -54,12 +54,12 @@ StaffGrp::~StaffGrp() {} void StaffGrp::Reset() { Object::Reset(); - ResetBasic(); - ResetLabelled(); - ResetNNumberLike(); - ResetStaffGroupingSym(); - ResetStaffGrpVis(); - ResetTyped(); + this->ResetBasic(); + this->ResetLabelled(); + this->ResetNNumberLike(); + this->ResetStaffGroupingSym(); + this->ResetStaffGrpVis(); + this->ResetTyped(); m_drawingVisibility = OPTIMIZATION_NONE; m_groupSymbol = NULL; @@ -135,7 +135,7 @@ int StaffGrp::GetMaxStaffSize() std::pair StaffGrp::GetFirstLastStaffDef() { - const ArrayOfObjects *staffDefs = GetList(this); + const ArrayOfObjects *staffDefs = this->GetList(this); if (staffDefs->empty()) { return { NULL, NULL }; } diff --git a/src/subst.cpp b/src/subst.cpp index e5e729ebae8..b372fe0c1c6 100644 --- a/src/subst.cpp +++ b/src/subst.cpp @@ -29,14 +29,14 @@ Subst::Subst() : EditorialElement(SUBST, "subst-") { m_level = EDITORIAL_UNDEFINED; - Reset(); + this->Reset(); } Subst::Subst(EditorialLevel level) : EditorialElement(SUBST, "subst-") { m_level = level; - Reset(); + this->Reset(); } void Subst::Reset() diff --git a/src/supplied.cpp b/src/supplied.cpp index 82ec63674ee..606483427fb 100644 --- a/src/supplied.cpp +++ b/src/supplied.cpp @@ -25,9 +25,9 @@ static const ClassRegistrar s_factory("supplied", SUPPLIED); Supplied::Supplied() : EditorialElement(SUPPLIED, "supplied-"), AttSource() { - RegisterAttClass(ATT_SOURCE); + this->RegisterAttClass(ATT_SOURCE); - Reset(); + this->Reset(); } Supplied::~Supplied() {} @@ -35,7 +35,7 @@ Supplied::~Supplied() {} void Supplied::Reset() { EditorialElement::Reset(); - ResetSource(); + this->ResetSource(); } //---------------------------------------------------------------------------- diff --git a/src/surface.cpp b/src/surface.cpp index 537d96f2999..8afaa6ae41d 100644 --- a/src/surface.cpp +++ b/src/surface.cpp @@ -29,17 +29,17 @@ static const ClassRegistrar s_factory("surface", SURFACE); Surface::Surface() : Object(SURFACE, "surface-"), AttTyped(), AttCoordinated() { - RegisterAttClass(ATT_TYPED); - RegisterAttClass(ATT_COORDINATED); - Reset(); + this->RegisterAttClass(ATT_TYPED); + this->RegisterAttClass(ATT_COORDINATED); + this->Reset(); } Surface::~Surface() {} void Surface::Reset() { - ResetTyped(); - ResetCoordinated(); + this->ResetTyped(); + this->ResetCoordinated(); } bool Surface::IsSupportedChild(Object *object) @@ -57,7 +57,7 @@ bool Surface::IsSupportedChild(Object *object) int Surface::GetMaxX() { - if (HasLrx()) return GetLrx(); + if (this->HasLrx()) return this->GetLrx(); int max = 0; ListOfObjects zones = this->FindAllDescendantsByType(ZONE); for (auto iter = zones.begin(); iter != zones.end(); ++iter) { @@ -70,7 +70,7 @@ int Surface::GetMaxX() int Surface::GetMaxY() { - if (HasLry()) return GetLry(); + if (this->HasLry()) return this->GetLry(); int max = 0; ListOfObjects zones = this->FindAllDescendantsByType(ZONE); for (auto iter = zones.begin(); iter != zones.end(); ++iter) { diff --git a/src/svg.cpp b/src/svg.cpp index c6e4df5ecef..f3bf7f8ae4f 100644 --- a/src/svg.cpp +++ b/src/svg.cpp @@ -26,7 +26,7 @@ static const ClassRegistrar s_factory("svg", SVG); Svg::Svg() : Object(SVG, "svg-") { - Reset(); + this->Reset(); } Svg::~Svg() {} diff --git a/src/svgdevicecontext.cpp b/src/svgdevicecontext.cpp index eac1343fc0f..9d71f1bf6d1 100644 --- a/src/svgdevicecontext.cpp +++ b/src/svgdevicecontext.cpp @@ -38,8 +38,8 @@ SvgDeviceContext::SvgDeviceContext() : DeviceContext(SVG_DEVICE_CONTEXT) m_originX = 0; m_originY = 0; - SetBrush(AxNONE, AxSOLID); - SetPen(AxNONE, 1, AxSOLID); + this->SetBrush(AxNONE, AxSOLID); + this->SetPen(AxNONE, 1, AxSOLID); m_smuflGlyphs.clear(); @@ -91,8 +91,8 @@ void SvgDeviceContext::Commit(bool xml_declaration) } // take care of width/height once userScale is updated - double height = (double)GetHeight() * GetUserScaleY(); - double width = (double)GetWidth() * GetUserScaleX(); + double height = (double)this->GetHeight() * this->GetUserScaleY(); + double width = (double)this->GetWidth() * this->GetUserScaleX(); const char *format = "%gpx"; if (m_mmOutput) { @@ -277,8 +277,8 @@ void SvgDeviceContext::StartGraphic(Object *object, std::string gClass, std::str // m_currentNode.append_attribute("style") = StringFormat("stroke: #%s; stroke-opacity: %f; fill: #%s; fill-opacity: // %f;", - // GetColour(currentPen.GetColour()).c_str(), currentPen.GetOpacity(), GetColour(currentBrush.GetColour()).c_str(), - // currentBrush.GetOpacity()).c_str(); + // this->GetColour(currentPen.GetColour()).c_str(), currentPen.GetOpacity(), + // this->GetColour(currentBrush.GetColour()).c_str(), currentBrush.GetOpacity()).c_str(); } void SvgDeviceContext::StartCustomGraphic(std::string name, std::string gClass, std::string gId) @@ -354,7 +354,7 @@ void SvgDeviceContext::ResumeGraphic(Object *object, std::string gId) void SvgDeviceContext::EndGraphic(Object *object, View *view) { - DrawSvgBoundingBox(object, view); + this->DrawSvgBoundingBox(object, view); m_svgNodeStack.pop_back(); m_currentNode = m_svgNodeStack.back(); } @@ -373,7 +373,7 @@ void SvgDeviceContext::EndResumedGraphic(Object *object, View *view) void SvgDeviceContext::EndTextGraphic(Object *object, View *view) { - DrawSvgBoundingBox(object, view); + this->DrawSvgBoundingBox(object, view); m_svgNodeStack.pop_back(); m_currentNode = m_svgNodeStack.back(); } @@ -412,11 +412,13 @@ void SvgDeviceContext::StartPage() m_currentNode.append_attribute("class") = "definition-scale"; m_currentNode.append_attribute("color") = "black"; if (this->GetFacsimile()) { - m_currentNode.append_attribute("viewBox") = StringFormat("0 0 %d %d", GetWidth(), GetHeight()).c_str(); + m_currentNode.append_attribute("viewBox") + = StringFormat("0 0 %d %d", this->GetWidth(), this->GetHeight()).c_str(); } else { - m_currentNode.append_attribute("viewBox") - = StringFormat("0 0 %d %d", GetWidth() * DEFINITION_FACTOR, GetContentHeight() * DEFINITION_FACTOR).c_str(); + m_currentNode.append_attribute("viewBox") = StringFormat( + "0 0 %d %d", this->GetWidth() * DEFINITION_FACTOR, this->GetContentHeight() * DEFINITION_FACTOR) + .c_str(); } // a graphic for the origin @@ -429,8 +431,9 @@ void SvgDeviceContext::StartPage() // margin rectangle for debugging // pugi::xml_node rect = m_currentNode.append_child("rect"); // rect.append_attribute("fill") = "pink"; - // rect.append_attribute("height") = StringFormat("%d", GetHeight() * DEFINITION_FACTOR - 2 * m_originY).c_str(); - // rect.append_attribute("width") = StringFormat("%d", GetWidth() * DEFINITION_FACTOR - 2 * m_originX).c_str(); + // rect.append_attribute("height") = StringFormat("%d", this->GetHeight() * DEFINITION_FACTOR - 2 * + // m_originY).c_str(); rect.append_attribute("width") = StringFormat("%d", this->GetWidth() * DEFINITION_FACTOR - 2 + // * m_originX).c_str(); m_pageNode = m_currentNode; } @@ -497,7 +500,7 @@ void SvgDeviceContext::DrawQuadBezierPath(Point bezier[3]) bezier[1].x, bezier[1].y, bezier[2].x, bezier[2].y) .c_str(); pathChild.append_attribute("fill") = "none"; - pathChild.append_attribute("stroke") = GetColour(m_penStack.top().GetColour()).c_str(); + pathChild.append_attribute("stroke") = this->GetColour(m_penStack.top().GetColour()).c_str(); pathChild.append_attribute("stroke-linecap") = "round"; pathChild.append_attribute("stroke-linejoin") = "round"; pathChild.append_attribute("stroke-width") = m_penStack.top().GetWidth(); @@ -518,7 +521,7 @@ void SvgDeviceContext::DrawCubicBezierPath(Point bezier[4]) ) .c_str(); pathChild.append_attribute("fill") = "none"; - pathChild.append_attribute("stroke") = GetColour(m_penStack.top().GetColour()).c_str(); + pathChild.append_attribute("stroke") = this->GetColour(m_penStack.top().GetColour()).c_str(); pathChild.append_attribute("stroke-linecap") = "round"; pathChild.append_attribute("stroke-linejoin") = "round"; pathChild.append_attribute("stroke-width") = m_penStack.top().GetWidth(); @@ -541,7 +544,7 @@ void SvgDeviceContext::DrawCubicBezierPathFilled(Point bezier1[4], Point bezier2 .c_str(); // pathChild.append_attribute("fill") = "currentColor"; // pathChild.append_attribute("fill-opacity") = "1"; - pathChild.append_attribute("stroke") = GetColour(m_penStack.top().GetColour()).c_str(); + pathChild.append_attribute("stroke") = this->GetColour(m_penStack.top().GetColour()).c_str(); pathChild.append_attribute("stroke-linecap") = "round"; pathChild.append_attribute("stroke-linejoin") = "round"; // pathChild.append_attribute("stroke-opacity") = "1"; @@ -550,7 +553,7 @@ void SvgDeviceContext::DrawCubicBezierPathFilled(Point bezier1[4], Point bezier2 void SvgDeviceContext::DrawCircle(int x, int y, int radius) { - DrawEllipse(x - radius, y - radius, 2 * radius, 2 * radius); + this->DrawEllipse(x - radius, y - radius, 2 * radius, 2 * radius); } void SvgDeviceContext::DrawEllipse(int x, int y, int width, int height) @@ -573,7 +576,7 @@ void SvgDeviceContext::DrawEllipse(int x, int y, int width, int height) if (currentPen.GetOpacity() != 1.0) ellipseChild.append_attribute("stroke-opacity") = currentPen.GetOpacity(); if (currentPen.GetWidth() > 0) { ellipseChild.append_attribute("stroke-width") = currentPen.GetWidth(); - ellipseChild.append_attribute("stroke") = GetColour(m_penStack.top().GetColour()).c_str(); + ellipseChild.append_attribute("stroke") = this->GetColour(m_penStack.top().GetColour()).c_str(); } } @@ -644,7 +647,7 @@ void SvgDeviceContext::DrawEllipticArc(int x, int y, int width, int height, doub if (currentPen.GetOpacity() != 1.0) pathChild.append_attribute("stroke-opacity") = currentPen.GetOpacity(); if (currentPen.GetWidth() > 0) { pathChild.append_attribute("stroke-width") = currentPen.GetWidth(); - pathChild.append_attribute("stroke") = GetColour(m_penStack.top().GetColour()).c_str(); + pathChild.append_attribute("stroke") = this->GetColour(m_penStack.top().GetColour()).c_str(); } } @@ -652,7 +655,7 @@ void SvgDeviceContext::DrawLine(int x1, int y1, int x2, int y2) { pugi::xml_node pathChild = AppendChild("path"); pathChild.append_attribute("d") = StringFormat("M%d %d L%d %d", x1, y1, x2, y2).c_str(); - pathChild.append_attribute("stroke") = GetColour(m_penStack.top().GetColour()).c_str(); + pathChild.append_attribute("stroke") = this->GetColour(m_penStack.top().GetColour()).c_str(); if (m_penStack.top().GetLineCap() > 0) { pathChild.append_attribute("stroke-linecap") = "round"; pathChild.append_attribute("stroke-dasharray") @@ -676,13 +679,14 @@ void SvgDeviceContext::DrawPolygon(int n, Point points[], int xoffset, int yoffs // if (fillStyle == wxODDEVEN_RULE) // polygonChild.append_attribute("fill-rule") = "evenodd;"; // else - if (currentPen.GetWidth() > 0) polygonChild.append_attribute("stroke") = GetColour(currentPen.GetColour()).c_str(); + if (currentPen.GetWidth() > 0) + polygonChild.append_attribute("stroke") = this->GetColour(currentPen.GetColour()).c_str(); if (currentPen.GetWidth() > 1) polygonChild.append_attribute("stroke-width") = StringFormat("%d", currentPen.GetWidth()).c_str(); if (currentPen.GetOpacity() != 1.0) polygonChild.append_attribute("stroke-opacity") = StringFormat("%f", currentPen.GetOpacity()).c_str(); if (currentBrush.GetColour() != AxNONE) - polygonChild.append_attribute("fill") = GetColour(currentBrush.GetColour()).c_str(); + polygonChild.append_attribute("fill") = this->GetColour(currentBrush.GetColour()).c_str(); if (currentBrush.GetOpacity() != 1.0) polygonChild.append_attribute("fill-opacity") = StringFormat("%f", currentBrush.GetOpacity()).c_str(); @@ -695,7 +699,7 @@ void SvgDeviceContext::DrawPolygon(int n, Point points[], int xoffset, int yoffs void SvgDeviceContext::DrawRectangle(int x, int y, int width, int height) { - DrawRoundedRectangle(x, y, width, height, 0); + this->DrawRoundedRectangle(x, y, width, height, 0); } void SvgDeviceContext::DrawRoundedRectangle(int x, int y, int width, int height, int radius) @@ -704,7 +708,8 @@ void SvgDeviceContext::DrawRoundedRectangle(int x, int y, int width, int height, if (m_penStack.size()) { Pen currentPen = m_penStack.top(); - if (currentPen.GetWidth() > 0) rectChild.append_attribute("stroke") = GetColour(currentPen.GetColour()).c_str(); + if (currentPen.GetWidth() > 0) + rectChild.append_attribute("stroke") = this->GetColour(currentPen.GetColour()).c_str(); if (currentPen.GetWidth() > 1) rectChild.append_attribute("stroke-width") = StringFormat("%d", currentPen.GetWidth()).c_str(); if (currentPen.GetOpacity() != 1.0) @@ -714,7 +719,7 @@ void SvgDeviceContext::DrawRoundedRectangle(int x, int y, int width, int height, if (m_brushStack.size()) { Brush currentBrush = m_brushStack.top(); if (currentBrush.GetColour() != AxNONE) - rectChild.append_attribute("fill") = GetColour(currentBrush.GetColour()).c_str(); + rectChild.append_attribute("fill") = this->GetColour(currentBrush.GetColour()).c_str(); if (currentBrush.GetOpacity() != 1.0) rectChild.append_attribute("fill-opacity") = StringFormat("%f", currentBrush.GetOpacity()).c_str(); } @@ -1101,11 +1106,11 @@ void SvgDeviceContext::DrawSvgBoundingBox(Object *object, View *view) p.y = object->GetSelfBottom() - y * smuflGlyphFontSize / glyph->GetUnitsPerEm(); p.y += (fontPoint->y * smuflGlyphFontSize / glyph->GetUnitsPerEm()); - SetPen(AxGREEN, 10, AxSOLID); - SetBrush(AxGREEN, AxSOLID); + this->SetPen(AxGREEN, 10, AxSOLID); + this->SetBrush(AxGREEN, AxSOLID); this->DrawCircle(view->ToDeviceContextX(p.x), view->ToDeviceContextY(p.y), 5); - SetPen(AxNONE, 1, AxSOLID); - SetBrush(AxNONE, AxSOLID); + this->SetPen(AxNONE, 1, AxSOLID); + this->SetBrush(AxNONE, AxSOLID); } } } diff --git a/src/syl.cpp b/src/syl.cpp index 7ec4c26d194..5cc03d5e8ec 100644 --- a/src/syl.cpp +++ b/src/syl.cpp @@ -35,12 +35,12 @@ static const ClassRegistrar s_factory("syl", SYL); Syl::Syl() : LayerElement(SYL, "syl-"), TextListInterface(), TimeSpanningInterface(), AttLang(), AttTypography(), AttSylLog() { - RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_LANG); - RegisterAttClass(ATT_TYPOGRAPHY); - RegisterAttClass(ATT_SYLLOG); + this->RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + this->RegisterAttClass(ATT_LANG); + this->RegisterAttClass(ATT_TYPOGRAPHY); + this->RegisterAttClass(ATT_SYLLOG); - Reset(); + this->Reset(); } Syl::~Syl() {} @@ -49,9 +49,9 @@ void Syl::Reset() { LayerElement::Reset(); TimeSpanningInterface::Reset(); - ResetLang(); - ResetTypography(); - ResetSylLog(); + this->ResetLang(); + this->ResetTypography(); + this->ResetSylLog(); m_drawingVerse = 1; m_nextWordSyl = NULL; diff --git a/src/syllable.cpp b/src/syllable.cpp index b3454ed8fe6..984bb2b3d65 100644 --- a/src/syllable.cpp +++ b/src/syllable.cpp @@ -36,10 +36,10 @@ Syllable::Syllable() : LayerElement(SYLLABLE, "syllable-"), ObjectListInterface( void Syllable::Init() { - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_SLASHCOUNT); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_SLASHCOUNT); - Reset(); + this->Reset(); } bool Syllable::IsSupportedChild(Object *child) @@ -61,8 +61,8 @@ Syllable::~Syllable() {} void Syllable::Reset() { LayerElement::Reset(); - ResetColor(); - ResetSlashCount(); + this->ResetColor(); + this->ResetSlashCount(); } bool Syllable::MarkupAddSyl() diff --git a/src/system.cpp b/src/system.cpp index 24889e0339a..79f417b36b3 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -42,7 +42,7 @@ namespace vrv { System::System() : Object(SYSTEM, "system-"), DrawingListInterface(), AttTyped() { - RegisterAttClass(ATT_TYPED); + this->RegisterAttClass(ATT_TYPED); // We set parent to it because we want to access the parent doc from the aligners m_systemAligner.SetParent(this); @@ -50,20 +50,20 @@ System::System() : Object(SYSTEM, "system-"), DrawingListInterface(), AttTyped() // owned pointers need to be set to NULL; m_drawingScoreDef = NULL; - Reset(); + this->Reset(); } System::~System() { // We need to delete own objects - Reset(); + this->Reset(); } void System::Reset() { Object::Reset(); DrawingListInterface::Reset(); - ResetTyped(); + this->ResetTyped(); if (m_drawingScoreDef) { delete m_drawingScoreDef; @@ -120,13 +120,13 @@ int System::GetDrawingY() const void System::SetDrawingXRel(int drawingXRel) { - ResetCachedDrawingX(); + this->ResetCachedDrawingX(); m_drawingXRel = drawingXRel; } void System::SetDrawingYRel(int drawingYRel) { - ResetCachedDrawingY(); + this->ResetCachedDrawingY(); m_drawingYRel = drawingYRel; } @@ -489,7 +489,7 @@ int System::ScoreDefSetGrpSym(FunctorParams *functorParams) int System::ResetHorizontalAlignment(FunctorParams *functorParams) { - SetDrawingXRel(0); + this->SetDrawingXRel(0); m_drawingAbbrLabelsWidth = 0; return FUNCTOR_CONTINUE; @@ -497,7 +497,7 @@ int System::ResetHorizontalAlignment(FunctorParams *functorParams) int System::ResetVerticalAlignment(FunctorParams *functorParams) { - SetDrawingYRel(0); + this->SetDrawingYRel(0); m_systemAligner.Reset(); @@ -729,7 +729,7 @@ int System::AlignMeasures(FunctorParams *functorParams) AlignMeasuresParams *params = vrv_params_cast(functorParams); assert(params); - SetDrawingXRel(m_systemLeftMar + this->GetDrawingLabelsWidth()); + this->SetDrawingXRel(m_systemLeftMar + this->GetDrawingLabelsWidth()); params->m_shift = 0; params->m_justifiableWidth = 0; @@ -762,7 +762,7 @@ int System::AlignSystems(FunctorParams *functorParams) params->m_shift -= std::max(margin, 2 * unit); } - SetDrawingYRel(params->m_shift); + this->SetDrawingYRel(params->m_shift); params->m_shift += m_systemAligner.GetBottomAlignment()->GetYRel(); diff --git a/src/systemelement.cpp b/src/systemelement.cpp index 9841f43c2af..6dd7b5d017c 100644 --- a/src/systemelement.cpp +++ b/src/systemelement.cpp @@ -24,24 +24,24 @@ namespace vrv { SystemElement::SystemElement() : FloatingObject(SYSTEM_ELEMENT, "se"), AttTyped() { - RegisterAttClass(ATT_TYPED); + this->RegisterAttClass(ATT_TYPED); - Reset(); + this->Reset(); } SystemElement::SystemElement(ClassId classId) : FloatingObject(classId, "se"), AttTyped() { - RegisterAttClass(ATT_TYPED); + this->RegisterAttClass(ATT_TYPED); - Reset(); + this->Reset(); } SystemElement::SystemElement(ClassId classId, const std::string &classIdStr) : FloatingObject(classId, classIdStr), AttTyped() { - RegisterAttClass(ATT_TYPED); + this->RegisterAttClass(ATT_TYPED); - Reset(); + this->Reset(); } SystemElement::~SystemElement() {} @@ -49,7 +49,7 @@ SystemElement::~SystemElement() {} void SystemElement::Reset() { FloatingObject::Reset(); - ResetTyped(); + this->ResetTyped(); m_visibility = Visible; } diff --git a/src/systemmilestone.cpp b/src/systemmilestone.cpp index 4130a1372fa..45720e1f610 100644 --- a/src/systemmilestone.cpp +++ b/src/systemmilestone.cpp @@ -26,7 +26,7 @@ namespace vrv { SystemMilestoneEnd::SystemMilestoneEnd(Object *start) : SystemElement(SYSTEM_MILESTONE_END, "system-milestone-end-") { - Reset(); + this->Reset(); m_start = start; m_startClassName = start->GetClassName(); } @@ -45,7 +45,7 @@ void SystemMilestoneEnd::Reset() SystemMilestoneInterface::SystemMilestoneInterface() { - Reset(); + this->Reset(); } SystemMilestoneInterface::~SystemMilestoneInterface() {} diff --git a/src/tabdursym.cpp b/src/tabdursym.cpp index 793ac0f4b9b..d4bdfabaf69 100644 --- a/src/tabdursym.cpp +++ b/src/tabdursym.cpp @@ -25,9 +25,9 @@ static const ClassRegistrar s_factory("tabDurSym", TABDURSYM); TabDurSym::TabDurSym() : LayerElement(TABDURSYM, "tabdursym-"), AttNNumberLike() { - RegisterAttClass(ATT_NNUMBERLIKE); + this->RegisterAttClass(ATT_NNUMBERLIKE); - Reset(); + this->Reset(); } TabDurSym::~TabDurSym() {} @@ -35,7 +35,7 @@ TabDurSym::~TabDurSym() {} void TabDurSym::Reset() { LayerElement::Reset(); - ResetNNumberLike(); + this->ResetNNumberLike(); } bool TabDurSym::IsSupportedChild(Object *child) diff --git a/src/tabgrp.cpp b/src/tabgrp.cpp index bf0d6fdf633..16b4d32d365 100644 --- a/src/tabgrp.cpp +++ b/src/tabgrp.cpp @@ -28,9 +28,9 @@ static const ClassRegistrar s_factory("tabGrp", TABGRP); TabGrp::TabGrp() : LayerElement(TABGRP, "tabgrp-"), DurationInterface() { - RegisterInterface(DurationInterface::GetAttClasses(), DurationInterface::IsInterface()); + this->RegisterInterface(DurationInterface::GetAttClasses(), DurationInterface::IsInterface()); - Reset(); + this->Reset(); } TabGrp::~TabGrp() {} diff --git a/src/tempo.cpp b/src/tempo.cpp index 890e3f25183..e0f7556a7cd 100644 --- a/src/tempo.cpp +++ b/src/tempo.cpp @@ -34,13 +34,13 @@ static const ClassRegistrar s_factory("tempo", TEMPO); Tempo::Tempo() : ControlElement(TEMPO, "tempo-"), TextDirInterface(), TimePointInterface(), AttLang(), AttMidiTempo(), AttMmTempo() { - RegisterInterface(TextDirInterface::GetAttClasses(), TextDirInterface::IsInterface()); - RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); - RegisterAttClass(ATT_LANG); - RegisterAttClass(ATT_MIDITEMPO); - RegisterAttClass(ATT_MMTEMPO); + this->RegisterInterface(TextDirInterface::GetAttClasses(), TextDirInterface::IsInterface()); + this->RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); + this->RegisterAttClass(ATT_LANG); + this->RegisterAttClass(ATT_MIDITEMPO); + this->RegisterAttClass(ATT_MMTEMPO); - Reset(); + this->Reset(); } Tempo::~Tempo() {} @@ -50,9 +50,9 @@ void Tempo::Reset() ControlElement::Reset(); TextDirInterface::Reset(); TimePointInterface::Reset(); - ResetLang(); - ResetMidiTempo(); - ResetMmTempo(); + this->ResetLang(); + this->ResetMidiTempo(); + this->ResetMmTempo(); } bool Tempo::IsSupportedChild(Object *child) @@ -76,7 +76,7 @@ int Tempo::GetDrawingXRelativeToStaff(int staffN) m_relativeX = m_drawingXRels.at(staffN); } - return GetStart()->GetDrawingX() + m_relativeX; + return this->GetStart()->GetDrawingX() + m_relativeX; } int Tempo::AdjustTempo(FunctorParams *functorParams) @@ -92,20 +92,20 @@ int Tempo::AdjustTempo(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - Measure *measure = vrv_cast(GetFirstAncestor(MEASURE)); + Measure *measure = vrv_cast(this->GetFirstAncestor(MEASURE)); MeasureAlignerTypeComparison alignmentComparison(ALIGNMENT_SCOREDEF_METERSIG); Alignment *pos = dynamic_cast(measure->m_measureAligner.FindDescendantByComparison(&alignmentComparison, 1)); for (auto positioner : positioners) { int left, right; - int start = GetStart()->GetDrawingX(); + int start = this->GetStart()->GetDrawingX(); const int staffN = positioner->GetAlignment()->GetStaff()->GetN(); - if (!HasStartid() && (GetTstamp() <= 1) && pos) { + if (!this->HasStartid() && (this->GetTstamp() <= 1) && pos) { left = measure->GetDrawingX() + pos->GetXRel(); } else { - Alignment *align = GetStart()->GetAlignment(); + Alignment *align = this->GetStart()->GetAlignment(); align->GetLeftRight(staffN, left, right); } diff --git a/src/text.cpp b/src/text.cpp index d161307c282..feee35b8b7b 100644 --- a/src/text.cpp +++ b/src/text.cpp @@ -24,7 +24,7 @@ namespace vrv { Text::Text() : TextElement(TEXT, "text-") { - Reset(); + this->Reset(); } Text::~Text() {} diff --git a/src/textdirinterface.cpp b/src/textdirinterface.cpp index 1a36aeceeea..ba9e25fd07d 100644 --- a/src/textdirinterface.cpp +++ b/src/textdirinterface.cpp @@ -24,16 +24,16 @@ namespace vrv { TextDirInterface::TextDirInterface() : Interface(), AttPlacementRelStaff() { - RegisterInterfaceAttClass(ATT_PLACEMENTRELSTAFF); + this->RegisterInterfaceAttClass(ATT_PLACEMENTRELSTAFF); - Reset(); + this->Reset(); } TextDirInterface::~TextDirInterface() {} void TextDirInterface::Reset() { - ResetPlacementRelStaff(); + this->ResetPlacementRelStaff(); } int TextDirInterface::GetNumberOfLines(Object *object) diff --git a/src/textelement.cpp b/src/textelement.cpp index d9df7233556..4cf60183d04 100644 --- a/src/textelement.cpp +++ b/src/textelement.cpp @@ -21,27 +21,27 @@ namespace vrv { TextElement::TextElement() : Object(TEXT_ELEMENT, "te-"), AttLabelled(), AttTyped() { - RegisterAttClass(ATT_LABELLED); - RegisterAttClass(ATT_TYPED); + this->RegisterAttClass(ATT_LABELLED); + this->RegisterAttClass(ATT_TYPED); - Reset(); + this->Reset(); } TextElement::TextElement(ClassId classId) : Object(classId, "te-"), AttLabelled(), AttTyped() { - RegisterAttClass(ATT_LABELLED); - RegisterAttClass(ATT_TYPED); + this->RegisterAttClass(ATT_LABELLED); + this->RegisterAttClass(ATT_TYPED); - Reset(); + this->Reset(); } TextElement::TextElement(ClassId classId, const std::string &classIdStr) : Object(classId, classIdStr), AttLabelled(), AttTyped() { - RegisterAttClass(ATT_LABELLED); - RegisterAttClass(ATT_TYPED); + this->RegisterAttClass(ATT_LABELLED); + this->RegisterAttClass(ATT_TYPED); - Reset(); + this->Reset(); } TextElement::~TextElement() {} @@ -49,8 +49,8 @@ TextElement::~TextElement() {} void TextElement::Reset() { Object::Reset(); - ResetLabelled(); - ResetTyped(); + this->ResetLabelled(); + this->ResetTyped(); m_drawingYRel = 0; m_drawingXRel = 0; @@ -97,13 +97,13 @@ int TextElement::GetDrawingY() const void TextElement::SetDrawingXRel(int drawingXRel) { - ResetCachedDrawingX(); + this->ResetCachedDrawingX(); m_drawingXRel = drawingXRel; } void TextElement::SetDrawingYRel(int drawingYRel) { - ResetCachedDrawingY(); + this->ResetCachedDrawingY(); m_drawingYRel = drawingYRel; } @@ -113,8 +113,8 @@ void TextElement::SetDrawingYRel(int drawingYRel) int TextElement::ResetVerticalAlignment(FunctorParams *functorParams) { - SetDrawingXRel(0); - SetDrawingYRel(0); + this->SetDrawingXRel(0); + this->SetDrawingYRel(0); return FUNCTOR_CONTINUE; } diff --git a/src/tie.cpp b/src/tie.cpp index 99d9a0fb713..65456c884ff 100644 --- a/src/tie.cpp +++ b/src/tie.cpp @@ -34,34 +34,34 @@ static const ClassRegistrar s_factory("tie", TIE); Tie::Tie() : ControlElement(TIE, "tie-"), TimeSpanningInterface(), AttColor(), AttCurvature(), AttCurveRend() { - RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_CURVATURE); - RegisterAttClass(ATT_CURVEREND); + this->RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_CURVATURE); + this->RegisterAttClass(ATT_CURVEREND); - Reset(); + this->Reset(); } Tie::Tie(ClassId classId) : ControlElement(classId, "tie-"), TimeSpanningInterface(), AttColor(), AttCurvature(), AttCurveRend() { - RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_CURVATURE); - RegisterAttClass(ATT_CURVEREND); + this->RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_CURVATURE); + this->RegisterAttClass(ATT_CURVEREND); - Reset(); + this->Reset(); } Tie::Tie(ClassId classId, const std::string &classIdStr) : ControlElement(classId, classIdStr), TimeSpanningInterface(), AttColor(), AttCurvature(), AttCurveRend() { - RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_CURVATURE); - RegisterAttClass(ATT_CURVEREND); + this->RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_CURVATURE); + this->RegisterAttClass(ATT_CURVEREND); - Reset(); + this->Reset(); } Tie::~Tie() {} @@ -70,9 +70,9 @@ void Tie::Reset() { ControlElement::Reset(); TimeSpanningInterface::Reset(); - ResetColor(); - ResetCurvature(); - ResetCurveRend(); + this->ResetColor(); + this->ResetCurvature(); + this->ResetCurveRend(); } bool Tie::AdjustEnharmonicTies(Doc *doc, FloatingCurvePositioner *curve, Point bezier[4], Note *startNote, @@ -151,8 +151,8 @@ bool Tie::CalculatePosition(Doc *doc, Staff *staff, int x1, int x2, int spanning return false; } - Note *note1 = dynamic_cast(GetStart()); - Note *note2 = dynamic_cast(GetEnd()); + Note *note1 = dynamic_cast(this->GetStart()); + Note *note2 = dynamic_cast(this->GetEnd()); if (!note1 && !note2) { // no note, obviously nothing to do... @@ -201,7 +201,7 @@ bool Tie::CalculatePosition(Doc *doc, Staff *staff, int x1, int x2, int spanning bool isAboveStaffCenter = startPoint.y > (staff->GetDrawingY() - 4 * drawingUnit); curvature_CURVEDIR drawingCurveDir - = GetPreferredCurveDirection(layer1, note1, startParentChord, noteStemDir, isAboveStaffCenter); + = this->GetPreferredCurveDirection(layer1, note1, startParentChord, noteStemDir, isAboveStaffCenter); if (startParentChord) { if (((curvature_CURVEDIR_above == drawingCurveDir) && (note1 == startParentChord->GetTopNote())) || ((curvature_CURVEDIR_below == drawingCurveDir) && (note1 == startParentChord->GetBottomNote()))) { @@ -254,8 +254,8 @@ bool Tie::CalculatePosition(Doc *doc, Staff *staff, int x1, int x2, int spanning bezier[2] = c2; bezier[3] = endPoint; - assert(GetCurrentFloatingPositioner()); - FloatingPositioner *positioner = GetCurrentFloatingPositioner(); + assert(this->GetCurrentFloatingPositioner()); + FloatingPositioner *positioner = this->GetCurrentFloatingPositioner(); assert(positioner && positioner->Is(FLOATING_CURVE_POSITIONER)); FloatingCurvePositioner *curve = vrv_cast(positioner); assert(curve); @@ -358,8 +358,8 @@ int Tie::CalculateAdjacentChordXOffset(Doc *doc, Staff *staff, Chord *parentChor void Tie::CalculateXPosition(Doc *doc, Staff *staff, Chord *startParentChord, Chord *endParentChord, int spanningType, bool isOuterChordNote, Point &startPoint, Point &endPoint, curvature_CURVEDIR drawingCurveDir) { - Note *startNote = dynamic_cast(GetStart()); - Note *endNote = dynamic_cast(GetEnd()); + Note *startNote = dynamic_cast(this->GetStart()); + Note *endNote = dynamic_cast(this->GetEnd()); const int drawingUnit = doc->GetDrawingUnit(staff->m_drawingStaffSize); bool isShortTie = false; @@ -472,9 +472,9 @@ curvature_CURVEDIR Tie::GetPreferredCurveDirection( data_STEMDIRECTION layerStemDir; curvature_CURVEDIR drawingCurveDir = curvature_CURVEDIR_above; // first should be the tie @curvedir - if (HasCurvedir()) { + if (this->HasCurvedir()) { drawingCurveDir - = (GetCurvedir() == curvature_CURVEDIR_above) ? curvature_CURVEDIR_above : curvature_CURVEDIR_below; + = (this->GetCurvedir() == curvature_CURVEDIR_above) ? curvature_CURVEDIR_above : curvature_CURVEDIR_below; } // then layer direction trumps note direction else if (layer && ((layerStemDir = layer->GetDrawingStemDir(note)) != STEMDIRECTION_NONE)) { diff --git a/src/timeinterface.cpp b/src/timeinterface.cpp index 490b4370f9d..0a45443076c 100644 --- a/src/timeinterface.cpp +++ b/src/timeinterface.cpp @@ -29,20 +29,20 @@ namespace vrv { TimePointInterface::TimePointInterface() : Interface(), AttStaffIdent(), AttStartId(), AttTimestampLogical() { - RegisterInterfaceAttClass(ATT_STAFFIDENT); - RegisterInterfaceAttClass(ATT_STARTID); - RegisterInterfaceAttClass(ATT_TIMESTAMPLOGICAL); + this->RegisterInterfaceAttClass(ATT_STAFFIDENT); + this->RegisterInterfaceAttClass(ATT_STARTID); + this->RegisterInterfaceAttClass(ATT_TIMESTAMPLOGICAL); - Reset(); + this->Reset(); } TimePointInterface::~TimePointInterface() {} void TimePointInterface::Reset() { - ResetStaffIdent(); - ResetStartId(); - ResetTimestampLogical(); + this->ResetStaffIdent(); + this->ResetStartId(); + this->ResetTimestampLogical(); m_start = NULL; m_startUuid = ""; @@ -157,10 +157,10 @@ std::vector TimePointInterface::GetTstampStaves(Measure *measure, Objec TimeSpanningInterface::TimeSpanningInterface() : TimePointInterface(), AttStartEndId(), AttTimestamp2Logical() { - RegisterInterfaceAttClass(ATT_STARTENDID); - RegisterInterfaceAttClass(ATT_TIMESTAMP2LOGICAL); + this->RegisterInterfaceAttClass(ATT_STARTENDID); + this->RegisterInterfaceAttClass(ATT_TIMESTAMP2LOGICAL); - Reset(); + this->Reset(); } TimeSpanningInterface::~TimeSpanningInterface() {} @@ -168,8 +168,8 @@ TimeSpanningInterface::~TimeSpanningInterface() {} void TimeSpanningInterface::Reset() { TimePointInterface::Reset(); - ResetStartEndId(); - ResetTimestamp2Logical(); + this->ResetStartEndId(); + this->ResetTimestamp2Logical(); m_end = NULL; m_endUuid = ""; @@ -323,7 +323,7 @@ int TimePointInterface::InterfacePrepareTimestamps(FunctorParams *functorParams, object->GetClassName().c_str(), object->GetUuid().c_str()); return FUNCTOR_CONTINUE; } - else if (!HasTstamp()) { + else if (!this->HasTstamp()) { return FUNCTOR_CONTINUE; // This file is quite likely invalid? } @@ -388,7 +388,7 @@ int TimeSpanningInterface::InterfacePrepareTimestamps(FunctorParams *functorPara } return TimePointInterface::InterfacePrepareTimestamps(functorParams, object); } - else if (!HasTstamp2()) { + else if (!this->HasTstamp2()) { // We won't be able to do anything, just try to prepare the tstamp (start) return TimePointInterface::InterfacePrepareTimestamps(functorParams, object); } diff --git a/src/timestamp.cpp b/src/timestamp.cpp index 1136d1eeaac..b14adfbb326 100644 --- a/src/timestamp.cpp +++ b/src/timestamp.cpp @@ -21,7 +21,7 @@ namespace vrv { TimestampAttr::TimestampAttr() : LayerElement(TIMESTAMP_ATTR, "tstp-") { - Reset(); + this->Reset(); } TimestampAttr::~TimestampAttr() {} diff --git a/src/toolkit.cpp b/src/toolkit.cpp index e99df13574d..c7969421804 100644 --- a/src/toolkit.cpp +++ b/src/toolkit.cpp @@ -475,7 +475,7 @@ bool Toolkit::LoadData(const std::string &data) // HumdrumInput *input = new HumdrumInput(&m_doc); input = new HumdrumInput(&m_doc); - if (GetOutputTo() == HUMDRUM) { + if (this->GetOutputTo() == HUMDRUM) { input->SetOutputFormat("humdrum"); } @@ -484,8 +484,8 @@ bool Toolkit::LoadData(const std::string &data) delete input; return false; } - SetHumdrumBuffer(((HumdrumInput *)input)->GetHumdrumString().c_str()); - if (GetOutputTo() == HUMDRUM) { + this->SetHumdrumBuffer(((HumdrumInput *)input)->GetHumdrumString().c_str()); + if (this->GetOutputTo() == HUMDRUM) { // Humdrum data will be output (post-filtering data), // So not continuing converting to SVG. return true; @@ -501,7 +501,7 @@ bool Toolkit::LoadData(const std::string &data) Doc tempdoc; tempdoc.SetOptions(m_doc.GetOptions()); HumdrumInput *tempinput = new HumdrumInput(&tempdoc); - if (GetOutputTo() == HUMDRUM) { + if (this->GetOutputTo() == HUMDRUM) { tempinput->SetOutputFormat("humdrum"); } @@ -511,9 +511,9 @@ bool Toolkit::LoadData(const std::string &data) return false; } - SetHumdrumBuffer(tempinput->GetHumdrumString().c_str()); + this->SetHumdrumBuffer(tempinput->GetHumdrumString().c_str()); - if (GetOutputTo() == HUMDRUM) { + if (this->GetOutputTo() == HUMDRUM) { return true; } @@ -548,7 +548,7 @@ bool Toolkit::LoadData(const std::string &data) return false; } std::string buffer = conversion.str(); - SetHumdrumBuffer(buffer.c_str()); + this->SetHumdrumBuffer(buffer.c_str()); // Now convert Humdrum into MEI: Doc tempdoc; @@ -570,7 +570,7 @@ bool Toolkit::LoadData(const std::string &data) ConvertMEIToHumdrum(data); // Now convert Humdrum into MEI: - std::string conversion = GetHumdrumBuffer(); + std::string conversion = this->GetHumdrumBuffer(); Doc tempdoc; tempdoc.SetOptions(m_doc.GetOptions()); Input *tempinput = new HumdrumInput(&tempdoc); @@ -596,7 +596,7 @@ bool Toolkit::LoadData(const std::string &data) return false; } std::string buffer = conversion.str(); - SetHumdrumBuffer(buffer.c_str()); + this->SetHumdrumBuffer(buffer.c_str()); // Now convert Humdrum into MEI: Doc tempdoc; @@ -624,7 +624,7 @@ bool Toolkit::LoadData(const std::string &data) return false; } std::string buffer = conversion.str(); - SetHumdrumBuffer(buffer.c_str()); + this->SetHumdrumBuffer(buffer.c_str()); // Now convert Humdrum into MEI: Doc tempdoc; @@ -841,7 +841,7 @@ std::string Toolkit::ValidatePAE(const std::string &data) bool Toolkit::SaveFile(const std::string &filename, const std::string &jsonOptions) { - std::string output = GetMEI(jsonOptions); + std::string output = this->GetMEI(jsonOptions); if (output.empty()) { return false; } @@ -962,17 +962,17 @@ bool Toolkit::SetOptions(const std::string &jsonOptions) // Base options if (iter->first == "inputFrom") { if (json.has("inputFrom")) { - SetInputFrom(json.get("inputFrom")); + this->SetInputFrom(json.get("inputFrom")); } } else if (iter->first == "outputTo") { if (json.has("outputTo")) { - SetOutputTo(json.get("outputTo")); + this->SetOutputTo(json.get("outputTo")); } } else if (iter->first == "scale") { if (json.has("scale")) { - SetScale(json.get("scale")); + this->SetScale(json.get("scale")); } } else if (iter->first == "xmlIdSeed") { @@ -1192,7 +1192,7 @@ void Toolkit::RedoLayout(const std::string &jsonOptions) this->ResetLogBuffer(); - if ((GetPageCount() == 0) || (m_doc.GetType() == Transcription) || (m_doc.GetType() == Facs)) { + if ((this->GetPageCount() == 0) || (m_doc.GetType() == Transcription) || (m_doc.GetType() == Facs)) { LogWarning("No data to re-layout"); return; } @@ -1228,7 +1228,7 @@ void Toolkit::RedoPagePitchPosLayout() bool Toolkit::RenderToDeviceContext(int pageNo, DeviceContext *deviceContext) { - if (pageNo > GetPageCount()) { + if (pageNo > this->GetPageCount()) { LogWarning("Page %d does not exist", pageNo); return false; } @@ -1341,7 +1341,7 @@ bool Toolkit::RenderToSVGFile(const std::string &filename, int pageNo) std::string Toolkit::GetHumdrum() { - return GetHumdrumBuffer(); + return this->GetHumdrumBuffer(); } bool Toolkit::GetHumdrumFile(const std::string &filename) @@ -1354,14 +1354,14 @@ bool Toolkit::GetHumdrumFile(const std::string &filename) return false; } - GetHumdrum(output); + this->GetHumdrum(output); output.close(); return true; } void Toolkit::GetHumdrum(std::ostream &output) { - output << GetHumdrumBuffer(); + output << this->GetHumdrumBuffer(); } std::string Toolkit::RenderToMIDI() @@ -1385,7 +1385,7 @@ std::string Toolkit::RenderToPAE() { this->ResetLogBuffer(); - if (GetPageCount() == 0) { + if (this->GetPageCount() == 0) { LogWarning("No data loaded"); return ""; } @@ -1717,7 +1717,7 @@ const char *Toolkit::GetHumdrumBuffer() stringstream out; hum::Tool_mei2hum converter; converter.convert(out, infile); - SetHumdrumBuffer(out.str().c_str()); + this->SetHumdrumBuffer(out.str().c_str()); #endif if (m_humdrumBuffer) { return m_humdrumBuffer; @@ -1775,7 +1775,7 @@ std::string Toolkit::ConvertMEIToHumdrum(const std::string &meiData) if (!status) { LogError("Error converting MEI data to Humdrum: %s", conversion.str().c_str()); } - SetHumdrumBuffer(conversion.str().c_str()); + this->SetHumdrumBuffer(conversion.str().c_str()); return conversion.str(); #else return ""; @@ -1790,11 +1790,11 @@ std::string Toolkit::ConvertHumdrumToHumdrum(const std::string &humdrumData) // bool result = infiles.readString(humdrumData); bool result = infiles.readString(humdrumData); if (!result) { - SetHumdrumBuffer(""); + this->SetHumdrumBuffer(""); return ""; } if (infiles.getCount() == 0) { - SetHumdrumBuffer(""); + this->SetHumdrumBuffer(""); return ""; } @@ -1824,7 +1824,7 @@ std::string Toolkit::ConvertHumdrumToHumdrum(const std::string &humdrumData) hum::HumdrumFile &infile = infiles[0]; std::stringstream humout; humout << infile; - SetHumdrumBuffer(humout.str().c_str()); + this->SetHumdrumBuffer(humout.str().c_str()); return humout.str(); #else return ""; diff --git a/src/transposition.cpp b/src/transposition.cpp index d4b6adf5192..98bc43b3940 100644 --- a/src/transposition.cpp +++ b/src/transposition.cpp @@ -74,12 +74,12 @@ namespace vrv { TransPitch::TransPitch(int aPname, int anAccid, int anOct) { - SetPitch(aPname, anAccid, anOct); + this->SetPitch(aPname, anAccid, anOct); } TransPitch::TransPitch(data_PITCHNAME pname, data_ACCIDENTAL_GESTURAL accidG, data_ACCIDENTAL_WRITTEN accidW, int oct) { - SetPitch(pname - PITCHNAME_c, GetChromaticAlteration(accidG, accidW), oct); + this->SetPitch(pname - PITCHNAME_c, this->GetChromaticAlteration(accidG, accidW), oct); } TransPitch::TransPitch(const TransPitch &pitch) @@ -339,7 +339,7 @@ std::ostream &operator<<(std::ostream &out, const TransPitch &pitch) Transposer::Transposer() { // Initialize with base-40 system by default: - SetMaxAccid(2); + this->SetMaxAccid(2); } ////////////////////////////// @@ -375,7 +375,7 @@ bool Transposer::SetTransposition(int transVal) bool Transposer::SetTransposition(const std::string &transString) { - m_transpose = GetInterval(transString); + m_transpose = this->GetInterval(transString); return m_transpose != INVALID_INTERVAL_CLASS; } @@ -385,23 +385,23 @@ bool Transposer::SetTransposition(const std::string &transString) bool Transposer::SetTransposition(const TransPitch &fromPitch, const std::string &toString) { TransPitch toPitch; - if (GetKeyTonic(toString, toPitch)) { + if (this->GetKeyTonic(toString, toPitch)) { // Determine proper octave offset. int numSigns = toPitch.m_oct; - m_transpose = GetInterval(fromPitch, toPitch); + m_transpose = this->GetInterval(fromPitch, toPitch); // A transposition with n plus or minus signs should never be more than n octaves away. - if (numSigns > 0 && m_transpose > PerfectOctaveClass() * numSigns) { - m_transpose -= PerfectOctaveClass(); + if (numSigns > 0 && m_transpose > this->PerfectOctaveClass() * numSigns) { + m_transpose -= this->PerfectOctaveClass(); } - else if (numSigns < 0 && m_transpose < PerfectOctaveClass() * numSigns) { - m_transpose += PerfectOctaveClass(); + else if (numSigns < 0 && m_transpose < this->PerfectOctaveClass() * numSigns) { + m_transpose += this->PerfectOctaveClass(); } // A transposition with 0 plus or minus signs should never be more than 1/2 an octave away. - else if (numSigns == 0 && m_transpose > PerfectOctaveClass() / 2) { - m_transpose -= PerfectOctaveClass(); + else if (numSigns == 0 && m_transpose > this->PerfectOctaveClass() / 2) { + m_transpose -= this->PerfectOctaveClass(); } - else if (numSigns == 0 && m_transpose < -1 * PerfectOctaveClass() / 2) { - m_transpose += PerfectOctaveClass(); + else if (numSigns == 0 && m_transpose < -1 * this->PerfectOctaveClass() / 2) { + m_transpose += this->PerfectOctaveClass(); } return true; } @@ -414,11 +414,11 @@ bool Transposer::SetTransposition(const TransPitch &fromPitch, const std::string bool Transposer::SetTransposition(int keyFifths, const std::string &semitones) { - if (!IsValidSemitones(semitones)) { + if (!this->IsValidSemitones(semitones)) { return false; } int semis = stoi(semitones); - return SetTransposition(keyFifths, semis); + return this->SetTransposition(keyFifths, semis); } // Note the order of the variables (key signature information is first in all @@ -426,8 +426,8 @@ bool Transposer::SetTransposition(int keyFifths, const std::string &semitones) bool Transposer::SetTransposition(int keyFifths, int semitones) { - int intervalClass = SemitonesToIntervalClass(keyFifths, semitones); - return SetTransposition(intervalClass); + int intervalClass = this->SemitonesToIntervalClass(keyFifths, semitones); + return this->SetTransposition(intervalClass); } ////////////////////////////// @@ -515,7 +515,7 @@ int Transposer::SemitonesToIntervalClass(int keyFifths, int semitones) } interval = sign < 0 ? "-" + interval : "+" + interval; - int intint = GetInterval(interval); + int intint = this->GetInterval(interval); intint += sign * octave * m_base; return intint; } @@ -528,8 +528,8 @@ int Transposer::SemitonesToIntervalClass(int keyFifths, int semitones) std::string Transposer::SemitonesToIntervalName(int keyFifths, int semitones) { - int intervalClass = SemitonesToIntervalClass(keyFifths, semitones); - return GetIntervalName(intervalClass); + int intervalClass = this->SemitonesToIntervalClass(keyFifths, semitones); + return this->GetIntervalName(intervalClass); } ////////////////////////////// @@ -549,7 +549,7 @@ int Transposer::IntervalToSemitones(int interval) int intervalClass = interval - octave * m_base; int diatonic = 0; int chromatic = 0; - IntervalToDiatonicChromatic(diatonic, chromatic, intervalClass); + this->IntervalToDiatonicChromatic(diatonic, chromatic, intervalClass); if ((diatonic != INVALID_INTERVAL_CLASS) && (chromatic != INVALID_INTERVAL_CLASS)) { return (m_diatonic2semitone.at(diatonic) + chromatic) * sign + 12 * octave; } @@ -562,8 +562,8 @@ int Transposer::IntervalToSemitones(int interval) int Transposer::IntervalToSemitones(const std::string &intervalName) { - int interval = GetInterval(intervalName); - return IntervalToSemitones(interval); + int interval = this->GetInterval(intervalName); + return this->IntervalToSemitones(interval); } ////////////////////////////// @@ -584,7 +584,7 @@ int Transposer::GetTranspositionIntervalClass() // std::string Transposer::GetTranspositionIntervalName() { - return GetIntervalName(m_transpose); + return this->GetIntervalName(m_transpose); } ////////////////////////////// @@ -595,9 +595,9 @@ std::string Transposer::GetTranspositionIntervalName() void Transposer::Transpose(TransPitch &pitch) { - int ipitch = TransPitchToIntegerPitch(pitch); + int ipitch = this->TransPitchToIntegerPitch(pitch); ipitch += m_transpose; - pitch = IntegerPitchToTransPitch(ipitch); + pitch = this->IntegerPitchToTransPitch(ipitch); } int Transposer::Transpose(int ipitch) @@ -612,17 +612,17 @@ int Transposer::Transpose(int ipitch) void Transposer::Transpose(TransPitch &pitch, int transVal) { - int ipitch = TransPitchToIntegerPitch(pitch); + int ipitch = this->TransPitchToIntegerPitch(pitch); ipitch += transVal; - pitch = IntegerPitchToTransPitch(ipitch); + pitch = this->IntegerPitchToTransPitch(ipitch); } void Transposer::Transpose(TransPitch &pitch, const std::string &transString) { - int transVal = GetInterval(transString); - int ipitch = TransPitchToIntegerPitch(pitch); + int transVal = this->GetInterval(transString); + int ipitch = this->TransPitchToIntegerPitch(pitch); ipitch += transVal; - pitch = IntegerPitchToTransPitch(ipitch); + pitch = this->IntegerPitchToTransPitch(ipitch); } ////////////////////////////// @@ -655,7 +655,7 @@ void Transposer::SetMaxAccid(int maxAccid) { m_maxAccid = abs(maxAccid); m_base = 7 * (2 * m_maxAccid + 1) + 5; - CalculateDiatonicMapping(); + this->CalculateDiatonicMapping(); m_transpose = 0; } @@ -835,7 +835,7 @@ int Transposer::GetInterval(const std::string &intervalName) switch (dnum) { case 0: // unison - base = PerfectUnisonClass(); + base = this->PerfectUnisonClass(); if (quality[0] == 'A') { adjust = (int)quality.size(); } @@ -849,17 +849,17 @@ int Transposer::GetInterval(const std::string &intervalName) break; case 1: // second if (quality == "M") { - base = MajorSecondClass(); + base = this->MajorSecondClass(); } else if (quality == "m") { - base = MinorSecondClass(); + base = this->MinorSecondClass(); } else if (quality[0] == 'A') { - base = MajorSecondClass(); + base = this->MajorSecondClass(); adjust = (int)quality.size(); } else if (quality[0] == 'd') { - base = MinorSecondClass(); + base = this->MinorSecondClass(); adjust = -(int)quality.size(); } else { @@ -869,17 +869,17 @@ int Transposer::GetInterval(const std::string &intervalName) break; case 2: // third if (quality == "M") { - base = MajorThirdClass(); + base = this->MajorThirdClass(); } else if (quality == "m") { - base = MinorThirdClass(); + base = this->MinorThirdClass(); } else if (quality[0] == 'A') { - base = MajorThirdClass(); + base = this->MajorThirdClass(); adjust = (int)quality.size(); } else if (quality[0] == 'd') { - base = MinorThirdClass(); + base = this->MinorThirdClass(); adjust = -(int)quality.size(); } else { @@ -888,7 +888,7 @@ int Transposer::GetInterval(const std::string &intervalName) } break; case 3: // fourth - base = PerfectFourthClass(); + base = this->PerfectFourthClass(); if (quality[0] == 'A') { adjust = (int)quality.size(); } @@ -901,7 +901,7 @@ int Transposer::GetInterval(const std::string &intervalName) } break; case 4: // fifth - base = PerfectFifthClass(); + base = this->PerfectFifthClass(); if (quality[0] == 'A') { adjust = (int)quality.size(); } @@ -915,17 +915,17 @@ int Transposer::GetInterval(const std::string &intervalName) break; case 5: // sixth if (quality == "M") { - base = MajorSixthClass(); + base = this->MajorSixthClass(); } else if (quality == "m") { - base = MinorSixthClass(); + base = this->MinorSixthClass(); } else if (quality[0] == 'A') { - base = MajorSixthClass(); + base = this->MajorSixthClass(); adjust = (int)quality.size(); } else if (quality[0] == 'd') { - base = MinorSixthClass(); + base = this->MinorSixthClass(); adjust = -(int)quality.size(); } else { @@ -935,17 +935,17 @@ int Transposer::GetInterval(const std::string &intervalName) break; case 6: // seventh if (quality == "M") { - base = MajorSeventhClass(); + base = this->MajorSeventhClass(); } else if (quality == "m") { - base = MinorSeventhClass(); + base = this->MinorSeventhClass(); } else if (quality[0] == 'A') { - base = MajorSeventhClass(); + base = this->MajorSeventhClass(); adjust = (int)quality.size(); } else if (quality[0] == 'd') { - base = MinorSeventhClass(); + base = this->MinorSeventhClass(); adjust = -(int)quality.size(); } else { @@ -1165,7 +1165,7 @@ TransPitch Transposer::IntegerPitchToTransPitch(int ipitch) void Transposer::SetBase40() { - SetMaxAccid(2); + this->SetMaxAccid(2); } ////////////////////////////// @@ -1175,7 +1175,7 @@ void Transposer::SetBase40() void Transposer::SetBase600() { - SetMaxAccid(42); + this->SetMaxAccid(42); } ////////////////////////////// @@ -1187,7 +1187,7 @@ void Transposer::SetBase600() int Transposer::GetInterval(const TransPitch &p1, const TransPitch &p2) { - return TransPitchToIntegerPitch(p2) - TransPitchToIntegerPitch(p1); + return this->TransPitchToIntegerPitch(p2) - this->TransPitchToIntegerPitch(p1); } // Similar function to GetInterval, but the integer interval class is converted @@ -1195,8 +1195,8 @@ int Transposer::GetInterval(const TransPitch &p1, const TransPitch &p2) std::string Transposer::GetIntervalName(const TransPitch &p1, const TransPitch &p2) { - int iclass = GetInterval(p1, p2); - return GetIntervalName(iclass); + int iclass = this->GetInterval(p1, p2); + return this->GetIntervalName(iclass); } std::string Transposer::GetIntervalName(int intervalClass) @@ -1373,8 +1373,8 @@ std::string Transposer::GetIntervalName(int intervalClass) int Transposer::IntervalToCircleOfFifths(const std::string &transstring) { - int intervalClass = GetInterval(transstring); - return IntervalToCircleOfFifths(intervalClass); + int intervalClass = this->GetInterval(transstring); + return this->IntervalToCircleOfFifths(intervalClass); } int Transposer::IntervalToCircleOfFifths(int transval) @@ -1389,8 +1389,8 @@ int Transposer::IntervalToCircleOfFifths(int transval) transval %= m_base; } - int p5 = PerfectFifthClass(); - int p4 = PerfectFourthClass(); + int p5 = this->PerfectFifthClass(); + int p4 = this->PerfectFourthClass(); for (int i = 1; i < m_base; i++) { if ((p5 * i) % m_base == transval) { return i; @@ -1414,10 +1414,10 @@ int Transposer::CircleOfFifthsToIntervalClass(int fifths) return 0; } else if (fifths > 0) { - return (PerfectFifthClass() * fifths) % m_base; + return (this->PerfectFifthClass() * fifths) % m_base; } else { - return (PerfectFourthClass() * (-fifths)) % m_base; + return (this->PerfectFourthClass() * (-fifths)) % m_base; } } @@ -1429,8 +1429,8 @@ int Transposer::CircleOfFifthsToIntervalClass(int fifths) std::string Transposer::CircleOfFifthsToIntervalName(int fifths) { - int intervalClass = CircleOfFifthsToIntervalClass(fifths); - return GetIntervalName(intervalClass); + int intervalClass = this->CircleOfFifthsToIntervalClass(fifths); + return this->GetIntervalName(intervalClass); } ////////////////////////////// @@ -1442,8 +1442,8 @@ std::string Transposer::CircleOfFifthsToIntervalName(int fifths) TransPitch Transposer::CircleOfFifthsToMajorTonic(int fifths) { - int intervalClass = CircleOfFifthsToIntervalClass(fifths); - return IntegerPitchToTransPitch((GetCPitchClass() + intervalClass) % GetBase()); + int intervalClass = this->CircleOfFifthsToIntervalClass(fifths); + return this->IntegerPitchToTransPitch((this->GetCPitchClass() + intervalClass) % this->GetBase()); } ////////////////////////////// @@ -1455,8 +1455,8 @@ TransPitch Transposer::CircleOfFifthsToMajorTonic(int fifths) TransPitch Transposer::CircleOfFifthsToMinorTonic(int fifths) { - int intervalClass = CircleOfFifthsToIntervalClass(fifths); - return IntegerPitchToTransPitch((GetAPitchClass() + intervalClass) % GetBase()); + int intervalClass = this->CircleOfFifthsToIntervalClass(fifths); + return this->IntegerPitchToTransPitch((this->GetAPitchClass() + intervalClass) % this->GetBase()); } ////////////////////////////// @@ -1468,8 +1468,8 @@ TransPitch Transposer::CircleOfFifthsToMinorTonic(int fifths) TransPitch Transposer::CircleOfFifthsToDorianTonic(int fifths) { - int intervalClass = CircleOfFifthsToIntervalClass(fifths); - return IntegerPitchToTransPitch((GetDPitchClass() + intervalClass) % GetBase()); + int intervalClass = this->CircleOfFifthsToIntervalClass(fifths); + return this->IntegerPitchToTransPitch((this->GetDPitchClass() + intervalClass) % this->GetBase()); } ////////////////////////////// @@ -1481,8 +1481,8 @@ TransPitch Transposer::CircleOfFifthsToDorianTonic(int fifths) TransPitch Transposer::CircleOfFifthsToPhrygianTonic(int fifths) { - int intervalClass = CircleOfFifthsToIntervalClass(fifths); - return IntegerPitchToTransPitch((GetEPitchClass() + intervalClass) % GetBase()); + int intervalClass = this->CircleOfFifthsToIntervalClass(fifths); + return this->IntegerPitchToTransPitch((this->GetEPitchClass() + intervalClass) % this->GetBase()); } ////////////////////////////// @@ -1494,8 +1494,8 @@ TransPitch Transposer::CircleOfFifthsToPhrygianTonic(int fifths) TransPitch Transposer::CircleOfFifthsToLydianTonic(int fifths) { - int intervalClass = CircleOfFifthsToIntervalClass(fifths); - return IntegerPitchToTransPitch((GetFPitchClass() + intervalClass) % GetBase()); + int intervalClass = this->CircleOfFifthsToIntervalClass(fifths); + return this->IntegerPitchToTransPitch((this->GetFPitchClass() + intervalClass) % this->GetBase()); } ////////////////////////////// @@ -1507,8 +1507,8 @@ TransPitch Transposer::CircleOfFifthsToLydianTonic(int fifths) TransPitch Transposer::CircleOfFifthsToMixolydianTonic(int fifths) { - int intervalClass = CircleOfFifthsToIntervalClass(fifths); - return IntegerPitchToTransPitch((GetGPitchClass() + intervalClass) % GetBase()); + int intervalClass = this->CircleOfFifthsToIntervalClass(fifths); + return this->IntegerPitchToTransPitch((this->GetGPitchClass() + intervalClass) % this->GetBase()); } ////////////////////////////// @@ -1520,8 +1520,8 @@ TransPitch Transposer::CircleOfFifthsToMixolydianTonic(int fifths) TransPitch Transposer::CircleOfFifthsToLocrianTonic(int fifths) { - int intervalClass = CircleOfFifthsToIntervalClass(fifths); - return IntegerPitchToTransPitch((GetBPitchClass() + intervalClass) % GetBase()); + int intervalClass = this->CircleOfFifthsToIntervalClass(fifths); + return this->IntegerPitchToTransPitch((this->GetBPitchClass() + intervalClass) % this->GetBase()); } ////////////////////////////// @@ -1697,8 +1697,8 @@ std::string Transposer::DiatonicChromaticToIntervalName(int diatonic, int chroma int Transposer::DiatonicChromaticToIntervalClass(int diatonic, int chromatic) { - std::string intervalName = DiatonicChromaticToIntervalName(diatonic, chromatic); - return GetInterval(intervalName); + std::string intervalName = this->DiatonicChromaticToIntervalName(diatonic, chromatic); + return this->GetInterval(intervalName); } ////////////////////////////// @@ -1708,8 +1708,8 @@ int Transposer::DiatonicChromaticToIntervalClass(int diatonic, int chromatic) void Transposer::IntervalToDiatonicChromatic(int &diatonic, int &chromatic, int intervalClass) { - std::string intervalName = GetIntervalName(intervalClass); - IntervalToDiatonicChromatic(diatonic, chromatic, intervalName); + std::string intervalName = this->GetIntervalName(intervalClass); + this->IntervalToDiatonicChromatic(diatonic, chromatic, intervalName); } void Transposer::IntervalToDiatonicChromatic(int &diatonic, int &chromatic, const std::string &intervalName) diff --git a/src/trill.cpp b/src/trill.cpp index 82f65cd720c..bb0c0ea180f 100644 --- a/src/trill.cpp +++ b/src/trill.cpp @@ -35,16 +35,16 @@ Trill::Trill() , AttOrnamentAccid() , AttPlacementRelStaff() { - RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_EXTENDER); - RegisterAttClass(ATT_EXTSYM); - RegisterAttClass(ATT_LINEREND); - RegisterAttClass(ATT_NNUMBERLIKE); - RegisterAttClass(ATT_ORNAMENTACCID); - RegisterAttClass(ATT_PLACEMENTRELSTAFF); - - Reset(); + this->RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_EXTENDER); + this->RegisterAttClass(ATT_EXTSYM); + this->RegisterAttClass(ATT_LINEREND); + this->RegisterAttClass(ATT_NNUMBERLIKE); + this->RegisterAttClass(ATT_ORNAMENTACCID); + this->RegisterAttClass(ATT_PLACEMENTRELSTAFF); + + this->Reset(); } Trill::~Trill() {} @@ -53,25 +53,25 @@ void Trill::Reset() { ControlElement::Reset(); TimeSpanningInterface::Reset(); - ResetColor(); - ResetExtender(); - ResetExtSym(); - ResetLineRend(); - ResetNNumberLike(); - ResetOrnamentAccid(); - ResetPlacementRelStaff(); + this->ResetColor(); + this->ResetExtender(); + this->ResetExtSym(); + this->ResetLineRend(); + this->ResetNNumberLike(); + this->ResetOrnamentAccid(); + this->ResetPlacementRelStaff(); } wchar_t Trill::GetTrillGlyph() const { // If there is glyph.num, return glyph based on it - if (HasGlyphNum()) { - wchar_t code = GetGlyphNum(); + if (this->HasGlyphNum()) { + wchar_t code = this->GetGlyphNum(); if (NULL != Resources::GetGlyph(code)) return code; } // If there is glyph.name (second priority) - else if (HasGlyphName()) { - wchar_t code = Resources::GetGlyphCode(GetGlyphName()); + else if (this->HasGlyphName()) { + wchar_t code = Resources::GetGlyphCode(this->GetGlyphName()); if (NULL != Resources::GetGlyph(code)) return code; } diff --git a/src/tuning.cpp b/src/tuning.cpp index b84bbaf50c4..c493a238adc 100644 --- a/src/tuning.cpp +++ b/src/tuning.cpp @@ -28,9 +28,9 @@ static const ClassRegistrar s_factory("tuning", TUNING); Tuning::Tuning() : Object(TUNING, "tuning-"), AttCourseLog() { - RegisterAttClass(ATT_COURSELOG); + this->RegisterAttClass(ATT_COURSELOG); - Reset(); + this->Reset(); } Tuning::~Tuning() {} @@ -38,7 +38,7 @@ Tuning::~Tuning() {} void Tuning::Reset() { Object::Reset(); - ResetCourseLog(); + this->ResetCourseLog(); } bool Tuning::IsSupportedChild(Object *child) @@ -136,7 +136,7 @@ int Tuning::CalcPitchNumber(int course, int fret, data_NOTATIONTYPE notationType const int *pitch = nullptr; int pitchSize = 0; - switch (GetTuningStandard()) { + switch (this->GetTuningStandard()) { case COURSETUNING_guitar_standard: pitch = guitarStandardPitch; pitchSize = sizeof(guitarStandardPitch); diff --git a/src/tuplet.cpp b/src/tuplet.cpp index 74e32e3dde9..dedfdb6a165 100644 --- a/src/tuplet.cpp +++ b/src/tuplet.cpp @@ -44,12 +44,12 @@ Tuplet::Tuplet() , AttNumberPlacement() , AttTupletVis() { - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_DURATIONRATIO); - RegisterAttClass(ATT_NUMBERPLACEMENT); - RegisterAttClass(ATT_TUPLETVIS); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_DURATIONRATIO); + this->RegisterAttClass(ATT_NUMBERPLACEMENT); + this->RegisterAttClass(ATT_TUPLETVIS); - Reset(); + this->Reset(); } Tuplet::~Tuplet() {} @@ -57,10 +57,10 @@ Tuplet::~Tuplet() {} void Tuplet::Reset() { LayerElement::Reset(); - ResetColor(); - ResetDurationRatio(); - ResetNumberPlacement(); - ResetTupletVis(); + this->ResetColor(); + this->ResetDurationRatio(); + this->ResetNumberPlacement(); + this->ResetTupletVis(); m_drawingLeft = NULL; m_drawingRight = NULL; @@ -237,7 +237,7 @@ void Tuplet::AdjustTupletBracketY(Doc *doc, Staff *staff, int staffSize) void Tuplet::AdjustTupletNumY(Doc *doc, Staff *staff, int staffSize) { TupletNum *tupletNum = dynamic_cast(FindDescendantByType(TUPLET_NUM)); - if (!tupletNum || (GetNumVisible() == BOOLEAN_false)) return; + if (!tupletNum || (this->GetNumVisible() == BOOLEAN_false)) return; this->CalculateTupletNumCrossStaff(tupletNum); diff --git a/src/turn.cpp b/src/turn.cpp index b3f98125623..5c01e619821 100644 --- a/src/turn.cpp +++ b/src/turn.cpp @@ -35,14 +35,14 @@ Turn::Turn() , AttPlacementRelStaff() , AttTurnLog() { - RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_EXTSYM); - RegisterAttClass(ATT_ORNAMENTACCID); - RegisterAttClass(ATT_PLACEMENTRELSTAFF); - RegisterAttClass(ATT_TURNLOG); - - Reset(); + this->RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_EXTSYM); + this->RegisterAttClass(ATT_ORNAMENTACCID); + this->RegisterAttClass(ATT_PLACEMENTRELSTAFF); + this->RegisterAttClass(ATT_TURNLOG); + + this->Reset(); } Turn::~Turn() {} @@ -51,11 +51,11 @@ void Turn::Reset() { ControlElement::Reset(); TimePointInterface::Reset(); - ResetColor(); - ResetExtSym(); - ResetOrnamentAccid(); - ResetPlacementRelStaff(); - ResetTurnLog(); + this->ResetColor(); + this->ResetExtSym(); + this->ResetOrnamentAccid(); + this->ResetPlacementRelStaff(); + this->ResetTurnLog(); m_drawingEndElement = NULL; } @@ -63,17 +63,17 @@ void Turn::Reset() wchar_t Turn::GetTurnGlyph() const { // If there is glyph.num, prioritize it - if (HasGlyphNum()) { - wchar_t code = GetGlyphNum(); + if (this->HasGlyphNum()) { + wchar_t code = this->GetGlyphNum(); if (NULL != Resources::GetGlyph(code)) return code; } // If there is glyph.name (second priority) - else if (HasGlyphName()) { - wchar_t code = Resources::GetGlyphCode(GetGlyphName()); + else if (this->HasGlyphName()) { + wchar_t code = Resources::GetGlyphCode(this->GetGlyphName()); if (NULL != Resources::GetGlyph(code)) return code; } - return (GetForm() == turnLog_FORM_lower) ? SMUFL_E568_ornamentTurnInverted : SMUFL_E567_ornamentTurn; + return (this->GetForm() == turnLog_FORM_lower) ? SMUFL_E568_ornamentTurnInverted : SMUFL_E567_ornamentTurn; } //---------------------------------------------------------------------------- diff --git a/src/unclear.cpp b/src/unclear.cpp index afa05562b21..26f56be64d2 100644 --- a/src/unclear.cpp +++ b/src/unclear.cpp @@ -25,9 +25,9 @@ static const ClassRegistrar s_factory("unclear", UNCLEAR); Unclear::Unclear() : EditorialElement(UNCLEAR, "unclear-"), AttSource() { - RegisterAttClass(ATT_SOURCE); + this->RegisterAttClass(ATT_SOURCE); - Reset(); + this->Reset(); } Unclear::~Unclear() {} @@ -35,7 +35,7 @@ Unclear::~Unclear() {} void Unclear::Reset() { EditorialElement::Reset(); - ResetSource(); + this->ResetSource(); } //---------------------------------------------------------------------------- diff --git a/src/verse.cpp b/src/verse.cpp index d69e6032f2d..d6355ca9a60 100644 --- a/src/verse.cpp +++ b/src/verse.cpp @@ -35,12 +35,12 @@ static const ClassRegistrar s_factory("verse", VERSE); Verse::Verse() : LayerElement(VERSE, "verse-"), AttColor(), AttLang(), AttNInteger(), AttTypography() { - RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_LANG); - RegisterAttClass(ATT_NINTEGER); - RegisterAttClass(ATT_TYPOGRAPHY); + this->RegisterAttClass(ATT_COLOR); + this->RegisterAttClass(ATT_LANG); + this->RegisterAttClass(ATT_NINTEGER); + this->RegisterAttClass(ATT_TYPOGRAPHY); - Reset(); + this->Reset(); } Verse::~Verse() {} @@ -48,10 +48,10 @@ Verse::~Verse() {} void Verse::Reset() { LayerElement::Reset(); - ResetColor(); - ResetLang(); - ResetNInteger(); - ResetTypography(); + this->ResetColor(); + this->ResetLang(); + this->ResetNInteger(); + this->ResetTypography(); m_drawingLabelAbbr = NULL; } diff --git a/src/verticalaligner.cpp b/src/verticalaligner.cpp index beccb8230ea..06506486bb5 100644 --- a/src/verticalaligner.cpp +++ b/src/verticalaligner.cpp @@ -36,7 +36,7 @@ namespace vrv { SystemAligner::SystemAligner() : Object(SYSTEM_ALIGNER), m_bottomAlignment(NULL), m_system(NULL) { - Reset(); + this->Reset(); } SystemAligner::~SystemAligner() {} @@ -47,7 +47,7 @@ void SystemAligner::Reset() m_spacingTypes.clear(); m_system = NULL; m_bottomAlignment = NULL; - m_bottomAlignment = GetStaffAlignment(0, NULL, NULL); + m_bottomAlignment = this->GetStaffAlignment(0, NULL, NULL); } StaffAlignment *SystemAligner::GetStaffAlignment(int idx, Staff *staff, Doc *doc) @@ -60,20 +60,20 @@ StaffAlignment *SystemAligner::GetStaffAlignment(int idx, Staff *staff, Doc *doc children->pop_back(); } - if (idx < GetChildCount()) { + if (idx < this->GetChildCount()) { children->push_back(m_bottomAlignment); - return dynamic_cast(GetChildren()->at(idx)); + return dynamic_cast(this->GetChildren()->at(idx)); } // check that we are searching for the next one (not a gap) - assert(idx == GetChildCount()); + assert(idx == this->GetChildCount()); // LogDebug("Creating staff alignment"); // This is the first time we are looking for it (e.g., first staff) // We create the StaffAlignment StaffAlignment *alignment = new StaffAlignment(); - alignment->SetStaff(staff, doc, GetAboveSpacingType(staff)); + alignment->SetStaff(staff, doc, this->GetAboveSpacingType(staff)); alignment->SetParent(this); - alignment->SetParentSystem(GetSystem()); + alignment->SetParentSystem(this->GetSystem()); children->push_back(alignment); if (m_bottomAlignment) { @@ -87,7 +87,7 @@ StaffAlignment *SystemAligner::GetStaffAlignmentForStaffN(int staffN) const { StaffAlignment *alignment = NULL; for (int i = 0; i < this->GetChildCount(); ++i) { - alignment = vrv_cast(GetChildren()->at(i)); + alignment = vrv_cast(this->GetChildren()->at(i)); assert(alignment); if ((alignment->GetStaff()) && (alignment->GetStaff()->GetN() == staffN)) return alignment; @@ -99,7 +99,7 @@ StaffAlignment *SystemAligner::GetStaffAlignmentForStaffN(int staffN) const System *SystemAligner::GetSystem() { if (m_system == NULL) { - m_system = dynamic_cast(GetFirstAncestor(SYSTEM)); + m_system = dynamic_cast(this->GetFirstAncestor(SYSTEM)); } return m_system; } @@ -134,18 +134,18 @@ void SystemAligner::FindAllIntersectionPoints( int SystemAligner::GetOverflowAbove(const Doc *) const { - if (!GetChildCount() || GetChild(0) == m_bottomAlignment) return 0; + if (!this->GetChildCount() || this->GetChild(0) == m_bottomAlignment) return 0; - StaffAlignment *alignment = vrv_cast(GetChild(0)); + StaffAlignment *alignment = vrv_cast(this->GetChild(0)); assert(alignment); return alignment->GetOverflowAbove(); } int SystemAligner::GetOverflowBelow(const Doc *doc) const { - if (!GetChildCount() || GetChild(0) == m_bottomAlignment) return 0; + if (!this->GetChildCount() || this->GetChild(0) == m_bottomAlignment) return 0; - StaffAlignment *alignment = vrv_cast(GetChild(GetChildCount() - 2)); + StaffAlignment *alignment = vrv_cast(this->GetChild(this->GetChildCount() - 2)); assert(alignment); return alignment->GetOverflowBelow() + doc->GetBottomMargin(STAFF) * doc->GetDrawingUnit(alignment->GetStaffSize()); } @@ -186,7 +186,7 @@ SystemAligner::SpacingType SystemAligner::GetAboveSpacingType(Staff *staff) if (m_spacingTypes.empty()) { System *system = dynamic_cast(staff->GetFirstAncestor(SYSTEM)); ScoreDef *scoreDef = system ? system->GetDrawingScoreDef() : NULL; - SetSpacing(scoreDef); + this->SetSpacing(scoreDef); } auto iter = m_spacingTypes.find(staff->GetN()); @@ -295,7 +295,7 @@ int StaffAlignment::GetStaffSize() const const AttSpacing *StaffAlignment::GetAttSpacing() const { - System *system = GetParentSystem(); + System *system = this->GetParentSystem(); assert(system); return system->GetDrawingScoreDef(); @@ -400,7 +400,7 @@ double StaffAlignment::GetJustificationFactor(const Doc *doc) const case SystemAligner::SpacingType::None: break; default: assert(false); } - if (m_spacingType != SystemAligner::SpacingType::System) justificationFactor *= GetStaffSize() / 100.0; + if (m_spacingType != SystemAligner::SpacingType::System) justificationFactor *= this->GetStaffSize() / 100.0; } return justificationFactor; @@ -429,7 +429,7 @@ int StaffAlignment::CalcOverflowBelow(BoundingBox *box) int StaffAlignment::GetMinimumStaffSpacing(const Doc *doc, const AttSpacing *attSpacing) const { const auto &option = doc->GetOptions()->m_spacingStaff; - int spacing = option.GetValue() * doc->GetDrawingUnit(GetStaffSize()); + int spacing = option.GetValue() * doc->GetDrawingUnit(this->GetStaffSize()); if (!option.IsSet() && attSpacing->HasSpacingStaff()) { spacing = attSpacing->GetSpacingStaff() * doc->GetDrawingUnit(100); @@ -448,26 +448,26 @@ int StaffAlignment::GetMinimumSpacing(const Doc *doc) const spacing = m_staff->m_drawingStaffDef->GetSpacing() * doc->GetDrawingUnit(100); } else { - const AttSpacing *scoreDefSpacing = GetAttSpacing(); + const AttSpacing *scoreDefSpacing = this->GetAttSpacing(); switch (m_spacingType) { case SystemAligner::SpacingType::System: { - spacing = GetParentSystem()->GetMinimumSystemSpacing(doc); + spacing = this->GetParentSystem()->GetMinimumSystemSpacing(doc); break; } case SystemAligner::SpacingType::Staff: { - spacing = GetMinimumStaffSpacing(doc, scoreDefSpacing); + spacing = this->GetMinimumStaffSpacing(doc, scoreDefSpacing); break; } case SystemAligner::SpacingType::Brace: { const auto &option = doc->GetOptions()->m_spacingBraceGroup; - spacing = option.IsSet() ? option.GetValue() * doc->GetDrawingUnit(GetStaffSize()) - : GetMinimumStaffSpacing(doc, scoreDefSpacing); + spacing = option.IsSet() ? option.GetValue() * doc->GetDrawingUnit(this->GetStaffSize()) + : this->GetMinimumStaffSpacing(doc, scoreDefSpacing); break; } case SystemAligner::SpacingType::Bracket: { const auto &option = doc->GetOptions()->m_spacingBracketGroup; - spacing = option.IsSet() ? option.GetValue() * doc->GetDrawingUnit(GetStaffSize()) - : GetMinimumStaffSpacing(doc, scoreDefSpacing); + spacing = option.IsSet() ? option.GetValue() * doc->GetDrawingUnit(this->GetStaffSize()) + : this->GetMinimumStaffSpacing(doc, scoreDefSpacing); break; } case SystemAligner::SpacingType::None: break; @@ -483,36 +483,36 @@ int StaffAlignment::CalcMinimumRequiredSpacing(const Doc *doc) const { assert(doc); - Object *parent = GetParent(); + Object *parent = this->GetParent(); assert(parent); StaffAlignment *prevAlignment = dynamic_cast(parent->GetPrevious(this)); if (!prevAlignment) { - return GetOverflowAbove() + GetOverlap(); + return this->GetOverflowAbove() + this->GetOverlap(); } int overflowSum = 0; const bool verseCollapse = doc->GetOptions()->m_lyricVerseCollapse.GetValue(); if (prevAlignment->GetVerseCount(verseCollapse) > 0) { - overflowSum = prevAlignment->GetOverflowBelow() + GetOverflowAbove(); + overflowSum = prevAlignment->GetOverflowBelow() + this->GetOverflowAbove(); } else { // The maximum between the overflow below of the previous staff and the overflow above of the current - overflowSum = std::max(prevAlignment->GetOverflowBelow(), GetOverflowAbove()); + overflowSum = std::max(prevAlignment->GetOverflowBelow(), this->GetOverflowAbove()); // add overlap if there any - overflowSum += GetOverlap(); + overflowSum += this->GetOverlap(); } // Add a margin - overflowSum += doc->GetBottomMargin(STAFF) * doc->GetDrawingUnit(GetStaffSize()); + overflowSum += doc->GetBottomMargin(STAFF) * doc->GetDrawingUnit(this->GetStaffSize()); BoundingBox *previous = prevAlignment->GetOverflowBBoxBelow(); - BoundingBox *current = GetOverflowBBoxAbove(); + BoundingBox *current = this->GetOverflowBBoxAbove(); if (previous && current) { if ((current->Is(ARTIC) && previous->Is(ARTIC)) || (previous->Is(ARTIC) && current->Is(NOTE)) || (current->Is(ARTIC) && previous->Is(NOTE))) { - if (current->HorizontalContentOverlap(previous)) overflowSum += doc->GetDrawingUnit(GetStaffSize()); + if (current->HorizontalContentOverlap(previous)) overflowSum += doc->GetDrawingUnit(this->GetStaffSize()); } } @@ -935,7 +935,7 @@ int StaffAlignment::AdjustSlurs(FunctorParams *functorParams) } // Adjust positioning of slurs with common start/end - Staff *staff = GetStaff(); + Staff *staff = this->GetStaff(); if (staff) { const int unit = params->m_doc->GetDrawingUnit(staff->m_drawingStaffSize); for (size_t i = 0; i + 1 < positioners.size(); ++i) { @@ -1031,10 +1031,10 @@ int StaffAlignment::AlignVerticallyEnd(FunctorParams *functorParams) assert(params); if (m_spacingType != SystemAligner::SpacingType::System) { - params->m_cumulatedShift += GetMinimumSpacing(params->m_doc); + params->m_cumulatedShift += this->GetMinimumSpacing(params->m_doc); } - SetYRel(-params->m_cumulatedShift); + this->SetYRel(-params->m_cumulatedShift); params->m_cumulatedShift += m_staffHeight; params->m_staffIdx++; @@ -1047,8 +1047,8 @@ int StaffAlignment::AdjustYPos(FunctorParams *functorParams) AdjustYPosParams *params = vrv_params_cast(functorParams); assert(params); - const int defaultSpacing = GetMinimumSpacing(params->m_doc); - const int minSpacing = CalcMinimumRequiredSpacing(params->m_doc); + const int defaultSpacing = this->GetMinimumSpacing(params->m_doc); + const int minSpacing = this->CalcMinimumRequiredSpacing(params->m_doc); if (m_spacingType == SystemAligner::SpacingType::System) { params->m_cumulatedShift += minSpacing; @@ -1057,7 +1057,7 @@ int StaffAlignment::AdjustYPos(FunctorParams *functorParams) params->m_cumulatedShift += minSpacing - defaultSpacing; } - SetYRel(GetYRel() - params->m_cumulatedShift); + this->SetYRel(this->GetYRel() - params->m_cumulatedShift); return FUNCTOR_CONTINUE; } diff --git a/src/view.cpp b/src/view.cpp index 941551ce7da..fb8fc10722a 100644 --- a/src/view.cpp +++ b/src/view.cpp @@ -108,7 +108,7 @@ void View::Next(bool forward) else if (!forward && this->HasNext(false)) { m_pageIdx--; } - SetPage(m_pageIdx); + this->SetPage(m_pageIdx); } int View::ToDeviceContextX(int i) diff --git a/src/view_beam.cpp b/src/view_beam.cpp index 8439f63b122..a008760a0b3 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -76,13 +76,13 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf /******************************************************************/ // Draw the children - DrawLayerChildren(dc, beam, layer, staff, measure); + this->DrawLayerChildren(dc, beam, layer, staff, measure); /******************************************************************/ // Draw the beamSegment - but not if it is a secondary beam in a stem.sameas if (!beam->m_beamSegment.StemSameasIsSecondary()) - DrawBeamSegment(dc, &beam->m_beamSegment, beam, layer, staff, measure); + this->DrawBeamSegment(dc, &beam->m_beamSegment, beam, layer, staff, measure); dc->EndGraphic(element, this); } @@ -137,7 +137,7 @@ void View::DrawFTrem(DeviceContext *dc, LayerElement *element, Layer *layer, Sta /******************************************************************/ // Draw the children - DrawLayerChildren(dc, fTrem, layer, staff, measure); + this->DrawLayerChildren(dc, fTrem, layer, staff, measure); /******************************************************************/ // Draw the stems and the bars @@ -187,7 +187,7 @@ void View::DrawFTrem(DeviceContext *dc, LayerElement *element, Layer *layer, Sta } for (int j = 0; j < fullBars; ++j) { - DrawObliquePolygon(dc, x1, y1, x2, y2, polygonHeight); + this->DrawObliquePolygon(dc, x1, y1, x2, y2, polygonHeight); y1 += polygonHeight; y2 += polygonHeight; y1 += dy1 * fTrem->m_beamWidthWhite; @@ -207,7 +207,7 @@ void View::DrawFTrem(DeviceContext *dc, LayerElement *element, Layer *layer, Sta y2 -= space * fTrem->m_beamSegment.m_beamSlope; for (int j = 0; j < floatingBars; ++j) { - DrawObliquePolygon(dc, x1, y1, x2, y2, polygonHeight); + this->DrawObliquePolygon(dc, x1, y1, x2, y2, polygonHeight); y1 += polygonHeight; y2 += polygonHeight; y1 += dy1 * fTrem->m_beamWidthWhite; @@ -261,7 +261,7 @@ void View::DrawBeamSegment(DeviceContext *dc, BeamSegment *beamSegment, BeamDraw // s_y = 0 and s_y2 = 0 respectively const int polygonHeight = beamInterface->m_beamWidthBlack * shiftY; - DrawObliquePolygon(dc, x1, y1, x2, y2, polygonHeight); + this->DrawObliquePolygon(dc, x1, y1, x2, y2, polygonHeight); /******************************************************************/ // Draw the beam for partial bars (if any) @@ -398,7 +398,7 @@ void View::DrawBeamSegment(DeviceContext *dc, BeamSegment *beamSegment, BeamDraw if (i >= noteCount - 1) continue; // assert for debug and skip otherwise y1 = beamElementCoords->at(idx)->m_yBeam + barYPos; y2 = beamElementCoords->at(noteIndexes.at(i + 1))->m_yBeam + barYPos; - DrawObliquePolygon(dc, beamElementCoords->at(idx)->m_x, y1, + this->DrawObliquePolygon(dc, beamElementCoords->at(idx)->m_x, y1, beamElementCoords->at(noteIndexes.at(i + 1))->m_x, y2, polygonHeight); } else if (beamElementCoords->at(idx)->m_partialFlags[testDur - durRef] == PARTIAL_RIGHT) { @@ -406,14 +406,14 @@ void View::DrawBeamSegment(DeviceContext *dc, BeamSegment *beamSegment, BeamDraw int x2 = beamElementCoords->at(idx)->m_x + fractBeamWidth; y2 = beamSegment->m_firstNoteOrChord->m_yBeam + barYPos + beamSegment->m_beamSlope * (x2 - beamSegment->m_firstNoteOrChord->m_x); - DrawObliquePolygon(dc, beamElementCoords->at(idx)->m_x, y1, x2, y2, polygonHeight); + this->DrawObliquePolygon(dc, beamElementCoords->at(idx)->m_x, y1, x2, y2, polygonHeight); } else if (beamElementCoords->at(idx)->m_partialFlags[testDur - durRef] == PARTIAL_LEFT) { y2 = beamElementCoords->at(idx)->m_yBeam + barYPos; int x1 = beamElementCoords->at(idx)->m_x - fractBeamWidth; y1 = beamSegment->m_firstNoteOrChord->m_yBeam + barYPos + beamSegment->m_beamSlope * (x1 - beamSegment->m_firstNoteOrChord->m_x); - DrawObliquePolygon(dc, x1, y1, beamElementCoords->at(idx)->m_x, y2, polygonHeight); + this->DrawObliquePolygon(dc, x1, y1, beamElementCoords->at(idx)->m_x, y2, polygonHeight); } } diff --git a/src/view_control.cpp b/src/view_control.cpp index e0ee53ec535..b7459a12e58 100644 --- a/src/view_control.cpp +++ b/src/view_control.cpp @@ -84,71 +84,71 @@ void View::DrawControlElement(DeviceContext *dc, ControlElement *element, Measur else if (element->Is(ARPEG)) { Arpeg *arpeg = vrv_cast(element); assert(arpeg); - DrawArpeg(dc, arpeg, measure, system); + this->DrawArpeg(dc, arpeg, measure, system); } else if (element->Is(BREATH)) { Breath *breath = vrv_cast(element); assert(breath); - DrawBreath(dc, breath, measure, system); + this->DrawBreath(dc, breath, measure, system); } else if (element->Is(DIR)) { Dir *dir = vrv_cast(element); assert(dir); - DrawDir(dc, dir, measure, system); + this->DrawDir(dc, dir, measure, system); system->AddToDrawingListIfNeccessary(dir); } else if (element->Is(DYNAM)) { Dynam *dynam = vrv_cast(element); assert(dynam); - DrawDynam(dc, dynam, measure, system); + this->DrawDynam(dc, dynam, measure, system); system->AddToDrawingListIfNeccessary(dynam); } else if (element->Is(FERMATA)) { Fermata *fermata = vrv_cast(element); assert(fermata); - DrawFermata(dc, fermata, measure, system); + this->DrawFermata(dc, fermata, measure, system); } else if (element->Is(FING)) { Fing *fing = vrv_cast(element); assert(fing); - DrawFing(dc, fing, measure, system); + this->DrawFing(dc, fing, measure, system); } else if (element->Is(HARM)) { Harm *harm = vrv_cast(element); assert(harm); - DrawHarm(dc, harm, measure, system); + this->DrawHarm(dc, harm, measure, system); } else if (element->Is(MORDENT)) { Mordent *mordent = vrv_cast(element); assert(mordent); - DrawMordent(dc, mordent, measure, system); + this->DrawMordent(dc, mordent, measure, system); } else if (element->Is(PEDAL)) { Pedal *pedal = vrv_cast(element); assert(pedal); - DrawPedal(dc, pedal, measure, system); + this->DrawPedal(dc, pedal, measure, system); system->AddToDrawingListIfNeccessary(pedal); } else if (element->Is(REH)) { Reh *reh = vrv_cast(element); assert(reh); - DrawReh(dc, reh, measure, system); + this->DrawReh(dc, reh, measure, system); } else if (element->Is(TEMPO)) { Tempo *tempo = vrv_cast(element); assert(tempo); - DrawTempo(dc, tempo, measure, system); + this->DrawTempo(dc, tempo, measure, system); } else if (element->Is(TRILL)) { Trill *trill = vrv_cast(element); assert(trill); - DrawTrill(dc, trill, measure, system); + this->DrawTrill(dc, trill, measure, system); system->AddToDrawingListIfNeccessary(trill); } else if (element->Is(TURN)) { Turn *turn = vrv_cast(element); assert(turn); - DrawTurn(dc, turn, measure, system); + this->DrawTurn(dc, turn, measure, system); } } @@ -303,35 +303,37 @@ void View::DrawTimeSpanningElement(DeviceContext *dc, Object *element, System *s if (element->Is(DIR)) { // cast to Dir check in DrawControlElementConnector - DrawControlElementConnector(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); + this->DrawControlElementConnector( + dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } else if (element->Is(DYNAM)) { // cast to Dynam check in DrawControlElementConnector - DrawControlElementConnector(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); + this->DrawControlElementConnector( + dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } else if (element->Is(FIGURE)) { // cast to F check in DrawFConnector - DrawFConnector(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); + this->DrawFConnector(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } else if (element->Is(BRACKETSPAN)) { // cast to BracketSpan check in DrawBracketSpan - DrawBracketSpan(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); + this->DrawBracketSpan(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } else if (element->Is(GLISS)) { // For gliss we limit support to one value in @staff if (staffIter != staffList.begin()) continue; // cast to Gliss check in DrawGliss - DrawGliss(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); + this->DrawGliss(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } else if (element->Is(HAIRPIN)) { // cast to Hairpin check in DrawHairpin - DrawHairpin(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); + this->DrawHairpin(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } else if (element->Is(LV)) { // For ties we limit support to one value in @staff if (staffIter != staffList.begin()) continue; // cast to Tie check in DrawTie - DrawTie(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); + this->DrawTie(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } else if (element->Is(PHRASE)) { // Check if slurs should be ignored @@ -339,18 +341,18 @@ void View::DrawTimeSpanningElement(DeviceContext *dc, Object *element, System *s // For phrases (slurs) we limit support to one value in @staff if (staffIter != staffList.begin()) continue; // cast to Slur check in DrawSlur - DrawSlur(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); + this->DrawSlur(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } else if (element->Is(OCTAVE)) { // cast to Slur check in DrawOctave - DrawOctave(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); + this->DrawOctave(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } else if (element->Is(PEDAL)) { - DrawPedalLine(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); + this->DrawPedalLine(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } else if (element->Is(PITCHINFLECTION)) { // cast to PitchInflection check in DrawPitchInflection - DrawPitchInflection( + this->DrawPitchInflection( dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } else if (element->Is(SLUR)) { @@ -359,23 +361,23 @@ void View::DrawTimeSpanningElement(DeviceContext *dc, Object *element, System *s // For slurs we limit support to one value in @staff if (staffIter != staffList.begin()) continue; // cast to Slur check in DrawSlur - DrawSlur(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); + this->DrawSlur(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } else if (element->Is(SYL)) { // prolong to the end of the notehead x2 += endRadius; // cast to Syl check in DrawSylConnector - DrawSylConnector(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); + this->DrawSylConnector(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } else if (element->Is(TIE)) { // For ties we limit support to one value in @staff if (staffIter != staffList.begin()) continue; // cast to Slur check in DrawTie - DrawTie(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); + this->DrawTie(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } else if (element->Is(TRILL)) { // cast to Trill check in DrawTrill - DrawTrillExtension(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); + this->DrawTrillExtension(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } } } @@ -488,22 +490,22 @@ void View::DrawBracketSpan( // Do not draw the horizontal line if the lines is dashed or solid as a full line will be drawn below // (Do draw the horizontal line for dotted lines as it looks better) if ((bracketSpan->GetLform() != LINEFORM_dashed) && (bracketSpan->GetLform() != LINEFORM_solid)) { - DrawFilledRectangle(dc, x1, y, x1 + bracketSize, y + lineWidth); + this->DrawFilledRectangle(dc, x1, y, x1 + bracketSize, y + lineWidth); } - DrawFilledRectangle(dc, x1, y, x1 + lineWidth, y - bracketSize); + this->DrawFilledRectangle(dc, x1, y, x1 + lineWidth, y - bracketSize); } // Closing bracket if ((spanningType == SPANNING_START_END) || (spanningType == SPANNING_END)) { // Ditto if ((bracketSpan->GetLform() != LINEFORM_dashed) && (bracketSpan->GetLform() != LINEFORM_solid)) { - DrawFilledRectangle(dc, x2 - bracketSize, y, x2, y + lineWidth); + this->DrawFilledRectangle(dc, x2 - bracketSize, y, x2, y + lineWidth); } - DrawFilledRectangle(dc, x2 - lineWidth, y, x2, y - bracketSize); + this->DrawFilledRectangle(dc, x2 - lineWidth, y, x2, y - bracketSize); } // We have a @lform - draw a full line if (bracketSpan->HasLform()) { if (bracketSpan->GetLform() == LINEFORM_solid) { - DrawFilledRectangle(dc, x1, y, x2, y - lineWidth); + this->DrawFilledRectangle(dc, x1, y, x2, y - lineWidth); } else if (bracketSpan->GetLform() == LINEFORM_dashed) { dc->SetPen(m_currentColour, lineWidth, AxSOLID, bracketSize); @@ -655,8 +657,8 @@ void View::DrawHairpin( const double hairpinThickness = m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * m_options->m_hairpinThickness.GetValue(); - DrawObliquePolygon(dc, x1, y1 - startY / 2, x2, y2 - endY / 2, hairpinThickness); - DrawObliquePolygon(dc, x1, y1 + startY / 2, x2, y2 + endY / 2, hairpinThickness); + this->DrawObliquePolygon(dc, x1, y1 - startY / 2, x2, y2 - endY / 2, hairpinThickness); + this->DrawObliquePolygon(dc, x1, y1 + startY / 2, x2, y2 + endY / 2, hairpinThickness); // dc->ReactivateGraphic(); if (graphic) @@ -750,7 +752,7 @@ void View::DrawOctave( dc->GetSmuflTextExtent(str, &extend); const int yCode = (disPlace == STAFFREL_basic_above) ? y1 - extend.m_height : y1; const int octaveX = altSymbols ? x1 - extend.m_width / 2 : x1 - extend.m_width; - DrawSmuflCode(dc, octaveX, yCode, code, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, octaveX, yCode, code, staff->m_drawingStaffSize, false); dc->ResetFont(); if (octave->GetExtender() != BOOLEAN_false) { @@ -951,7 +953,7 @@ void View::DrawTie(DeviceContext *dc, Tie *tie, int x1, int x2, Staff *staff, ch if (m_tieThicknessCoefficient <= 0) { m_tieThicknessCoefficient = BoundingBox::GetBezierThicknessCoefficient(bezier, thickness, 0, penWidth); } - DrawThickBezierCurve( + this->DrawThickBezierCurve( dc, bezier, m_tieThicknessCoefficient * thickness, staff->m_drawingStaffSize, penWidth, 0, penStyle); if (graphic) dc->EndResumedGraphic(graphic, this); @@ -1010,15 +1012,15 @@ void View::DrawPedalLine( // Opening bracket if ((spanningType == SPANNING_START_END) || (spanningType == SPANNING_START)) { - DrawFilledRectangle(dc, x1, y, x1 + bracketSize / 2, y + lineWidth); - DrawFilledRectangle(dc, x1, y, x1 + lineWidth, y + bracketSize); + this->DrawFilledRectangle(dc, x1, y, x1 + bracketSize / 2, y + lineWidth); + this->DrawFilledRectangle(dc, x1, y, x1 + lineWidth, y + bracketSize); } // Closing bracket if ((spanningType == SPANNING_START_END) || (spanningType == SPANNING_END)) { - DrawFilledRectangle(dc, x2 - bracketSize / 2, y, x2, y + lineWidth); - DrawFilledRectangle(dc, x2 - lineWidth, y, x2, y + bracketSize); + this->DrawFilledRectangle(dc, x2 - bracketSize / 2, y, x2, y + lineWidth); + this->DrawFilledRectangle(dc, x2 - lineWidth, y, x2, y + bracketSize); } - DrawFilledRectangle(dc, x1 + bracketSize / 2, y, x2 - bracketSize / 2, y + lineWidth); + this->DrawFilledRectangle(dc, x1 + bracketSize / 2, y, x2 - bracketSize / 2, y + lineWidth); if (graphic) { dc->EndResumedGraphic(graphic, this); @@ -1062,7 +1064,7 @@ void View::DrawTrillExtension( else dc->StartGraphic(trill, "", trill->GetUuid(), false); - DrawSmuflLine(dc, orig, length, staff->m_drawingStaffSize, false, SMUFL_E59D_ornamentZigZagLineNoRightEnd, 0, + this->DrawSmuflLine(dc, orig, length, staff->m_drawingStaffSize, false, SMUFL_E59D_ornamentZigZagLineNoRightEnd, 0, SMUFL_E59E_ornamentZigZagLineWithRightEnd); if (graphic) @@ -1149,7 +1151,7 @@ void View::DrawControlElementConnector( int x = x1 + margin + (i * dashSpace); x = std::max(x, x1); - DrawFilledRectangle(dc, x - halfDashLength, y, x + halfDashLength, y + width); + this->DrawFilledRectangle(dc, x - halfDashLength, y, x + halfDashLength, y + width); } if (deactivate) { @@ -1171,7 +1173,7 @@ void View::DrawFConnector(DeviceContext *dc, F *f, int x1, int x2, Staff *staff, assert(f->GetStart() && f->GetEnd()); if (!f->GetStart() || !f->GetEnd()) return; - const int y = GetFYRel(f, staff); + const int y = this->GetFYRel(f, staff); TextExtend extend; // The both correspond to the current system, which means no system break in-between (simple case) @@ -1204,7 +1206,7 @@ void View::DrawFConnector(DeviceContext *dc, F *f, int x1, int x2, Staff *staff, int width = m_options->m_lyricLineThickness.GetValue() * m_doc->GetDrawingUnit(staff->m_drawingStaffSize); // Adjust it proportionally to the lyric size width *= m_options->m_lyricSize.GetValue() / m_options->m_lyricSize.GetDefault(); - DrawFilledRectangle(dc, x1, y, x2, y + width); + this->DrawFilledRectangle(dc, x1, y, x2, y + width); dc->ReactivateGraphic(); @@ -1222,7 +1224,7 @@ void View::DrawSylConnector( assert(syl->GetStart() && syl->GetEnd()); if (!syl->GetStart() || !syl->GetEnd()) return; - const int y = staff->GetDrawingY() + GetSylYRel(syl->m_drawingVerse, staff); + const int y = staff->GetDrawingY() + this->GetSylYRel(syl->m_drawingVerse, staff); // Invalid bounding boxes might occur for empty syllables without text child if (!syl->HasContentHorizontalBB()) return; @@ -1275,7 +1277,7 @@ void View::DrawSylConnector( dc->DeactivateGraphic(); - DrawSylConnectorLines(dc, x1, x2, y, syl, staff); + this->DrawSylConnectorLines(dc, x1, x2, y, syl, staff); dc->ReactivateGraphic(); @@ -1328,14 +1330,14 @@ void View::DrawSylConnectorLines(DeviceContext *dc, int x1, int x2, int y, Syl * int x = x1 + margin + (i * dashSpace); x = std::max(x, x1); - DrawFilledRectangle(dc, x - halfDashLength, y, x + halfDashLength, y + thickness); + this->DrawFilledRectangle(dc, x - halfDashLength, y, x + halfDashLength, y + thickness); } - // DrawFilledRectangle(dc, x1, y, x2, y + width); + // this->DrawFilledRectangle(dc, x1, y, x2, y + width); } else if (syl->GetCon() == sylLog_CON_u) { x1 += (int)m_doc->GetDrawingUnit(staff->m_drawingStaffSize) / 2; if (x2 > x1) { - DrawFilledRectangle(dc, x1, y, x2, y + thickness); + this->DrawFilledRectangle(dc, x1, y, x2, y + thickness); } } } @@ -1482,7 +1484,7 @@ void View::DrawBreath(DeviceContext *dc, Breath *breath, Measure *measure, Syste int y = breath->GetDrawingY(); dc->SetFont(m_doc->GetDrawingSmuflFont((*staffIter)->m_drawingStaffSize, false)); - DrawSmuflString(dc, x, y, str, alignment, (*staffIter)->m_drawingStaffSize); + this->DrawSmuflString(dc, x, y, str, alignment, (*staffIter)->m_drawingStaffSize); dc->ResetFont(); } @@ -1559,7 +1561,7 @@ void View::DrawDir(DeviceContext *dc, Dir *dir, Measure *measure, System *system dc->ResetFont(); dc->ResetBrush(); - DrawTextEnclosure(dc, params, (*staffIter)->m_drawingStaffSize); + this->DrawTextEnclosure(dc, params, (*staffIter)->m_drawingStaffSize); } dc->EndGraphic(dir, this); @@ -1627,7 +1629,7 @@ void View::DrawDynam(DeviceContext *dc, Dynam *dynam, Measure *measure, System * // editorial element within the dynam as it would with text. Also, it is center only if it is a symbol. if (isSymbolOnly) { dc->SetFont(m_doc->GetDrawingSmuflFont((*staffIter)->m_drawingStaffSize, false)); - DrawSmuflString(dc, params.m_x, params.m_y, dynamSymbol, alignment, (*staffIter)->m_drawingStaffSize); + this->DrawSmuflString(dc, params.m_x, params.m_y, dynamSymbol, alignment, (*staffIter)->m_drawingStaffSize); dc->ResetFont(); } else { @@ -1635,13 +1637,13 @@ void View::DrawDynam(DeviceContext *dc, Dynam *dynam, Measure *measure, System * dc->SetFont(&dynamTxt); dc->StartText(ToDeviceContextX(params.m_x), ToDeviceContextY(params.m_y), alignment); - DrawTextChildren(dc, dynam, params); + this->DrawTextChildren(dc, dynam, params); dc->EndText(); dc->ResetFont(); dc->ResetBrush(); } - DrawTextEnclosure(dc, params, (*staffIter)->m_drawingStaffSize); + this->DrawTextEnclosure(dc, params, (*staffIter)->m_drawingStaffSize); } dc->EndGraphic(dynam, this); @@ -1667,11 +1669,11 @@ void View::DrawFb(DeviceContext *dc, Staff *staff, Fb *fb, TextDrawingParams &pa dc->StartText(ToDeviceContextX(params.m_x), ToDeviceContextY(params.m_y), HORIZONTALALIGNMENT_left); if (current->Is(FIGURE)) { // dynamic_cast assert in DrawF - DrawF(dc, dynamic_cast(current), params); + this->DrawF(dc, dynamic_cast(current), params); } else if (current->IsEditorialElement()) { // cast to EditorialElement check in DrawLayerEditorialElement - DrawFbEditorialElement(dc, dynamic_cast(current), params); + this->DrawFbEditorialElement(dc, dynamic_cast(current), params); } else { assert(false); @@ -1744,15 +1746,15 @@ void View::DrawFermata(DeviceContext *dc, Fermata *fermata, Measure *measure, Sy if (enclosingFront) { const int xCorrEncl = xCorr + m_doc->GetDrawingUnit(staff->m_drawingStaffSize) / 3 + m_doc->GetGlyphWidth(enclosingFront, staff->m_drawingStaffSize, drawingCueSize); - DrawSmuflCode(dc, x - xCorrEncl, y + enclosureYCorr + yCorr, enclosingFront, staff->m_drawingStaffSize, - drawingCueSize); + this->DrawSmuflCode(dc, x - xCorrEncl, y + enclosureYCorr + yCorr, enclosingFront, + staff->m_drawingStaffSize, drawingCueSize); } - DrawSmuflCode(dc, x - xCorr, y, code, staff->m_drawingStaffSize, drawingCueSize); + this->DrawSmuflCode(dc, x - xCorr, y, code, staff->m_drawingStaffSize, drawingCueSize); if (enclosingBack) { const int xCorrEncl = xCorr + m_doc->GetDrawingUnit(staff->m_drawingStaffSize) / 3; - DrawSmuflCode(dc, x + xCorrEncl, y + enclosureYCorr + yCorr, enclosingBack, staff->m_drawingStaffSize, + this->DrawSmuflCode(dc, x + xCorrEncl, y + enclosureYCorr + yCorr, enclosingBack, staff->m_drawingStaffSize, drawingCueSize); } @@ -1801,13 +1803,13 @@ void View::DrawFing(DeviceContext *dc, Fing *fing, Measure *measure, System *sys dc->SetFont(&fingTxt); dc->StartText(ToDeviceContextX(params.m_x), ToDeviceContextY(params.m_y), alignment); - DrawTextChildren(dc, fing, params); + this->DrawTextChildren(dc, fing, params); dc->EndText(); dc->ResetFont(); dc->ResetBrush(); - DrawTextEnclosure(dc, params, (*staffIter)->m_drawingStaffSize); + this->DrawTextEnclosure(dc, params, (*staffIter)->m_drawingStaffSize); } dc->EndGraphic(fing, this); @@ -1924,7 +1926,7 @@ void View::DrawGliss(DeviceContext *dc, Gliss *gliss, int x1, int x2, Staff *sta case LINEFORM_solid: default: { // only solid lines for now - DrawRoundedLine(dc, x1, y1, x2, y2, lineWidth); + this->DrawRoundedLine(dc, x1, y1, x2, y2, lineWidth); break; } } @@ -1977,7 +1979,7 @@ void View::DrawHarm(DeviceContext *dc, Harm *harm, Measure *measure, System *sys params.m_y = harm->GetDrawingY(); if (harm->GetFirst() && harm->GetFirst()->Is(FB)) { - DrawFb(dc, *staffIter, dynamic_cast(harm->GetFirst()), params); + this->DrawFb(dc, *staffIter, dynamic_cast(harm->GetFirst()), params); } else { params.m_pointSize = m_doc->GetDrawingLyricFont((*staffIter)->m_drawingStaffSize)->GetPointSize(); @@ -1988,13 +1990,13 @@ void View::DrawHarm(DeviceContext *dc, Harm *harm, Measure *measure, System *sys dc->SetFont(&harmTxt); dc->StartText(ToDeviceContextX(params.m_x), ToDeviceContextY(params.m_y), alignment); - DrawTextChildren(dc, harm, params); + this->DrawTextChildren(dc, harm, params); dc->EndText(); dc->ResetFont(); dc->ResetBrush(); - DrawTextEnclosure(dc, params, (*staffIter)->m_drawingStaffSize); + this->DrawTextEnclosure(dc, params, (*staffIter)->m_drawingStaffSize); } } @@ -2035,7 +2037,7 @@ void View::DrawMordent(DeviceContext *dc, Mordent *mordent, Measure *measure, Sy std::wstring accidStr; accidStr.push_back(accid); dc->SetFont(m_doc->GetDrawingSmuflFont((*staffIter)->m_drawingStaffSize, false)); - DrawSmuflString( + this->DrawSmuflString( dc, x, y, accidStr, HORIZONTALALIGNMENT_center, (*staffIter)->m_drawingStaffSize / 2, false); // Adjust the y position double factor = 1.0; @@ -2067,7 +2069,7 @@ void View::DrawMordent(DeviceContext *dc, Mordent *mordent, Measure *measure, Sy std::wstring accidStr; accidStr.push_back(accid); dc->SetFont(m_doc->GetDrawingSmuflFont((*staffIter)->m_drawingStaffSize, false)); - DrawSmuflString( + this->DrawSmuflString( dc, x, y, accidStr, HORIZONTALALIGNMENT_center, (*staffIter)->m_drawingStaffSize / 2, false); // Adjust the y position double factor = 1.75; @@ -2098,7 +2100,7 @@ void View::DrawMordent(DeviceContext *dc, Mordent *mordent, Measure *measure, Sy int drawingX = x - (1 + xShift) * m_doc->GetGlyphWidth(code, (*staffIter)->m_drawingStaffSize, false) / 2; dc->SetFont(m_doc->GetDrawingSmuflFont((*staffIter)->m_drawingStaffSize, false)); - DrawSmuflString(dc, drawingX, y, str, HORIZONTALALIGNMENT_left, (*staffIter)->m_drawingStaffSize); + this->DrawSmuflString(dc, drawingX, y, str, HORIZONTALALIGNMENT_left, (*staffIter)->m_drawingStaffSize); dc->ResetFont(); } @@ -2167,7 +2169,7 @@ void View::DrawPedal(DeviceContext *dc, Pedal *pedal, Measure *measure, System * const int y = pedal->GetDrawingY(); dc->SetFont(m_doc->GetDrawingSmuflFont((*staffIter)->m_drawingStaffSize, false)); - DrawSmuflString(dc, x, y, str, alignment, (*staffIter)->m_drawingStaffSize); + this->DrawSmuflString(dc, x, y, str, alignment, (*staffIter)->m_drawingStaffSize); dc->ResetFont(); } } @@ -2236,13 +2238,13 @@ void View::DrawReh(DeviceContext *dc, Reh *reh, Measure *measure, System *system dc->SetFont(&rehTxt); dc->StartText(ToDeviceContextX(params.m_x), ToDeviceContextY(params.m_y), alignment); - DrawTextChildren(dc, reh, params); + this->DrawTextChildren(dc, reh, params); dc->EndText(); dc->ResetFont(); dc->ResetBrush(); - DrawTextEnclosure(dc, params, (*staffIter)->m_drawingStaffSize); + this->DrawTextEnclosure(dc, params, (*staffIter)->m_drawingStaffSize); } dc->EndGraphic(reh, this); @@ -2298,13 +2300,13 @@ void View::DrawTempo(DeviceContext *dc, Tempo *tempo, Measure *measure, System * dc->SetFont(&tempoTxt); dc->StartText(ToDeviceContextX(params.m_x), ToDeviceContextY(params.m_y), alignment); - DrawTextChildren(dc, tempo, params); + this->DrawTextChildren(dc, tempo, params); dc->EndText(); dc->ResetFont(); dc->ResetBrush(); - DrawTextEnclosure(dc, params, (*staffIter)->m_drawingStaffSize); + this->DrawTextEnclosure(dc, params, (*staffIter)->m_drawingStaffSize); } dc->EndGraphic(tempo, this); @@ -2359,7 +2361,7 @@ void View::DrawTrill(DeviceContext *dc, Trill *trill, Measure *measure, System * accidStr.push_back(accid); dc->SetFont(m_doc->GetDrawingSmuflFont((*staffIter)->m_drawingStaffSize, false)); int accidY = y - m_doc->GetGlyphHeight(accid, (*staffIter)->m_drawingStaffSize, true) / 2; - DrawSmuflString(dc, x + accidXShift, accidY, accidStr, HORIZONTALALIGNMENT_center, + this->DrawSmuflString(dc, x + accidXShift, accidY, accidStr, HORIZONTALALIGNMENT_center, (*staffIter)->m_drawingStaffSize / 2, false); } else if (trill->HasAccidupper()) { @@ -2372,12 +2374,12 @@ void View::DrawTrill(DeviceContext *dc, Trill *trill, Measure *measure, System * accidStr.push_back(accid); dc->SetFont(m_doc->GetDrawingSmuflFont((*staffIter)->m_drawingStaffSize, false)); int accidY = y + trillHeight * 1.5; - DrawSmuflString(dc, x + accidXShift, accidY, accidStr, HORIZONTALALIGNMENT_center, + this->DrawSmuflString(dc, x + accidXShift, accidY, accidStr, HORIZONTALALIGNMENT_center, (*staffIter)->m_drawingStaffSize / 2, false); } dc->SetFont(m_doc->GetDrawingSmuflFont((*staffIter)->m_drawingStaffSize, false)); - DrawSmuflString(dc, x, y, str, alignment, (*staffIter)->m_drawingStaffSize); + this->DrawSmuflString(dc, x, y, str, alignment, (*staffIter)->m_drawingStaffSize); dc->ResetFont(); } @@ -2439,7 +2441,7 @@ void View::DrawTurn(DeviceContext *dc, Turn *turn, Measure *measure, System *sys std::wstring accidStr; accidStr.push_back(accid); int accidYShift = shift - m_doc->GetGlyphBottom(accid, (*staffIter)->m_drawingStaffSize, true); - DrawSmuflString(dc, x + accidXShift, y + accidYShift, accidStr, HORIZONTALALIGNMENT_center, + this->DrawSmuflString(dc, x + accidXShift, y + accidYShift, accidStr, HORIZONTALALIGNMENT_center, (*staffIter)->m_drawingStaffSize / 2, false); } if (turn->HasAccidlower()) { @@ -2450,11 +2452,11 @@ void View::DrawTurn(DeviceContext *dc, Turn *turn, Measure *measure, System *sys std::wstring accidStr; accidStr.push_back(accid); int accidYShift = -m_doc->GetGlyphHeight(accid, (*staffIter)->m_drawingStaffSize, true) / 2; - DrawSmuflString(dc, x + accidXShift, y + accidYShift, accidStr, HORIZONTALALIGNMENT_center, + this->DrawSmuflString(dc, x + accidXShift, y + accidYShift, accidStr, HORIZONTALALIGNMENT_center, (*staffIter)->m_drawingStaffSize / 2, false); } - DrawSmuflString(dc, x, y, str, alignment, (*staffIter)->m_drawingStaffSize); + this->DrawSmuflString(dc, x, y, str, alignment, (*staffIter)->m_drawingStaffSize); dc->ResetFont(); } @@ -2641,7 +2643,7 @@ void View::DrawEnding(DeviceContext *dc, Ending *ending, System *system) params.m_pointSize = currentFont.GetPointSize(); dc->StartText(ToDeviceContextX(params.m_x), ToDeviceContextY(params.m_y), HORIZONTALALIGNMENT_left); - DrawTextElement(dc, &text, params); + this->DrawTextElement(dc, &text, params); dc->EndText(); } @@ -2651,13 +2653,13 @@ void View::DrawEnding(DeviceContext *dc, Ending *ending, System *system) const int lineWidth = m_options->m_repeatEndingLineThickness.GetValue() * m_doc->GetDrawingUnit((*staffIter)->m_drawingStaffSize); - DrawFilledRectangle(dc, x1, y2, x2, y2 + lineWidth); + this->DrawFilledRectangle(dc, x1, y2, x2, y2 + lineWidth); if ((spanningType == SPANNING_START_END) || (spanningType == SPANNING_START)) { - DrawFilledRectangle(dc, x1, y1, x1 + lineWidth, y2); + this->DrawFilledRectangle(dc, x1, y1, x1 + lineWidth, y2); } if (((spanningType == SPANNING_START_END) || (spanningType == SPANNING_END)) && (ending->GetLendsym() != LINESTARTENDSYMBOL_none)) { - DrawFilledRectangle(dc, x2 - lineWidth, y1, x2, y2); + this->DrawFilledRectangle(dc, x2 - lineWidth, y1, x2, y2); } dc->EndCustomGraphic(); @@ -2681,7 +2683,7 @@ void View::DrawTextEnclosure(DeviceContext *dc, const TextDrawingParams ¶ms, int y2 = rend->GetContentTop() + staffSize; if (params.m_enclose == TEXTRENDITION_box) { - DrawNotFilledRectangle(dc, x1, y1, x2, y2, lineThickness, 0); + this->DrawNotFilledRectangle(dc, x1, y1, x2, y2, lineThickness, 0); } else if (params.m_enclose == TEXTRENDITION_circle) { const int width = std::abs(x2 - x1); @@ -2694,7 +2696,7 @@ void View::DrawTextEnclosure(DeviceContext *dc, const TextDrawingParams ¶ms, x1 -= (height - width) / 2; x2 += (height - width) / 2; } - DrawNotFilledEllipse(dc, x1, y1, x2, y2, lineThickness); + this->DrawNotFilledEllipse(dc, x1, y1, x2, y2, lineThickness); } } } diff --git a/src/view_element.cpp b/src/view_element.cpp index ef50e7ca2b5..ce582b26389 100644 --- a/src/view_element.cpp +++ b/src/view_element.cpp @@ -89,118 +89,118 @@ void View::DrawLayerElement(DeviceContext *dc, LayerElement *element, Layer *lay } if (element->Is(ACCID)) { - DrawAccid(dc, element, layer, staff, measure); + this->DrawAccid(dc, element, layer, staff, measure); } else if (element->Is(ARTIC)) { - DrawArtic(dc, element, layer, staff, measure); + this->DrawArtic(dc, element, layer, staff, measure); } else if (element->Is(BARLINE)) { - DrawBarLine(dc, element, layer, staff, measure); + this->DrawBarLine(dc, element, layer, staff, measure); } else if (element->Is(BEAM)) { - DrawBeam(dc, element, layer, staff, measure); + this->DrawBeam(dc, element, layer, staff, measure); } else if (element->Is(BEATRPT)) { - DrawBeatRpt(dc, element, layer, staff, measure); + this->DrawBeatRpt(dc, element, layer, staff, measure); } else if (element->Is(BTREM)) { - DrawBTrem(dc, element, layer, staff, measure); + this->DrawBTrem(dc, element, layer, staff, measure); } else if (element->Is(CHORD)) { - DrawDurationElement(dc, element, layer, staff, measure); + this->DrawDurationElement(dc, element, layer, staff, measure); } else if (element->Is(CLEF)) { - DrawClef(dc, element, layer, staff, measure); + this->DrawClef(dc, element, layer, staff, measure); } else if (element->Is(CUSTOS)) { - DrawCustos(dc, element, layer, staff, measure); + this->DrawCustos(dc, element, layer, staff, measure); } else if (element->Is(DOT)) { - DrawDot(dc, element, layer, staff, measure); + this->DrawDot(dc, element, layer, staff, measure); } else if (element->Is(DOTS)) { - DrawDots(dc, element, layer, staff, measure); + this->DrawDots(dc, element, layer, staff, measure); } else if (element->Is(FTREM)) { - DrawFTrem(dc, element, layer, staff, measure); + this->DrawFTrem(dc, element, layer, staff, measure); } else if (element->Is(FLAG)) { - DrawFlag(dc, element, layer, staff, measure); + this->DrawFlag(dc, element, layer, staff, measure); } else if (element->Is(GRACEGRP)) { - DrawGraceGrp(dc, element, layer, staff, measure); + this->DrawGraceGrp(dc, element, layer, staff, measure); } else if (element->Is(HALFMRPT)) { - DrawHalfmRpt(dc, element, layer, staff, measure); + this->DrawHalfmRpt(dc, element, layer, staff, measure); } else if (element->Is(KEYSIG)) { - DrawKeySig(dc, element, layer, staff, measure); + this->DrawKeySig(dc, element, layer, staff, measure); } else if (element->Is(LIGATURE)) { - DrawLigature(dc, element, layer, staff, measure); + this->DrawLigature(dc, element, layer, staff, measure); } else if (element->Is(MENSUR)) { - DrawMensur(dc, element, layer, staff, measure); + this->DrawMensur(dc, element, layer, staff, measure); } else if (element->Is(METERSIG)) { - DrawMeterSig(dc, element, layer, staff, measure); + this->DrawMeterSig(dc, element, layer, staff, measure); } else if (element->Is(MREST)) { - DrawMRest(dc, element, layer, staff, measure); + this->DrawMRest(dc, element, layer, staff, measure); } else if (element->Is(MRPT)) { - DrawMRpt(dc, element, layer, staff, measure); + this->DrawMRpt(dc, element, layer, staff, measure); } else if (element->Is(MRPT2)) { - DrawMRpt2(dc, element, layer, staff, measure); + this->DrawMRpt2(dc, element, layer, staff, measure); } else if (element->Is(MSPACE)) { - DrawMSpace(dc, element, layer, staff, measure); + this->DrawMSpace(dc, element, layer, staff, measure); } else if (element->Is(MULTIREST)) { - DrawMultiRest(dc, element, layer, staff, measure); + this->DrawMultiRest(dc, element, layer, staff, measure); } else if (element->Is(MULTIRPT)) { - DrawMultiRpt(dc, element, layer, staff, measure); + this->DrawMultiRpt(dc, element, layer, staff, measure); } else if (element->Is(NC)) { - DrawNc(dc, element, layer, staff, measure); + this->DrawNc(dc, element, layer, staff, measure); } else if (element->Is(NOTE)) { - DrawDurationElement(dc, element, layer, staff, measure); + this->DrawDurationElement(dc, element, layer, staff, measure); } else if (element->Is(NEUME)) { - DrawNeume(dc, element, layer, staff, measure); + this->DrawNeume(dc, element, layer, staff, measure); } else if (element->Is(PLICA)) { - DrawPlica(dc, element, layer, staff, measure); + this->DrawPlica(dc, element, layer, staff, measure); } else if (element->Is(PROPORT)) { - DrawProport(dc, element, layer, staff, measure); + this->DrawProport(dc, element, layer, staff, measure); } else if (element->Is(REST)) { - DrawDurationElement(dc, element, layer, staff, measure); + this->DrawDurationElement(dc, element, layer, staff, measure); } else if (element->Is(SPACE)) { - DrawSpace(dc, element, layer, staff, measure); + this->DrawSpace(dc, element, layer, staff, measure); } else if (element->Is(STEM)) { - DrawStem(dc, element, layer, staff, measure); + this->DrawStem(dc, element, layer, staff, measure); } else if (element->Is(SYL)) { - DrawSyl(dc, element, layer, staff, measure); + this->DrawSyl(dc, element, layer, staff, measure); } else if (element->Is(SYLLABLE)) { - DrawSyllable(dc, element, layer, staff, measure); + this->DrawSyllable(dc, element, layer, staff, measure); } else if (element->Is(TABDURSYM)) { - DrawTabDurSym(dc, element, layer, staff, measure); + this->DrawTabDurSym(dc, element, layer, staff, measure); } else if (element->Is(TABGRP)) { - DrawTabGrp(dc, element, layer, staff, measure); + this->DrawTabGrp(dc, element, layer, staff, measure); } else if (element->Is(TUPLET)) { - DrawTuplet(dc, element, layer, staff, measure); + this->DrawTuplet(dc, element, layer, staff, measure); } else if (element->Is(TUPLET_BRACKET)) { dc->StartGraphic(element, "", element->GetUuid()); @@ -213,7 +213,7 @@ void View::DrawLayerElement(DeviceContext *dc, LayerElement *element, Layer *lay layer->AddToDrawingList(element); } else if (element->Is(VERSE)) { - DrawVerse(dc, element, layer, staff, measure); + this->DrawVerse(dc, element, layer, staff, measure); } else { // This should never happen @@ -275,7 +275,7 @@ void View::DrawAccid(DeviceContext *dc, LayerElement *element, Layer *layer, Sta y += extend.m_descent + m_doc->GetDrawingUnit(staff->m_drawingStaffSize); } - DrawSmuflString( + this->DrawSmuflString( dc, x, y, accidStr, HORIZONTALALIGNMENT_center, staff->m_drawingStaffSize, accid->GetDrawingCueSize(), true); dc->EndGraphic(element, this); @@ -356,14 +356,15 @@ void View::DrawArtic(DeviceContext *dc, LayerElement *element, Layer *layer, Sta if (enclosingFront) { int xCorrEncl = std::max(xCorr, m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * 2 / 3); xCorrEncl += m_doc->GetGlyphWidth(enclosingFront, staff->m_drawingStaffSize, drawingCueSize); - DrawSmuflCode(dc, x - xCorrEncl, y - yCorrEncl, enclosingFront, staff->m_drawingStaffSize, drawingCueSize); + this->DrawSmuflCode( + dc, x - xCorrEncl, y - yCorrEncl, enclosingFront, staff->m_drawingStaffSize, drawingCueSize); } - DrawSmuflCode(dc, x - xCorr, y - yCorr, code, staff->m_drawingStaffSize, drawingCueSize); + this->DrawSmuflCode(dc, x - xCorr, y - yCorr, code, staff->m_drawingStaffSize, drawingCueSize); if (enclosingBack) { const int xCorrEncl = std::max(xCorr, m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * 2 / 3); - DrawSmuflCode(dc, x + xCorrEncl, y - yCorrEncl, enclosingBack, staff->m_drawingStaffSize, drawingCueSize); + this->DrawSmuflCode(dc, x + xCorrEncl, y - yCorrEncl, enclosingBack, staff->m_drawingStaffSize, drawingCueSize); } dc->EndGraphic(element, this); @@ -394,9 +395,9 @@ void View::DrawBarLine(DeviceContext *dc, LayerElement *element, Layer *layer, S int offset = (yTop == yBottom) ? m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) : 0; - DrawBarLine(dc, yTop + offset, yBottom - offset, barLine, barLine->GetForm()); + this->DrawBarLine(dc, yTop + offset, yBottom - offset, barLine, barLine->GetForm()); if (barLine->HasRepetitionDots()) { - DrawBarLineDots(dc, staff, barLine); + this->DrawBarLineDots(dc, staff, barLine); } dc->EndGraphic(element, this); @@ -421,16 +422,16 @@ void View::DrawBeatRpt(DeviceContext *dc, LayerElement *element, Layer *layer, S y -= staff->m_drawingLines / 2 * m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); if (beatRpt->GetSlash() == BEATRPT_REND_mixed) { - DrawSmuflCode(dc, xSymbol, y, SMUFL_E501_repeat2Bars, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, xSymbol, y, SMUFL_E501_repeat2Bars, staff->m_drawingStaffSize, false); } else { wchar_t slash = SMUFL_E504_repeatBarSlash; - DrawSmuflCode(dc, xSymbol, y, slash, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, xSymbol, y, slash, staff->m_drawingStaffSize, false); const int slashNum = beatRpt->GetSlash(); const int halfWidth = m_doc->GetGlyphWidth(slash, staff->m_drawingStaffSize, false) / 2; for (int i = 0; i < (slashNum - 1); ++i) { xSymbol += halfWidth; - DrawSmuflCode(dc, xSymbol, y, slash, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, xSymbol, y, slash, staff->m_drawingStaffSize, false); } } @@ -478,7 +479,7 @@ void View::DrawBTrem(DeviceContext *dc, LayerElement *element, Layer *layer, Sta dc->StartGraphic(element, "", element->GetUuid()); - DrawLayerChildren(dc, bTrem, layer, staff, measure); + this->DrawLayerChildren(dc, bTrem, layer, staff, measure); // Get stem values from the chord or note child if (childChord) { @@ -566,11 +567,11 @@ void View::DrawBTrem(DeviceContext *dc, LayerElement *element, Layer *layer, Sta if ((stemMod == STEMMODIFIER_NONE) && (drawingDur < DUR_2)) stemMod = STEMMODIFIER_3slash; if (stemMod == STEMMODIFIER_z) { if (stemDir == STEMDIRECTION_down) y += m_doc->GetDrawingUnit(staff->m_drawingStaffSize); - DrawSmuflCode(dc, x, y, SMUFL_E22A_buzzRoll, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, x, y, SMUFL_E22A_buzzRoll, staff->m_drawingStaffSize, false); } else if (stemMod != STEMMODIFIER_sprech) { for (int s = 1; s < stemMod; ++s) { - DrawObliquePolygon(dc, x - width / 2, y - height / 2, x + width / 2, y + height / 2, beamWidthBlack); + this->DrawObliquePolygon(dc, x - width / 2, y - height / 2, x + width / 2, y + height / 2, beamWidthBlack); y += step; } } @@ -595,7 +596,7 @@ void View::DrawChord(DeviceContext *dc, LayerElement *element, Layer *layer, Sta /************ Draw children (notes, accidentals, etc) ************/ - DrawLayerChildren(dc, chord, layer, staff, measure); + this->DrawLayerChildren(dc, chord, layer, staff, measure); } void View::DrawClef(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure) @@ -658,7 +659,7 @@ void View::DrawClef(DeviceContext *dc, LayerElement *element, Layer *layer, Staf dc->StartGraphic(element, "", element->GetUuid()); - DrawSmuflCode(dc, x, y, sym, clefSizeFactor * staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, x, y, sym, clefSizeFactor * staff->m_drawingStaffSize, false); if ((m_doc->GetType() == Facs) && element->HasFacs()) { const int noteHeight = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / 2); @@ -752,7 +753,7 @@ void View::DrawCustos(DeviceContext *dc, LayerElement *element, Layer *layer, St y -= int(xDiff * tan(deg * M_PI / 180.0)); } - DrawSmuflCode(dc, x, y, sym, staff->m_drawingStaffSize, false, true); + this->DrawSmuflCode(dc, x, y, sym, staff->m_drawingStaffSize, false, true); if ((m_doc->GetType() == Facs) && element->HasFacs()) { const int noteHeight = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / 2); @@ -767,7 +768,7 @@ void View::DrawCustos(DeviceContext *dc, LayerElement *element, Layer *layer, St /************ Draw children (accidentals, etc) ************/ // Drawing the children should be done before ending the graphic. Otherwise the SVG tree will not match the MEI one - DrawLayerChildren(dc, custos, layer, staff, measure); + this->DrawLayerChildren(dc, custos, layer, staff, measure); dc->EndGraphic(element, this); } @@ -805,7 +806,7 @@ void View::DrawDot(DeviceContext *dc, LayerElement *element, Layer *layer, Staff } } - DrawDotsPart(dc, x, y, 1, staff); + this->DrawDotsPart(dc, x, y, 1, staff); } dc->EndGraphic(element, this); @@ -830,7 +831,8 @@ void View::DrawDots(DeviceContext *dc, LayerElement *element, Layer *layer, Staf - m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) * (dotStaff->m_drawingLines - 1); int x = dots->GetDrawingX() + m_doc->GetDrawingUnit(staff->m_drawingStaffSize); for (int loc : mapEntry.second) { - DrawDotsPart(dc, x, y + loc * m_doc->GetDrawingUnit(staff->m_drawingStaffSize), dots->GetDots(), dotStaff); + this->DrawDotsPart( + dc, x, y + loc * m_doc->GetDrawingUnit(staff->m_drawingStaffSize), dots->GetDots(), dotStaff); } } @@ -847,17 +849,17 @@ void View::DrawDurationElement(DeviceContext *dc, LayerElement *element, Layer * if (dynamic_cast(element)) { dc->StartGraphic(element, "", element->GetUuid()); - DrawChord(dc, element, layer, staff, measure); + this->DrawChord(dc, element, layer, staff, measure); dc->EndGraphic(element, this); } else if (dynamic_cast(element)) { dc->StartGraphic(element, "", element->GetUuid()); - DrawNote(dc, element, layer, staff, measure); + this->DrawNote(dc, element, layer, staff, measure); dc->EndGraphic(element, this); } else if (dynamic_cast(element)) { dc->StartGraphic(element, "", element->GetUuid()); - DrawRest(dc, element, layer, staff, measure); + this->DrawRest(dc, element, layer, staff, measure); dc->EndGraphic(element, this); } } @@ -882,7 +884,7 @@ void View::DrawFlag(DeviceContext *dc, LayerElement *element, Layer *layer, Staf dc->StartGraphic(element, "", element->GetUuid()); wchar_t code = flag->GetFlagGlyph(stem->GetDrawingStemDir()); - DrawSmuflCode(dc, x, y, code, staff->m_drawingStaffSize, flag->GetDrawingCueSize()); + this->DrawSmuflCode(dc, x, y, code, staff->m_drawingStaffSize, flag->GetDrawingCueSize()); dc->EndGraphic(element, this); } @@ -898,7 +900,7 @@ void View::DrawGraceGrp(DeviceContext *dc, LayerElement *element, Layer *layer, dc->StartGraphic(element, "", element->GetUuid()); // basically nothing to do here - DrawLayerChildren(dc, element, layer, staff, measure); + this->DrawLayerChildren(dc, element, layer, staff, measure); dc->EndGraphic(element, this); } @@ -919,7 +921,7 @@ void View::DrawHalfmRpt(DeviceContext *dc, LayerElement *element, Layer *layer, dc->StartGraphic(element, "", element->GetUuid()); - DrawMRptPart(dc, x, SMUFL_E500_repeat1Bar, 0, false, staff); + this->DrawMRptPart(dc, x, SMUFL_E500_repeat1Bar, 0, false, staff); dc->EndGraphic(element, this); } @@ -982,7 +984,7 @@ void View::DrawKeySig(DeviceContext *dc, LayerElement *element, Layer *layer, St pitch, KeySig::GetOctave(keySig->m_drawingCancelAccidType, pitch, c), clefLocOffset); y = staff->GetDrawingY() + staff->CalcPitchPosYRel(m_doc, loc); - DrawSmuflCode(dc, x, y, SMUFL_E261_accidentalNatural, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, x, y, SMUFL_E261_accidentalNatural, staff->m_drawingStaffSize, false); x += naturalGlyphWidth + naturalStep; } @@ -1003,7 +1005,7 @@ void View::DrawKeySig(DeviceContext *dc, LayerElement *element, Layer *layer, St pitch, KeySig::GetOctave(keySig->m_drawingCancelAccidType, pitch, c), clefLocOffset); y = staff->GetDrawingY() + staff->CalcPitchPosYRel(m_doc, loc); - DrawSmuflCode(dc, x, y, SMUFL_E261_accidentalNatural, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, x, y, SMUFL_E261_accidentalNatural, staff->m_drawingStaffSize, false); x += naturalGlyphWidth + naturalStep; if ((keySig->GetAccidCount() > 0) && (i + 1 == keySig->m_drawingCancelAccidCount)) { @@ -1024,7 +1026,7 @@ void View::DrawKeySig(DeviceContext *dc, LayerElement *element, Layer *layer, St loc = PitchInterface::CalcLoc(pname, KeySig::GetOctave(accid, pname, c), clefLocOffset); y = staff->GetDrawingY() + staff->CalcPitchPosYRel(m_doc, loc); - DrawSmuflString(dc, x, y, accidStr, HORIZONTALALIGNMENT_left, staff->m_drawingStaffSize, false); + this->DrawSmuflString(dc, x, y, accidStr, HORIZONTALALIGNMENT_left, staff->m_drawingStaffSize, false); TextExtend extend; dc->GetSmuflTextExtent(accidStr, &extend); x += extend.m_width + step; @@ -1046,7 +1048,7 @@ void View::DrawMeterSig(DeviceContext *dc, LayerElement *element, Layer *layer, MeterSig *meterSig = vrv_cast(element); assert(meterSig); - DrawMeterSig(dc, meterSig, staff, 0); + this->DrawMeterSig(dc, meterSig, staff, 0); } void View::DrawMeterSig(DeviceContext *dc, MeterSig *meterSig, Staff *staff, int horizOffset) @@ -1067,24 +1069,24 @@ void View::DrawMeterSig(DeviceContext *dc, MeterSig *meterSig, Staff *staff, int int x = meterSig->GetDrawingX() + horizOffset; if (enclosingFront) { - DrawSmuflCode(dc, x, y, enclosingFront, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, x, y, enclosingFront, staff->m_drawingStaffSize, false); x += m_doc->GetGlyphWidth(enclosingFront, staff->m_drawingStaffSize, false); } if (meterSig->HasSym()) { const wchar_t code = meterSig->GetSymbolGlyph(); - DrawSmuflCode(dc, x, y, code, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, x, y, code, staff->m_drawingStaffSize, false); x += m_doc->GetGlyphWidth(code, staff->m_drawingStaffSize, false); } else if (meterSig->GetForm() == METERFORM_num) { - x += DrawMeterSigFigures(dc, x, y, meterSig->GetCount(), 0, staff); + x += this->DrawMeterSigFigures(dc, x, y, meterSig->GetCount(), 0, staff); } else if (meterSig->HasCount()) { - x += DrawMeterSigFigures(dc, x, y, meterSig->GetCount(), meterSig->GetUnit(), staff); + x += this->DrawMeterSigFigures(dc, x, y, meterSig->GetCount(), meterSig->GetUnit(), staff); } if (enclosingBack) { - DrawSmuflCode(dc, x, y, enclosingBack, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, x, y, enclosingBack, staff->m_drawingStaffSize, false); } dc->EndGraphic(meterSig, this); @@ -1115,7 +1117,7 @@ void View::DrawMRest(DeviceContext *dc, LayerElement *element, Layer *layer, Sta x -= m_doc->GetGlyphWidth(rest, staff->m_drawingStaffSize, drawingCueSize) / 2; - DrawSmuflCode(dc, x, y, rest, staff->m_drawingStaffSize, drawingCueSize); + this->DrawSmuflCode(dc, x, y, rest, staff->m_drawingStaffSize, drawingCueSize); // single legder line for whole rest glyphs if ((measure->m_measureAligner.GetMaxTime() < (DUR_MAX * 2)) @@ -1133,7 +1135,7 @@ void View::DrawMRest(DeviceContext *dc, LayerElement *element, Layer *layer, Sta } dc->StartCustomGraphic("ledgerLines"); - DrawHorizontalLine(dc, x - ledgerLineExtension, x + width + ledgerLineExtension, y, ledgerLineThickness); + this->DrawHorizontalLine(dc, x - ledgerLineExtension, x + width + ledgerLineExtension, y, ledgerLineThickness); dc->EndCustomGraphic(); } @@ -1155,7 +1157,7 @@ void View::DrawMRpt(DeviceContext *dc, LayerElement *element, Layer *layer, Staf dc->StartGraphic(element, "", element->GetUuid()); - DrawMRptPart(dc, element->GetDrawingX(), SMUFL_E500_repeat1Bar, mRpt->m_drawingMeasureCount, false, staff); + this->DrawMRptPart(dc, element->GetDrawingX(), SMUFL_E500_repeat1Bar, mRpt->m_drawingMeasureCount, false, staff); dc->EndGraphic(element, this); } @@ -1175,7 +1177,7 @@ void View::DrawMRpt2(DeviceContext *dc, LayerElement *element, Layer *layer, Sta dc->StartGraphic(element, "", element->GetUuid()); - DrawMRptPart(dc, element->GetDrawingX(), SMUFL_E501_repeat2Bars, 2, true, staff); + this->DrawMRptPart(dc, element->GetDrawingX(), SMUFL_E501_repeat2Bars, 2, true, staff); dc->EndGraphic(element, this); } @@ -1243,13 +1245,13 @@ void View::DrawMultiRest(DeviceContext *dc, LayerElement *element, Layer *layer, dc->DeactivateGraphicX(); // Draw the base rect - DrawFilledRectangle(dc, x1, y1, x2, y2); + this->DrawFilledRectangle(dc, x1, y1, x2, y2); // Draw two lines at beginning and end int border = m_doc->GetDrawingUnit(staff->m_drawingStaffSize); - DrawFilledRectangle( + this->DrawFilledRectangle( dc, x1, y1 + border, x1 + m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) * 2, y2 - border); - DrawFilledRectangle( + this->DrawFilledRectangle( dc, x2 - m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) * 2, y1 + border, x2, y2 - border); dc->ReactivateGraphic(); @@ -1273,16 +1275,16 @@ void View::DrawMultiRest(DeviceContext *dc, LayerElement *element, Layer *layer, int count = num; while ((count / 4)) { - DrawSmuflCode(dc, x1, y2, SMUFL_E4E1_restLonga, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, x1, y2, SMUFL_E4E1_restLonga, staff->m_drawingStaffSize, false); x1 += lgWidth + m_doc->GetDrawingUnit(staff->m_drawingStaffSize); count -= 4; } while ((count / 2)) { - DrawSmuflCode(dc, x1, y2, SMUFL_E4E2_restDoubleWhole, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, x1, y2, SMUFL_E4E2_restDoubleWhole, staff->m_drawingStaffSize, false); x1 += brWidth + m_doc->GetDrawingUnit(staff->m_drawingStaffSize); count -= 2; } - if (count) DrawSmuflCode(dc, x1, y1, SMUFL_E4E3_restWhole, staff->m_drawingStaffSize, false); + if (count) this->DrawSmuflCode(dc, x1, y1, SMUFL_E4E3_restWhole, staff->m_drawingStaffSize, false); } // Draw the number @@ -1296,7 +1298,7 @@ void View::DrawMultiRest(DeviceContext *dc, LayerElement *element, Layer *layer, ? std::min(staff->GetDrawingY() - staffHeight, y2) - offset : std::max(staff->GetDrawingY(), y1) + offset; - DrawSmuflString(dc, xCentered, y, IntToTimeSigFigures(num), HORIZONTALALIGNMENT_center); + this->DrawSmuflString(dc, xCentered, y, IntToTimeSigFigures(num), HORIZONTALALIGNMENT_center); dc->ResetFont(); } @@ -1318,7 +1320,7 @@ void View::DrawMultiRpt(DeviceContext *dc, LayerElement *element, Layer *layer, dc->StartGraphic(element, "", element->GetUuid()); - DrawMRptPart(dc, element->GetDrawingX(), SMUFL_E501_repeat2Bars, multiRpt->GetNum(), true, staff); + this->DrawMRptPart(dc, element->GetDrawingX(), SMUFL_E501_repeat2Bars, multiRpt->GetNum(), true, staff); dc->EndGraphic(element, this); @@ -1337,11 +1339,11 @@ void View::DrawNote(DeviceContext *dc, LayerElement *element, Layer *layer, Staf assert(note); if (note->IsMensuralDur()) { - DrawMensuralNote(dc, element, layer, staff, measure); + this->DrawMensuralNote(dc, element, layer, staff, measure); return; } if (note->IsTabGrpNote()) { - DrawTabNote(dc, element, layer, staff, measure); + this->DrawTabNote(dc, element, layer, staff, measure); return; } @@ -1363,7 +1365,7 @@ void View::DrawNote(DeviceContext *dc, LayerElement *element, Layer *layer, Staf drawingDur = ((note->GetColored() == BOOLEAN_true) && drawingDur > DUR_1) ? (drawingDur + 1) : drawingDur; if (drawingDur < DUR_BR) { - DrawMaximaToBrevis(dc, noteY, element, layer, staff); + this->DrawMaximaToBrevis(dc, noteY, element, layer, staff); } else { // Whole notes @@ -1377,15 +1379,15 @@ void View::DrawNote(DeviceContext *dc, LayerElement *element, Layer *layer, Staf dc->StartCustomGraphic("notehead"); - DrawSmuflCode(dc, noteX, noteY, fontNo, staff->m_drawingStaffSize, drawingCueSize, true); + this->DrawSmuflCode(dc, noteX, noteY, fontNo, staff->m_drawingStaffSize, drawingCueSize, true); // handle notehead enclosure if (note->HasHeadMod()) { switch (note->GetHeadMod()) { case NOTEHEADMODIFIER_paren: { - DrawSmuflCode(dc, noteX - note->GetDrawingRadius(m_doc), noteY, SMUFL_E26A_accidentalParensLeft, - staff->m_drawingStaffSize, drawingCueSize, true); - DrawSmuflCode(dc, noteX + note->GetDrawingRadius(m_doc) * 2, noteY, + this->DrawSmuflCode(dc, noteX - note->GetDrawingRadius(m_doc), noteY, + SMUFL_E26A_accidentalParensLeft, staff->m_drawingStaffSize, drawingCueSize, true); + this->DrawSmuflCode(dc, noteX + note->GetDrawingRadius(m_doc) * 2, noteY, SMUFL_E26B_accidentalParensRight, staff->m_drawingStaffSize, drawingCueSize, true); break; } @@ -1410,7 +1412,7 @@ void View::DrawNote(DeviceContext *dc, LayerElement *element, Layer *layer, Staf /************ Draw children (accidentals, etc) ************/ - DrawLayerChildren(dc, note, layer, staff, measure); + this->DrawLayerChildren(dc, note, layer, staff, measure); } void View::DrawRest(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure) @@ -1425,7 +1427,7 @@ void View::DrawRest(DeviceContext *dc, LayerElement *element, Layer *layer, Staf assert(rest); if (rest->IsMensuralDur()) { - DrawMensuralRest(dc, element, layer, staff, measure); + this->DrawMensuralRest(dc, element, layer, staff, measure); return; } @@ -1444,7 +1446,7 @@ void View::DrawRest(DeviceContext *dc, LayerElement *element, Layer *layer, Staf const int x = element->GetDrawingX(); const int y = element->GetDrawingY(); - DrawSmuflCode(dc, x, y, drawingGlyph, staff->m_drawingStaffSize, drawingCueSize); + this->DrawSmuflCode(dc, x, y, drawingGlyph, staff->m_drawingStaffSize, drawingCueSize); if ((drawingDur == DUR_1 || drawingDur == DUR_2 || drawingDur == DUR_BR)) { const int width = m_doc->GetGlyphWidth(drawingGlyph, staff->m_drawingStaffSize, drawingCueSize); @@ -1464,7 +1466,8 @@ void View::DrawRest(DeviceContext *dc, LayerElement *element, Layer *layer, Staf // single legder line for half and whole rests if ((drawingDur == DUR_1 || drawingDur == DUR_2) && (y > topMargin || y < bottomMargin)) { dc->DeactivateGraphicX(); - DrawHorizontalLine(dc, x - ledgerLineExtension, x + width + ledgerLineExtension, y, ledgerLineThickness); + this->DrawHorizontalLine( + dc, x - ledgerLineExtension, x + width + ledgerLineExtension, y, ledgerLineThickness); dc->ReactivateGraphic(); } // double ledger line for breve rests @@ -1472,11 +1475,11 @@ void View::DrawRest(DeviceContext *dc, LayerElement *element, Layer *layer, Staf const int height = m_doc->GetGlyphHeight(drawingGlyph, staff->m_drawingStaffSize, drawingCueSize); dc->DeactivateGraphicX(); if (y != topMargin) { - DrawHorizontalLine( + this->DrawHorizontalLine( dc, x - ledgerLineExtension, x + width + ledgerLineExtension, y, ledgerLineThickness); } if (y != bottomMargin - height) { - DrawHorizontalLine( + this->DrawHorizontalLine( dc, x - ledgerLineExtension, x + width + ledgerLineExtension, y + height, ledgerLineThickness); } dc->ReactivateGraphic(); @@ -1485,7 +1488,7 @@ void View::DrawRest(DeviceContext *dc, LayerElement *element, Layer *layer, Staf } /************ Draw children (dots) ************/ - DrawLayerChildren(dc, rest, layer, staff, measure); + this->DrawLayerChildren(dc, rest, layer, staff, measure); } void View::DrawSpace(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure) @@ -1517,7 +1520,7 @@ void View::DrawStem(DeviceContext *dc, LayerElement *element, Layer *layer, Staf dc->StartGraphic(element, "", element->GetUuid()); - DrawFilledRectangle(dc, stem->GetDrawingX() - m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) / 2, + this->DrawFilledRectangle(dc, stem->GetDrawingX() - m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) / 2, stem->GetDrawingY(), stem->GetDrawingX() + m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) / 2, stem->GetDrawingY() - stem->GetDrawingStemLen()); @@ -1541,17 +1544,17 @@ void View::DrawStem(DeviceContext *dc, LayerElement *element, Layer *layer, Staf } yShift *= (stem->GetDrawingStemLen() > 0) ? -1 : 1; yShift -= m_doc->GetGlyphHeight(SMUFL_E645_vocalSprechgesang, staff->m_drawingStaffSize, false) / 2; - DrawSmuflCode(dc, stem->GetDrawingX(), note->GetDrawingY() + yShift, SMUFL_E645_vocalSprechgesang, + this->DrawSmuflCode(dc, stem->GetDrawingX(), note->GetDrawingY() + yShift, SMUFL_E645_vocalSprechgesang, staff->m_drawingStaffSize, false); } } - DrawLayerChildren(dc, stem, layer, staff, measure); + this->DrawLayerChildren(dc, stem, layer, staff, measure); /************ Draw slash ************/ if ((stem->GetGrace() == GRACE_unacc) && !stem->IsInBeam()) { - DrawAcciaccaturaSlash(dc, stem, staff); + this->DrawAcciaccaturaSlash(dc, stem, staff); } dc->EndGraphic(element, this); @@ -1569,7 +1572,7 @@ void View::DrawSyl(DeviceContext *dc, LayerElement *element, Layer *layer, Staff return; } - syl->SetDrawingYRel(GetSylYRel(syl->m_drawingVerse, staff)); + syl->SetDrawingYRel(this->GetSylYRel(syl->m_drawingVerse, staff)); dc->StartGraphic(syl, "", syl->GetUuid()); dc->DeactivateGraphicY(); @@ -1596,7 +1599,7 @@ void View::DrawSyl(DeviceContext *dc, LayerElement *element, Layer *layer, Staff params.m_pointSize = dc->GetFont()->GetPointSize(); dc->StartText(ToDeviceContextX(params.m_x), ToDeviceContextY(params.m_y)); - DrawTextChildren(dc, syl, params); + this->DrawTextChildren(dc, syl, params); if (syl->GetCon() == sylLog_CON_b) { dc->ReactivateGraphic(); @@ -1671,7 +1674,7 @@ void View::DrawVerse(DeviceContext *dc, LayerElement *element, Layer *layer, Sta dc->StartGraphic(graphic, "", graphic->GetUuid()); dc->StartText(ToDeviceContextX(params.m_x), ToDeviceContextY(params.m_y), HORIZONTALALIGNMENT_right); - DrawTextChildren(dc, graphic, params); + this->DrawTextChildren(dc, graphic, params); dc->EndText(); dc->EndGraphic(graphic, this); @@ -1682,7 +1685,7 @@ void View::DrawVerse(DeviceContext *dc, LayerElement *element, Layer *layer, Sta dc->StartGraphic(verse, "", verse->GetUuid()); - DrawLayerChildren(dc, verse, layer, staff, measure); + this->DrawLayerChildren(dc, verse, layer, staff, measure); dc->EndGraphic(verse, this); } @@ -1746,7 +1749,7 @@ void View::DrawDotsPart(DeviceContext *dc, int x, int y, unsigned char dots, Sta y += m_doc->GetDrawingUnit(staff->m_drawingStaffSize); } for (i = 0; i < dots; ++i) { - DrawDot(dc, x, y, staff->m_drawingStaffSize); + this->DrawDot(dc, x, y, staff->m_drawingStaffSize); // HARDCODED x += m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * 1.5; } @@ -1792,11 +1795,12 @@ int View::DrawMeterSigFigures( dc->GetSmuflTextExtent(timeSigCombDenominator, &denExtend); yDen = y - denExtend.m_height / 2; } - DrawSmuflString(dc, x, yNum, timeSigCombNumerator, HORIZONTALALIGNMENT_center, staff->m_drawingStaffSize); - DrawSmuflString(dc, x, yDen, timeSigCombDenominator, HORIZONTALALIGNMENT_center, staff->m_drawingStaffSize); + this->DrawSmuflString(dc, x, yNum, timeSigCombNumerator, HORIZONTALALIGNMENT_center, staff->m_drawingStaffSize); + this->DrawSmuflString( + dc, x, yDen, timeSigCombDenominator, HORIZONTALALIGNMENT_center, staff->m_drawingStaffSize); } else { - DrawSmuflString(dc, x, y, timeSigCombNumerator, HORIZONTALALIGNMENT_center, staff->m_drawingStaffSize); + this->DrawSmuflString(dc, x, y, timeSigCombNumerator, HORIZONTALALIGNMENT_center, staff->m_drawingStaffSize); } dc->ResetFont(); @@ -1810,10 +1814,10 @@ void View::DrawMRptPart(DeviceContext *dc, int xCentered, wchar_t smuflCode, int int y = staff->GetDrawingY(); int ySymbol = y - staff->m_drawingLines / 2 * m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); - DrawSmuflCode(dc, xSymbol, ySymbol, smuflCode, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, xSymbol, ySymbol, smuflCode, staff->m_drawingStaffSize, false); if (line) { - DrawVerticalLine(dc, y, y - m_doc->GetDrawingStaffSize(staff->m_drawingStaffSize), xCentered, + this->DrawVerticalLine(dc, y, y - m_doc->GetDrawingStaffSize(staff->m_drawingStaffSize), xCentered, m_doc->GetDrawingBarLineWidth(staff->m_drawingStaffSize)); } diff --git a/src/view_graph.cpp b/src/view_graph.cpp index 64866f56bf1..f2c74ed3a7d 100644 --- a/src/view_graph.cpp +++ b/src/view_graph.cpp @@ -68,7 +68,7 @@ void View::DrawVerticalSegmentedLine(DeviceContext *dc, int x1, SegmentedLine &l int i, start, end; for (i = 0; i < line.GetSegmentCount(); i++) { line.GetStartEnd(start, end, i); - DrawVerticalLine(dc, start, end, x1, width, dashLength); + this->DrawVerticalLine(dc, start, end, x1, width, dashLength); } } @@ -77,7 +77,7 @@ void View::DrawHorizontalSegmentedLine(DeviceContext *dc, int y1, SegmentedLine int i, start, end; for (i = 0; i < line.GetSegmentCount(); i++) { line.GetStartEnd(start, end, i); - DrawHorizontalLine(dc, start, end, y1, width, dashLength); + this->DrawHorizontalLine(dc, start, end, y1, width, dashLength); } } @@ -243,11 +243,11 @@ void View::DrawSquareBracket(DeviceContext *dc, bool leftBracket, int x, int y, const int sign = leftBracket ? 1 : -1; - DrawFilledRectangle(dc, x, y - horizontalThickness / 2, x + sign * verticalThickness, + this->DrawFilledRectangle(dc, x, y - horizontalThickness / 2, x + sign * verticalThickness, y + height + horizontalThickness / 2); // vertical - DrawFilledRectangle( + this->DrawFilledRectangle( dc, x, y - horizontalThickness / 2, x + sign * width, y + horizontalThickness / 2); // horizontal bottom - DrawFilledRectangle(dc, x, y + height - horizontalThickness / 2, x + sign * width, + this->DrawFilledRectangle(dc, x, y + height - horizontalThickness / 2, x + sign * width, y + height + horizontalThickness / 2); // horizontal top } diff --git a/src/view_mensural.cpp b/src/view_mensural.cpp index 0e45f92b2e6..9027b765a18 100644 --- a/src/view_mensural.cpp +++ b/src/view_mensural.cpp @@ -81,27 +81,27 @@ void View::DrawMensuralNote(DeviceContext *dc, LayerElement *element, Layer *lay // Ligature, maxima,longa, and brevis if (note->IsInLigature() && !m_options->m_ligatureAsBracket.GetValue()) { - DrawLigatureNote(dc, element, layer, staff); + this->DrawLigatureNote(dc, element, layer, staff); } else if (drawingDur < DUR_1) { - DrawMaximaToBrevis(dc, yNote, element, layer, staff); + this->DrawMaximaToBrevis(dc, yNote, element, layer, staff); } // Semibrevis and shorter else { wchar_t code = note->GetMensuralNoteheadGlyph(); dc->StartCustomGraphic("notehead"); - DrawSmuflCode(dc, xNote, yNote, code, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, xNote, yNote, code, staff->m_drawingStaffSize, false); dc->EndCustomGraphic(); // For semibrevis with stem in black notation, encoded with an explicit stem direction if (((drawingDur > DUR_1) || ((note->GetStemDir() != STEMDIRECTION_NONE) && mensural_black)) && note->GetStemVisible() != BOOLEAN_false) { - DrawMensuralStem(dc, note, staff, stemDir, radius, xNote, yNote); + this->DrawMensuralStem(dc, note, staff, stemDir, radius, xNote, yNote); } } /************ Draw children (verse / syl) ************/ - DrawLayerChildren(dc, note, layer, staff, measure); + this->DrawLayerChildren(dc, note, layer, staff, measure); } void View::DrawMensuralRest(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure) @@ -133,7 +133,7 @@ void View::DrawMensuralRest(DeviceContext *dc, LayerElement *element, Layer *lay case DUR_16: charCode = SMUFL_E9F8_mensuralRestSemifusa; break; default: charCode = 0; // This should never happen } - DrawSmuflCode(dc, x, y, charCode, staff->m_drawingStaffSize, drawingCueSize); + this->DrawSmuflCode(dc, x, y, charCode, staff->m_drawingStaffSize, drawingCueSize); } void View::DrawMensur(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure) @@ -179,17 +179,17 @@ void View::DrawMensur(DeviceContext *dc, LayerElement *element, Layer *layer, St dc->StartGraphic(element, "", element->GetUuid()); - DrawSmuflCode(dc, x, y, code, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, x, y, code, staff->m_drawingStaffSize, false); x += perfectRadius; // only one slash supported if (mensur->HasSlash()) { - DrawSmuflCode(dc, + this->DrawSmuflCode(dc, x - m_doc->GetGlyphWidth(SMUFL_E925_mensuralProlationCombiningStroke, staff->m_drawingStaffSize, false) / 2, y, SMUFL_E925_mensuralProlationCombiningStroke, staff->m_drawingStaffSize, false); } if (mensur->GetDot() == BOOLEAN_true) { - DrawSmuflCode(dc, + this->DrawSmuflCode(dc, x - m_doc->GetGlyphWidth(SMUFL_E920_mensuralProlationCombiningDot, staff->m_drawingStaffSize, false) / 2, y, SMUFL_E920_mensuralProlationCombiningDot, staff->m_drawingStaffSize, false); } @@ -201,7 +201,7 @@ void View::DrawMensur(DeviceContext *dc, LayerElement *element, Layer *layer, St * 6; // step forward because we have a sign or a meter symbol } int numbase = mensur->HasNumbase() ? mensur->GetNumbase() : 0; - DrawProportFigures(dc, x, y, mensur->GetNum(), numbase, staff); + this->DrawProportFigures(dc, x, y, mensur->GetNum(), numbase, staff); } dc->EndGraphic(element, this); @@ -282,23 +282,23 @@ void View::DrawMensuralStem( if (nbFlags > 0) { for (int i = 0; i < nbFlags; ++i) { - DrawSmuflCode(dc, x2 - halfStemWidth, stemY1 - i * flagStemHeight, + this->DrawSmuflCode(dc, x2 - halfStemWidth, stemY1 - i * flagStemHeight, SMUFL_E949_mensuralCombStemUpFlagSemiminima, staff->m_drawingStaffSize, drawingCueSize); } } else { - DrawFilledRectangle(dc, x2 - halfStemWidth, stemY1, x2 + halfStemWidth, stemY2); + this->DrawFilledRectangle(dc, x2 - halfStemWidth, stemY1, x2 + halfStemWidth, stemY2); } } else { if (nbFlags > 0) { for (int i = 0; i < nbFlags; ++i) { - DrawSmuflCode(dc, x2 - halfStemWidth, stemY1 + i * flagStemHeight, + this->DrawSmuflCode(dc, x2 - halfStemWidth, stemY1 + i * flagStemHeight, SMUFL_E94A_mensuralCombStemDownFlagSemiminima, staff->m_drawingStaffSize, drawingCueSize); } } else { - DrawFilledRectangle(dc, x2 - halfStemWidth, stemY1, x2 + halfStemWidth, stemY2); + this->DrawFilledRectangle(dc, x2 - halfStemWidth, stemY1, x2 + halfStemWidth, stemY2); } } dc->EndCustomGraphic(); @@ -345,12 +345,13 @@ void View::DrawMaximaToBrevis(DeviceContext *dc, int y, LayerElement *element, L if (!fillNotehead) { // double the bases of rectangles - DrawObliquePolygon(dc, topLeft.x + stemWidth, topLeft.y, bottomRight.x - stemWidth, topLeft.y, -strokeWidth); - DrawObliquePolygon( + this->DrawObliquePolygon( + dc, topLeft.x + stemWidth, topLeft.y, bottomRight.x - stemWidth, topLeft.y, -strokeWidth); + this->DrawObliquePolygon( dc, topLeft.x + stemWidth, bottomRight.y, bottomRight.x - stemWidth, bottomRight.y, strokeWidth); } else { - DrawFilledRectangle(dc, topLeft.x + stemWidth, topLeft.y, bottomRight.x - stemWidth, bottomRight.y); + this->DrawFilledRectangle(dc, topLeft.x + stemWidth, topLeft.y, bottomRight.x - stemWidth, bottomRight.y); } if (note->FindDescendantByType(PLICA)) { @@ -360,18 +361,18 @@ void View::DrawMaximaToBrevis(DeviceContext *dc, int y, LayerElement *element, L } // serifs and / or stem - DrawFilledRectangle(dc, topLeft.x, sides[0], topLeft.x + stemWidth, sides[1]); + this->DrawFilledRectangle(dc, topLeft.x, sides[0], topLeft.x + stemWidth, sides[1]); if (note->GetActualDur() != DUR_BR) { // Right side is a stem - end the notehead first dc->EndCustomGraphic(); dc->StartCustomGraphic("stem"); - DrawFilledRectangle(dc, bottomRight.x - stemWidth, sides[2], bottomRight.x, sides[3]); + this->DrawFilledRectangle(dc, bottomRight.x - stemWidth, sides[2], bottomRight.x, sides[3]); dc->EndCustomGraphic(); } else { // Right side is a serif - DrawFilledRectangle(dc, bottomRight.x - stemWidth, sides[2], bottomRight.x, sides[3]); + this->DrawFilledRectangle(dc, bottomRight.x - stemWidth, sides[2], bottomRight.x, sides[3]); dc->EndCustomGraphic(); } @@ -391,7 +392,7 @@ void View::DrawLigature(DeviceContext *dc, LayerElement *element, Layer *layer, dc->StartGraphic(ligature, "", ligature->GetUuid()); // Draw children (notes) - DrawLayerChildren(dc, ligature, layer, staff, measure); + this->DrawLayerChildren(dc, ligature, layer, staff, measure); // Render a bracket for the ligature if (m_options->m_ligatureAsBracket.GetValue()) { @@ -414,9 +415,9 @@ void View::DrawLigature(DeviceContext *dc, LayerElement *element, Layer *layer, // move the bracket up y += bracketSize + m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize); int lineWidth = m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize); - DrawFilledRectangle(dc, x1, y, x1 + lineWidth, y - bracketSize); - DrawFilledRectangle(dc, x1, y, x2, y - lineWidth); - DrawFilledRectangle(dc, x2 - lineWidth, y, x2, y - bracketSize); + this->DrawFilledRectangle(dc, x1, y, x1 + lineWidth, y - bracketSize); + this->DrawFilledRectangle(dc, x1, y, x2, y - lineWidth); + this->DrawFilledRectangle(dc, x2 - lineWidth, y, x2, y - bracketSize); } } @@ -485,11 +486,11 @@ void View::DrawLigatureNote(DeviceContext *dc, LayerElement *element, Layer *lay if (!fillNotehead) { // double the bases of rectangles - DrawObliquePolygon(dc, topLeft->x, topLeft->y, topRight->x, topRight->y, -strokeWidth); - DrawObliquePolygon(dc, bottomLeft->x, bottomLeft->y, bottomRight->x, bottomRight->y, strokeWidth); + this->DrawObliquePolygon(dc, topLeft->x, topLeft->y, topRight->x, topRight->y, -strokeWidth); + this->DrawObliquePolygon(dc, bottomLeft->x, bottomLeft->y, bottomRight->x, bottomRight->y, strokeWidth); } else { - DrawObliquePolygon(dc, topLeft->x, topLeft->y, topRight->x, topRight->y, bottomLeft->y - topLeft->y); + this->DrawObliquePolygon(dc, topLeft->x, topLeft->y, topRight->x, topRight->y, bottomLeft->y - topLeft->y); } // Do not draw a left connector with obliques @@ -511,11 +512,12 @@ void View::DrawLigatureNote(DeviceContext *dc, LayerElement *element, Layer *lay sides[3] = prevSides[3]; } } - DrawFilledRoundedRectangle(dc, topLeft->x, sideTop, topLeft->x + stemWidth, sideBottom, stemWidth / 3); + this->DrawFilledRoundedRectangle(dc, topLeft->x, sideTop, topLeft->x + stemWidth, sideBottom, stemWidth / 3); } if (!nextNote) { - DrawFilledRoundedRectangle(dc, bottomRight->x - stemWidth, sides[2], bottomRight->x, sides[3], stemWidth / 3); + this->DrawFilledRoundedRectangle( + dc, bottomRight->x - stemWidth, sides[2], bottomRight->x, sides[3], stemWidth / 3); } return; @@ -562,7 +564,7 @@ void View::DrawDotInLigature(DeviceContext *dc, LayerElement *element, Layer *la y -= m_doc->GetDrawingUnit(staff->m_drawingStaffSize); } - DrawDotsPart(dc, x, y, 1, staff); + this->DrawDotsPart(dc, x, y, 1, staff); return; } @@ -600,23 +602,23 @@ void View::DrawPlica(DeviceContext *dc, LayerElement *element, Layer *layer, Sta if (isLonga) { if (up) { - DrawFilledRectangle(dc, topLeft.x, sides[1], topLeft.x + stemWidth, sides[1] + shortStem); - DrawFilledRectangle(dc, bottomRight.x, sides[1], bottomRight.x - stemWidth, sides[1] + stem); + this->DrawFilledRectangle(dc, topLeft.x, sides[1], topLeft.x + stemWidth, sides[1] + shortStem); + this->DrawFilledRectangle(dc, bottomRight.x, sides[1], bottomRight.x - stemWidth, sides[1] + stem); } else { - DrawFilledRectangle(dc, topLeft.x, sides[0], topLeft.x + stemWidth, sides[0] - shortStem); - DrawFilledRectangle(dc, bottomRight.x, sides[0], bottomRight.x - stemWidth, sides[0] - stem); + this->DrawFilledRectangle(dc, topLeft.x, sides[0], topLeft.x + stemWidth, sides[0] - shortStem); + this->DrawFilledRectangle(dc, bottomRight.x, sides[0], bottomRight.x - stemWidth, sides[0] - stem); } } // brevis else { if (up) { - DrawFilledRectangle(dc, topLeft.x, sides[1], topLeft.x + stemWidth, sides[1] + stem); - DrawFilledRectangle(dc, bottomRight.x, sides[1], bottomRight.x - stemWidth, sides[1] + shortStem); + this->DrawFilledRectangle(dc, topLeft.x, sides[1], topLeft.x + stemWidth, sides[1] + stem); + this->DrawFilledRectangle(dc, bottomRight.x, sides[1], bottomRight.x - stemWidth, sides[1] + shortStem); } else { - DrawFilledRectangle(dc, topLeft.x, sides[0], topLeft.x + stemWidth, sides[0] - stem); - DrawFilledRectangle(dc, bottomRight.x, sides[0], bottomRight.x - stemWidth, sides[0] - shortStem); + this->DrawFilledRectangle(dc, topLeft.x, sides[0], topLeft.x + stemWidth, sides[0] - stem); + this->DrawFilledRectangle(dc, bottomRight.x, sides[0], bottomRight.x - stemWidth, sides[0] - shortStem); } } @@ -646,11 +648,11 @@ void View::DrawProportFigures(DeviceContext *dc, int x, int y, int num, int numB dc->SetFont(m_doc->GetDrawingSmuflFont(textSize, false)); wtext = IntToTimeSigFigures(num); - DrawSmuflString(dc, x, ynum, wtext, HORIZONTALALIGNMENT_center, textSize); // true = center + this->DrawSmuflString(dc, x, ynum, wtext, HORIZONTALALIGNMENT_center, textSize); // true = center if (numBase) { wtext = IntToTimeSigFigures(numBase); - DrawSmuflString(dc, x, yden, wtext, HORIZONTALALIGNMENT_center, textSize); // true = center + this->DrawSmuflString(dc, x, yden, wtext, HORIZONTALALIGNMENT_center, textSize); // true = center } dc->ResetFont(); @@ -678,7 +680,7 @@ void View::DrawProport(DeviceContext *dc, LayerElement *element, Layer *layer, S y1 = y; y2 = y + 50 + (50 * proport->GetNum()); // DrawFilledRectangle(dc,x1,y1,x2,y2); - DrawPartFilledRectangle(dc, x1, y1, x2, y2, 0); + this->DrawPartFilledRectangle(dc, x1, y1, x2, y2, 0); if (proport->HasNum()) { x = element->GetDrawingX(); @@ -688,7 +690,7 @@ void View::DrawProport(DeviceContext *dc, LayerElement *element, Layer *layer, S * 5; // step forward because we have a sign or a meter symbol } int numbase = proport->HasNumbase() ? proport->GetNumbase() : 0; - DrawProportFigures(dc, x, + this->DrawProportFigures(dc, x, staff->GetDrawingY() - m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * (staff->m_drawingLines - 1), proport->GetNum(), numbase, staff); } diff --git a/src/view_neume.cpp b/src/view_neume.cpp index 26f4a615763..dd99ae26f09 100644 --- a/src/view_neume.cpp +++ b/src/view_neume.cpp @@ -49,7 +49,7 @@ void View::DrawSyllable(DeviceContext *dc, LayerElement *element, Layer *layer, /******************************************************************/ // Draw the children - DrawLayerChildren(dc, syllable, layer, staff, measure); + this->DrawLayerChildren(dc, syllable, layer, staff, measure); dc->EndGraphic(element, this); } @@ -183,7 +183,7 @@ void View::DrawNc(DeviceContext *dc, LayerElement *element, Layer *layer, Staff yValue = clefYPosition + pitchOffset + octaveOffset - rotateOffset; for (auto it = params.begin(); it != params.end(); it++) { - DrawSmuflCode(dc, noteX + it->xOffset * noteWidth, yValue + it->yOffset * noteHeight, it->fontNo, + this->DrawSmuflCode(dc, noteX + it->xOffset * noteWidth, yValue + it->yOffset * noteHeight, it->fontNo, staff->m_drawingStaffSize, false, true); } @@ -197,7 +197,7 @@ void View::DrawNc(DeviceContext *dc, LayerElement *element, Layer *layer, Staff } // Draw the children - DrawLayerChildren(dc, nc, layer, staff, measure); + this->DrawLayerChildren(dc, nc, layer, staff, measure); dc->EndGraphic(element, this); } @@ -216,7 +216,7 @@ void View::DrawNeume(DeviceContext *dc, LayerElement *element, Layer *layer, Sta // Start the Neume graphic and draw the children dc->StartGraphic(element, "", element->GetUuid()); - DrawLayerChildren(dc, neume, layer, staff, measure); + this->DrawLayerChildren(dc, neume, layer, staff, measure); dc->EndGraphic(element, this); } diff --git a/src/view_page.cpp b/src/view_page.cpp index ef25aa641c9..11092f6d229 100644 --- a/src/view_page.cpp +++ b/src/view_page.cpp @@ -92,18 +92,18 @@ void View::DrawCurrentPage(DeviceContext *dc, bool background) for (auto child : *m_currentPage->GetChildren()) { if (child->IsPageElement()) { // cast to PageElement check in DrawSystemEditorial element - DrawPageElement(dc, dynamic_cast(child)); + this->DrawPageElement(dc, dynamic_cast(child)); } else if (child->Is(SYSTEM)) { System *system = dynamic_cast(child); - DrawSystem(dc, system); + this->DrawSystem(dc, system); } else { assert(false); } } - DrawRunningElements(dc, m_currentPage); + this->DrawRunningElements(dc, m_currentPage); dc->EndPage(); } @@ -190,33 +190,33 @@ void View::DrawSystem(DeviceContext *dc, System *system) Measure *firstMeasure = dynamic_cast(system->FindDescendantByType(MEASURE, 1)); - DrawSystemDivider(dc, system, firstMeasure); + this->DrawSystemDivider(dc, system, firstMeasure); // first we need to clear the drawing list of postponed elements system->ResetDrawingList(); if (firstMeasure) { - DrawScoreDef(dc, system->GetDrawingScoreDef(), firstMeasure, system->GetDrawingX(), NULL); - } - - DrawSystemChildren(dc, system, system); - - DrawSystemList(dc, system, SYL); - DrawSystemList(dc, system, BRACKETSPAN); - DrawSystemList(dc, system, DYNAM); - DrawSystemList(dc, system, DIR); - DrawSystemList(dc, system, GLISS); - DrawSystemList(dc, system, HAIRPIN); - DrawSystemList(dc, system, TRILL); - DrawSystemList(dc, system, FIGURE); - DrawSystemList(dc, system, LV); - DrawSystemList(dc, system, PHRASE); - DrawSystemList(dc, system, OCTAVE); - DrawSystemList(dc, system, PEDAL); - DrawSystemList(dc, system, PITCHINFLECTION); - DrawSystemList(dc, system, TIE); - DrawSystemList(dc, system, SLUR); - DrawSystemList(dc, system, ENDING); + this->DrawScoreDef(dc, system->GetDrawingScoreDef(), firstMeasure, system->GetDrawingX(), NULL); + } + + this->DrawSystemChildren(dc, system, system); + + this->DrawSystemList(dc, system, SYL); + this->DrawSystemList(dc, system, BRACKETSPAN); + this->DrawSystemList(dc, system, DYNAM); + this->DrawSystemList(dc, system, DIR); + this->DrawSystemList(dc, system, GLISS); + this->DrawSystemList(dc, system, HAIRPIN); + this->DrawSystemList(dc, system, TRILL); + this->DrawSystemList(dc, system, FIGURE); + this->DrawSystemList(dc, system, LV); + this->DrawSystemList(dc, system, PHRASE); + this->DrawSystemList(dc, system, OCTAVE); + this->DrawSystemList(dc, system, PEDAL); + this->DrawSystemList(dc, system, PITCHINFLECTION); + this->DrawSystemList(dc, system, TIE); + this->DrawSystemList(dc, system, SLUR); + this->DrawSystemList(dc, system, ENDING); dc->EndGraphic(system, this); } @@ -231,53 +231,53 @@ void View::DrawSystemList(DeviceContext *dc, System *system, const ClassId class for (iter = drawingList->begin(); iter != drawingList->end(); ++iter) { if ((*iter)->Is(classId) && (classId == BRACKETSPAN)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == DIR)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == DYNAM)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == FIGURE)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == GLISS)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == HAIRPIN)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == LV)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == PHRASE)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == OCTAVE)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == PEDAL)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == PITCHINFLECTION)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == SYL)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == TIE)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == TRILL)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == SLUR)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == ENDING)) { // cast to Ending check in DrawEnding - DrawEnding(dc, dynamic_cast(*iter), system); + this->DrawEnding(dc, dynamic_cast(*iter), system); } } } @@ -297,11 +297,11 @@ void View::DrawScoreDef( if (barLine == NULL) { // Draw the first staffGrp and from there its children recursively - DrawStaffGrp(dc, measure, staffGrp, x, true, !scoreDef->DrawLabels()); + this->DrawStaffGrp(dc, measure, staffGrp, x, true, !scoreDef->DrawLabels()); } else { dc->StartGraphic(barLine, "", barLine->GetUuid()); - DrawBarLines(dc, measure, staffGrp, barLine, isLastMeasure); + this->DrawBarLines(dc, measure, staffGrp, barLine, isLastMeasure); dc->EndGraphic(barLine, this); } @@ -355,11 +355,11 @@ void View::DrawStaffGrp( || (m_doc->GetCurrentScoreDef()->GetSystemLeftline() == BOOLEAN_true))) { // int barLineWidth = m_doc->GetDrawingElementDefaultSize("bracketThickness", staffSize); const int barLineWidth = m_doc->GetDrawingBarLineWidth(staffSize); - DrawVerticalLine(dc, yTop, yBottom, x + barLineWidth / 2, barLineWidth); + this->DrawVerticalLine(dc, yTop, yBottom, x + barLineWidth / 2, barLineWidth); } // draw the group symbol int staffGrpX = x; - DrawGrpSym(dc, measure, staffGrp, x); + this->DrawGrpSym(dc, measure, staffGrp, x); int grpSymSpace = staffGrpX - x; // recursively draw the children @@ -367,7 +367,7 @@ void View::DrawStaffGrp( for (int i = 0; i < staffGrp->GetChildCount(); ++i) { childStaffGrp = dynamic_cast(staffGrp->GetChild(i)); if (childStaffGrp) { - DrawStaffGrp(dc, measure, childStaffGrp, x, false, abbreviations); + this->DrawStaffGrp(dc, measure, childStaffGrp, x, false, abbreviations); } } @@ -378,7 +378,7 @@ void View::DrawStaffGrp( int yLabel = yBottom - (yBottom - yTop) / 2 - m_doc->GetDrawingUnit(100); this->DrawLabels(dc, scoreDef, staffGrp, xLabel, yLabel, abbreviations, 100, 2 * space + grpSymSpace); - DrawStaffDefLabels(dc, measure, staffGrp, x, abbreviations); + this->DrawStaffDefLabels(dc, measure, staffGrp, x, abbreviations); } void View::DrawStaffDefLabels(DeviceContext *dc, Measure *measure, StaffGrp *staffGrp, int x, bool abbreviations) @@ -450,22 +450,22 @@ void View::DrawGrpSym(DeviceContext *dc, Measure *measure, StaffGrp *staffGrp, i switch (groupSymbol->GetSymbol()) { case staffGroupingSym_SYMBOL_line: { const int lineWidth = m_doc->GetDrawingUnit(staffSize) * m_options->m_bracketThickness.GetValue(); - DrawVerticalLine(dc, yTop, yBottom, x - 1.5 * lineWidth, lineWidth); + this->DrawVerticalLine(dc, yTop, yBottom, x - 1.5 * lineWidth, lineWidth); x -= 2 * lineWidth; break; } case staffGroupingSym_SYMBOL_brace: { - DrawBrace(dc, x, yTop, yBottom, staffSize); + this->DrawBrace(dc, x, yTop, yBottom, staffSize); x -= 2.5 * m_doc->GetDrawingUnit(staffSize); break; } case staffGroupingSym_SYMBOL_bracket: { - DrawBracket(dc, x, yTop, yBottom, staffSize); + this->DrawBracket(dc, x, yTop, yBottom, staffSize); x -= m_doc->GetDrawingUnit(staffSize) * (1.0 + m_options->m_bracketThickness.GetValue()); break; } case staffGroupingSym_SYMBOL_bracketsq: { - DrawBracketSq(dc, x, yTop, yBottom, staffSize); + this->DrawBracketSq(dc, x, yTop, yBottom, staffSize); x -= m_doc->GetDrawingUnit(staffSize); break; } @@ -520,7 +520,7 @@ void View::DrawLabels( dc->StartGraphic(graphic, "", graphic->GetUuid()); dc->StartText(ToDeviceContextX(params.m_x), ToDeviceContextY(params.m_y), HORIZONTALALIGNMENT_right); - DrawTextChildren(dc, graphic, params); + this->DrawTextChildren(dc, graphic, params); dc->EndText(); dc->EndGraphic(graphic, this); @@ -558,10 +558,11 @@ void View::DrawBracket(DeviceContext *dc, int x, int y1, int y2, int staffSize) const int x2 = x - basicDist; const int x1 = x2 - bracketThickness; - DrawSmuflCode(dc, x1, y1 + offset + bracketThickness / 2, SMUFL_E003_bracketTop, staffSize, false); - DrawSmuflCode(dc, x1, y2 - offset - bracketThickness / 2, SMUFL_E004_bracketBottom, staffSize, false); + this->DrawSmuflCode(dc, x1, y1 + offset + bracketThickness / 2, SMUFL_E003_bracketTop, staffSize, false); + this->DrawSmuflCode(dc, x1, y2 - offset - bracketThickness / 2, SMUFL_E004_bracketBottom, staffSize, false); - DrawFilledRectangle(dc, x1, y1 + 2 * offset + bracketThickness / 2, x2, y2 - 2 * offset - bracketThickness / 2); + this->DrawFilledRectangle( + dc, x1, y1 + 2 * offset + bracketThickness / 2, x2, y2 - 2 * offset - bracketThickness / 2); } void View::DrawBracketSq(DeviceContext *dc, int x, int y1, int y2, int staffSize) @@ -574,7 +575,7 @@ void View::DrawBracketSq(DeviceContext *dc, int x, int y1, int y2, int staffSize const int verticalThickness = m_doc->GetDrawingUnit(staffSize) * m_options->m_subBracketThickness.GetValue(); const int width = m_doc->GetDrawingUnit(staffSize); - DrawSquareBracket(dc, true, x - width, y, height, width, horizontalThickness, verticalThickness); + this->DrawSquareBracket(dc, true, x - width, y, height, width, horizontalThickness, verticalThickness); } void View::DrawBrace(DeviceContext *dc, int x, int y1, int y2, int staffSize) @@ -597,7 +598,7 @@ void View::DrawBrace(DeviceContext *dc, int x, int y1, int y2, int staffSize) const float widthAfterScalling = width * scale; font->SetWidthToHeightRatio(static_cast(braceWidth) / widthAfterScalling); dc->StartCustomGraphic("grpSym"); - DrawSmuflCode(dc, x, y2, SMUFL_E000_brace, staffSize * scale, false); + this->DrawSmuflCode(dc, x, y2, SMUFL_E000_brace, staffSize * scale, false); dc->EndCustomGraphic(); font->SetWidthToHeightRatio(currentWidthToHeightRatio); return; @@ -694,7 +695,7 @@ void View::DrawBarLines(DeviceContext *dc, Measure *measure, StaffGrp *staffGrp, if (childStaffGrp->GetDrawingVisibility() == OPTIMIZATION_HIDDEN) { continue; } - DrawBarLines(dc, measure, childStaffGrp, barLine, isLastMeasure); + this->DrawBarLines(dc, measure, childStaffGrp, barLine, isLastMeasure); } else if (childStaffDef) { if (childStaffDef->GetDrawingVisibility() == OPTIMIZATION_HIDDEN) { @@ -736,9 +737,9 @@ void View::DrawBarLines(DeviceContext *dc, Measure *measure, StaffGrp *staffGrp, yTop = yBottom + m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); yBottom -= m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); } - DrawBarLine(dc, yTop, yBottom, barLine, form); + this->DrawBarLine(dc, yTop, yBottom, barLine, form); if (barLine->HasRepetitionDots()) { - DrawBarLineDots(dc, staff, barLine); + this->DrawBarLineDots(dc, staff, barLine); } } } @@ -806,7 +807,7 @@ void View::DrawBarLines(DeviceContext *dc, Measure *measure, StaffGrp *staffGrp, if (isLastMeasure && (barLine->GetPosition() == BarLinePosition::Right)) { eraseIntersections = false; } - DrawBarLine(dc, yTop, yBottom, barLine, barLine->GetForm(), eraseIntersections); + this->DrawBarLine(dc, yTop, yBottom, barLine, barLine->GetForm(), eraseIntersections); // Now we have a barthru barLine, but we have dots so we still need to go through each staff if (barLine->HasRepetitionDots()) { @@ -822,7 +823,7 @@ void View::DrawBarLines(DeviceContext *dc, Measure *measure, StaffGrp *staffGrp, "Could not get staff (%d) while drawing staffGrp - DrawBarLines", childStaffDef->GetN()); continue; } - DrawBarLineDots(dc, staff, barLine); + this->DrawBarLineDots(dc, staff, barLine); } } } @@ -881,52 +882,52 @@ void View::DrawBarLine( switch (form) { case BARRENDITION_single: // - DrawVerticalSegmentedLine(dc, x, line, barLineWidth); + this->DrawVerticalSegmentedLine(dc, x, line, barLineWidth); break; case BARRENDITION_dashed: // - DrawVerticalSegmentedLine(dc, x, line, barLineWidth, dashLength); + this->DrawVerticalSegmentedLine(dc, x, line, barLineWidth, dashLength); break; case BARRENDITION_dotted: // - DrawVerticalSegmentedLine(dc, x, line, barLineWidth, dotLength); + this->DrawVerticalSegmentedLine(dc, x, line, barLineWidth, dotLength); break; case BARRENDITION_rptend: - DrawVerticalSegmentedLine(dc, x, line, barLineWidth); - DrawVerticalSegmentedLine(dc, x2 + barLinesSum / 2, line, barLineThickWidth); + this->DrawVerticalSegmentedLine(dc, x, line, barLineWidth); + this->DrawVerticalSegmentedLine(dc, x2 + barLinesSum / 2, line, barLineThickWidth); break; case BARRENDITION_rptboth: x2 = x + barLinesSum + barLineSeparation * 2; - DrawVerticalSegmentedLine(dc, x, line, barLineWidth); - DrawVerticalSegmentedLine(dc, (x + x2) / 2, line, barLineThickWidth); - DrawVerticalSegmentedLine(dc, x2, line, barLineWidth); + this->DrawVerticalSegmentedLine(dc, x, line, barLineWidth); + this->DrawVerticalSegmentedLine(dc, (x + x2) / 2, line, barLineThickWidth); + this->DrawVerticalSegmentedLine(dc, x2, line, barLineWidth); break; case BARRENDITION_rptstart: - DrawVerticalSegmentedLine(dc, x, line, barLineThickWidth); - DrawVerticalSegmentedLine(dc, x2 + barLinesSum / 2, line, barLineWidth); + this->DrawVerticalSegmentedLine(dc, x, line, barLineThickWidth); + this->DrawVerticalSegmentedLine(dc, x2 + barLinesSum / 2, line, barLineWidth); break; case BARRENDITION_invis: // barLine->SetEmptyBB(); break; case BARRENDITION_end: - DrawVerticalSegmentedLine(dc, x, line, barLineWidth); - DrawVerticalSegmentedLine(dc, x2 + barLinesSum / 2, line, barLineThickWidth); + this->DrawVerticalSegmentedLine(dc, x, line, barLineWidth); + this->DrawVerticalSegmentedLine(dc, x2 + barLinesSum / 2, line, barLineThickWidth); break; case BARRENDITION_dbl: - DrawVerticalSegmentedLine(dc, x, line, barLineWidth); - DrawVerticalSegmentedLine(dc, x2 + barLineWidth, line, barLineWidth); + this->DrawVerticalSegmentedLine(dc, x, line, barLineWidth); + this->DrawVerticalSegmentedLine(dc, x2 + barLineWidth, line, barLineWidth); break; case BARRENDITION_dbldashed: - DrawVerticalSegmentedLine(dc, x, line, barLineWidth, dashLength); - DrawVerticalSegmentedLine(dc, x2 + barLineWidth, line, barLineWidth, dashLength); + this->DrawVerticalSegmentedLine(dc, x, line, barLineWidth, dashLength); + this->DrawVerticalSegmentedLine(dc, x2 + barLineWidth, line, barLineWidth, dashLength); break; case BARRENDITION_dbldotted: - DrawVerticalSegmentedLine(dc, x, line, barLineWidth, dotLength); - DrawVerticalSegmentedLine(dc, x2 + barLineWidth, line, barLineWidth, dotLength); + this->DrawVerticalSegmentedLine(dc, x, line, barLineWidth, dotLength); + this->DrawVerticalSegmentedLine(dc, x2 + barLineWidth, line, barLineWidth, dotLength); break; default: // Use solid barline as fallback LogWarning( "%s bar lines not supported", barLine->AttBarLineLog::BarrenditionToStr(barLine->GetForm()).c_str()); - DrawVerticalSegmentedLine(dc, x, line, barLineWidth); + this->DrawVerticalSegmentedLine(dc, x, line, barLineWidth); break; } } @@ -953,16 +954,18 @@ void View::DrawBarLineDots(DeviceContext *dc, Staff *staff, BarLine *barLine) const int yTop = yBottom + m_doc->GetDrawingDoubleUnit(staffSize); if (barLine->GetForm() == BARRENDITION_rptstart) { - DrawSmuflCode(dc, x2 - thickBarLineWidth / 2, yTop, SMUFL_E044_repeatDot, staffSize, false); - DrawSmuflCode(dc, x2 - thickBarLineWidth / 2, yBottom, SMUFL_E044_repeatDot, staffSize, false); + this->DrawSmuflCode(dc, x2 - thickBarLineWidth / 2, yTop, SMUFL_E044_repeatDot, staffSize, false); + this->DrawSmuflCode(dc, x2 - thickBarLineWidth / 2, yBottom, SMUFL_E044_repeatDot, staffSize, false); } if (barLine->GetForm() == BARRENDITION_rptboth) { - DrawSmuflCode(dc, x2 + barLineSeparation + barLineWidth / 2, yTop, SMUFL_E044_repeatDot, staffSize, false); - DrawSmuflCode(dc, x2 + barLineSeparation + barLineWidth / 2, yBottom, SMUFL_E044_repeatDot, staffSize, false); + this->DrawSmuflCode( + dc, x2 + barLineSeparation + barLineWidth / 2, yTop, SMUFL_E044_repeatDot, staffSize, false); + this->DrawSmuflCode( + dc, x2 + barLineSeparation + barLineWidth / 2, yBottom, SMUFL_E044_repeatDot, staffSize, false); } if ((barLine->GetForm() == BARRENDITION_rptend) || (barLine->GetForm() == BARRENDITION_rptboth)) { - DrawSmuflCode(dc, x1, yTop, SMUFL_E044_repeatDot, staffSize, false); - DrawSmuflCode(dc, x1, yBottom, SMUFL_E044_repeatDot, staffSize, false); + this->DrawSmuflCode(dc, x1, yTop, SMUFL_E044_repeatDot, staffSize, false); + this->DrawSmuflCode(dc, x1, yBottom, SMUFL_E044_repeatDot, staffSize, false); } return; @@ -1010,24 +1013,24 @@ void View::DrawMeasure(DeviceContext *dc, Measure *measure, System *system) } // hardcoded offset for the mNum based on the lyric font size const int yOffset = m_doc->GetDrawingLyricFont(60)->GetPointSize(); - DrawMNum(dc, mnum, measure, std::max(symbolOffset, yOffset)); + this->DrawMNum(dc, mnum, measure, std::max(symbolOffset, yOffset)); } } } - DrawMeasureChildren(dc, measure, measure, system); + this->DrawMeasureChildren(dc, measure, measure, system); // Draw the barlines only with measured music if (measure->IsMeasuredMusic()) { System *system = vrv_cast(measure->GetFirstAncestor(SYSTEM)); assert(system); if ((measure->GetDrawingLeftBarLine() != BARRENDITION_NONE) || measure->HasInvisibleStaffBarlines()) { - DrawScoreDef(dc, system->GetDrawingScoreDef(), measure, measure->GetLeftBarLine()->GetDrawingX(), + this->DrawScoreDef(dc, system->GetDrawingScoreDef(), measure, measure->GetLeftBarLine()->GetDrawingX(), measure->GetLeftBarLine()); } if ((measure->GetDrawingRightBarLine() != BARRENDITION_NONE) || measure->HasInvisibleStaffBarlines()) { bool isLast = (measure == system->FindDescendantByType(MEASURE, 1, BACKWARD)) ? true : false; - DrawScoreDef(dc, system->GetDrawingScoreDef(), measure, measure->GetRightBarLine()->GetDrawingX(), + this->DrawScoreDef(dc, system->GetDrawingScoreDef(), measure, measure->GetRightBarLine()->GetDrawingX(), measure->GetRightBarLine(), isLast); } } @@ -1058,7 +1061,7 @@ void View::DrawMeterSigGrp(DeviceContext *dc, Layer *layer, Staff *staff) assert(meterSig); if (meterSig->HasCount()) { - DrawMeterSig(dc, meterSig, staff, offset); + this->DrawMeterSig(dc, meterSig, staff, offset); } const int y = staff->GetDrawingY() - unit * (staff->m_drawingLines - 1); @@ -1067,7 +1070,7 @@ void View::DrawMeterSigGrp(DeviceContext *dc, Layer *layer, Staff *staff) if ((meterSigGrp->GetFunc() == meterSigGrpLog_FUNC_mixed) && (iter != std::prev(childList->end()))) { // draw plus sign here const int plusX = x + width + unit / 2; - DrawSmuflCode(dc, plusX, y, SMUFL_E08C_timeSigPlus, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, plusX, y, SMUFL_E08C_timeSigPlus, staff->m_drawingStaffSize, false); offset += width + unit + m_doc->GetGlyphWidth(SMUFL_E08C_timeSigPlus, staff->m_drawingStaffSize, false); } else { @@ -1126,7 +1129,7 @@ void View::DrawMNum(DeviceContext *dc, MNum *mnum, Measure *measure, int yOffset dc->SetFont(&mnumTxt); dc->StartText(ToDeviceContextX(params.m_x), ToDeviceContextY(params.m_y), alignment); - DrawTextChildren(dc, mnum, params); + this->DrawTextChildren(dc, mnum, params); dc->EndText(); dc->ResetFont(); @@ -1159,27 +1162,27 @@ void View::DrawStaff(DeviceContext *dc, Staff *staff, Measure *measure, System * } if (staffDef && (staffDef->GetLinesVisible() != BOOLEAN_false)) { - DrawStaffLines(dc, staff, measure, system); + this->DrawStaffLines(dc, staff, measure, system); } - DrawStaffDef(dc, staff, measure); + this->DrawStaffDef(dc, staff, measure); if (!staff->GetLedgerLinesAbove().empty()) { - DrawLedgerLines(dc, staff, staff->GetLedgerLinesAbove(), false, false); + this->DrawLedgerLines(dc, staff, staff->GetLedgerLinesAbove(), false, false); } if (!staff->GetLedgerLinesBelow().empty()) { - DrawLedgerLines(dc, staff, staff->GetLedgerLinesBelow(), true, false); + this->DrawLedgerLines(dc, staff, staff->GetLedgerLinesBelow(), true, false); } if (!staff->GetLedgerLinesAboveCue().empty()) { - DrawLedgerLines(dc, staff, staff->GetLedgerLinesAboveCue(), false, true); + this->DrawLedgerLines(dc, staff, staff->GetLedgerLinesAboveCue(), false, true); } if (!staff->GetLedgerLinesBelowCue().empty()) { - DrawLedgerLines(dc, staff, staff->GetLedgerLinesBelowCue(), true, true); + this->DrawLedgerLines(dc, staff, staff->GetLedgerLinesBelowCue(), true, true); } - DrawStaffChildren(dc, staff, staff, measure); + this->DrawStaffChildren(dc, staff, staff, measure); - DrawStaffDefCautionary(dc, staff, measure); + this->DrawStaffDefCautionary(dc, staff, measure); for (auto &spanningElement : staff->m_timeSpanningElements) { system->AddToDrawingListIfNeccessary(spanningElement); @@ -1242,7 +1245,7 @@ void View::DrawStaffLines(DeviceContext *dc, Staff *staff, Measure *measure, Sys } } } - DrawHorizontalSegmentedLine(dc, y1, line, lineWidth); + this->DrawHorizontalSegmentedLine(dc, y1, line, lineWidth); y1 -= m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); y2 = y1; } @@ -1313,19 +1316,19 @@ void View::DrawStaffDef(DeviceContext *dc, Staff *staff, Measure *measure) // draw the scoreDef if required if (layer->GetStaffDefClef()) { - DrawLayerElement(dc, layer->GetStaffDefClef(), layer, staff, measure); + this->DrawLayerElement(dc, layer->GetStaffDefClef(), layer, staff, measure); } if (layer->GetStaffDefKeySig()) { - DrawLayerElement(dc, layer->GetStaffDefKeySig(), layer, staff, measure); + this->DrawLayerElement(dc, layer->GetStaffDefKeySig(), layer, staff, measure); } if (layer->GetStaffDefMensur()) { - DrawLayerElement(dc, layer->GetStaffDefMensur(), layer, staff, measure); + this->DrawLayerElement(dc, layer->GetStaffDefMensur(), layer, staff, measure); } if (layer->GetStaffDefMeterSigGrp()) { - DrawMeterSigGrp(dc, layer, staff); + this->DrawMeterSigGrp(dc, layer, staff); } else if (layer->GetStaffDefMeterSig()) { - DrawLayerElement(dc, layer->GetStaffDefMeterSig(), layer, staff, measure); + this->DrawLayerElement(dc, layer->GetStaffDefMeterSig(), layer, staff, measure); } // dc->EndGraphic(&staffDef, this); @@ -1346,16 +1349,16 @@ void View::DrawStaffDefCautionary(DeviceContext *dc, Staff *staff, Measure *meas // draw the scoreDef if required if (layer->GetCautionStaffDefClef()) { - DrawLayerElement(dc, layer->GetCautionStaffDefClef(), layer, staff, measure); + this->DrawLayerElement(dc, layer->GetCautionStaffDefClef(), layer, staff, measure); } if (layer->GetCautionStaffDefKeySig()) { - DrawLayerElement(dc, layer->GetCautionStaffDefKeySig(), layer, staff, measure); + this->DrawLayerElement(dc, layer->GetCautionStaffDefKeySig(), layer, staff, measure); } if (layer->GetCautionStaffDefMensur()) { - DrawLayerElement(dc, layer->GetCautionStaffDefMensur(), layer, staff, measure); + this->DrawLayerElement(dc, layer->GetCautionStaffDefMensur(), layer, staff, measure); } if (layer->GetCautionStaffDefMeterSig()) { - DrawLayerElement(dc, layer->GetCautionStaffDefMeterSig(), layer, staff, measure); + this->DrawLayerElement(dc, layer->GetCautionStaffDefMeterSig(), layer, staff, measure); } // dc->EndGraphic(&staffDef, this); @@ -1427,13 +1430,13 @@ void View::DrawLayer(DeviceContext *dc, Layer *layer, Staff *staff, Measure *mea dc->StartGraphic(layer, "", layer->GetUuid()); - DrawLayerChildren(dc, layer, layer, staff, measure); + this->DrawLayerChildren(dc, layer, layer, staff, measure); dc->EndGraphic(layer, this); // first draw the postponed tuplets - DrawLayerList(dc, layer, staff, measure, TUPLET_BRACKET); - DrawLayerList(dc, layer, staff, measure, TUPLET_NUM); + this->DrawLayerList(dc, layer, staff, measure, TUPLET_BRACKET); + this->DrawLayerList(dc, layer, staff, measure, TUPLET_NUM); } void View::DrawLayerList(DeviceContext *dc, Layer *layer, Staff *staff, Measure *measure, const ClassId classId) @@ -1448,10 +1451,10 @@ void View::DrawLayerList(DeviceContext *dc, Layer *layer, Staff *staff, Measure for (iter = drawingList->begin(); iter != drawingList->end(); ++iter) { if ((*iter)->Is(classId) && (classId == TUPLET_BRACKET)) { - DrawTupletBracket(dc, dynamic_cast(*iter), layer, staff, measure); + this->DrawTupletBracket(dc, dynamic_cast(*iter), layer, staff, measure); } if ((*iter)->Is(classId) && (classId == TUPLET_NUM)) { - DrawTupletNum(dc, dynamic_cast(*iter), layer, staff, measure); + this->DrawTupletNum(dc, dynamic_cast(*iter), layer, staff, measure); } } } @@ -1504,8 +1507,8 @@ void View::DrawSystemDivider(DeviceContext *dc, System *system, Measure *firstMe // left and left-right dc->StartCustomGraphic("systemDivider"); - DrawObliquePolygon(dc, x1, y1, x2, y2, m_doc->GetDrawingUnit(100) * 1.5); - DrawObliquePolygon(dc, x1, y3, x2, y4, m_doc->GetDrawingUnit(100) * 1.5); + this->DrawObliquePolygon(dc, x1, y1, x2, y2, m_doc->GetDrawingUnit(100) * 1.5); + this->DrawObliquePolygon(dc, x1, y3, x2, y4, m_doc->GetDrawingUnit(100) * 1.5); if (m_options->m_systemDivider.GetValue() == SYSTEMDIVIDER_left_right) { // Right divider is not taken into account in the layout calculation and can collision with the music // content @@ -1513,8 +1516,8 @@ void View::DrawSystemDivider(DeviceContext *dc, System *system, Measure *firstMe assert(lastMeasure); int x4 = lastMeasure->GetDrawingX() + lastMeasure->GetRightBarLineRight(); int x3 = x4 - m_doc->GetDrawingUnit(100) * 6; - DrawObliquePolygon(dc, x3, y1, x4, y2, m_doc->GetDrawingUnit(100) * 1.5); - DrawObliquePolygon(dc, x3, y3, x4, y4, m_doc->GetDrawingUnit(100) * 1.5); + this->DrawObliquePolygon(dc, x3, y1, x4, y2, m_doc->GetDrawingUnit(100) * 1.5); + this->DrawObliquePolygon(dc, x3, y3, x4, y4, m_doc->GetDrawingUnit(100) * 1.5); } dc->EndCustomGraphic(); @@ -1534,7 +1537,7 @@ void View::DrawSystemChildren(DeviceContext *dc, Object *parent, System *system) for (auto current : *parent->GetChildren()) { if (current->Is(MEASURE)) { // cast to Measure check in DrawMeasure - DrawMeasure(dc, dynamic_cast(current), system); + this->DrawMeasure(dc, dynamic_cast(current), system); } // scoreDef are not drawn directly, but anything else should not be possible else if (current->Is(SCOREDEF)) { @@ -1544,18 +1547,18 @@ void View::DrawSystemChildren(DeviceContext *dc, Object *parent, System *system) Measure *nextMeasure = dynamic_cast(system->GetNext(scoreDef, MEASURE)); if (nextMeasure && scoreDef->DrawLabels()) { - DrawScoreDef(dc, scoreDef, nextMeasure, nextMeasure->GetDrawingX()); + this->DrawScoreDef(dc, scoreDef, nextMeasure, nextMeasure->GetDrawingX()); } - SetScoreDefDrawingWidth(dc, scoreDef); + this->SetScoreDefDrawingWidth(dc, scoreDef); } else if (current->IsSystemElement()) { // cast to SystemElement check in DrawSystemEditorial element - DrawSystemElement(dc, dynamic_cast(current), system); + this->DrawSystemElement(dc, dynamic_cast(current), system); } else if (current->IsEditorialElement()) { // cast to EditorialElement check in DrawSystemEditorial element - DrawSystemEditorialElement(dc, dynamic_cast(current), system); + this->DrawSystemEditorialElement(dc, dynamic_cast(current), system); } else { assert(false); @@ -1573,15 +1576,15 @@ void View::DrawMeasureChildren(DeviceContext *dc, Object *parent, Measure *measu for (auto current : *parent->GetChildren()) { if (current->Is(STAFF)) { // cast to Staff check in DrawStaff - DrawStaff(dc, dynamic_cast(current), measure, system); + this->DrawStaff(dc, dynamic_cast(current), measure, system); } else if (current->IsControlElement()) { // cast to ControlElement check in DrawControlElement - DrawControlElement(dc, dynamic_cast(current), measure, system); + this->DrawControlElement(dc, dynamic_cast(current), measure, system); } else if (current->IsEditorialElement()) { // cast to EditorialElement check in DrawMeasureEditorialElement - DrawMeasureEditorialElement(dc, dynamic_cast(current), measure, system); + this->DrawMeasureEditorialElement(dc, dynamic_cast(current), measure, system); } else { LogDebug("Current is %s", current->GetClassName().c_str()); @@ -1600,11 +1603,11 @@ void View::DrawStaffChildren(DeviceContext *dc, Object *parent, Staff *staff, Me for (auto current : *parent->GetChildren()) { if (current->Is(LAYER)) { // cast to Layer check in DrawLayer - DrawLayer(dc, dynamic_cast(current), staff, measure); + this->DrawLayer(dc, dynamic_cast(current), staff, measure); } else if (current->IsEditorialElement()) { // cast to EditorialElement check in DrawStaffEditorialElement - DrawStaffEditorialElement(dc, dynamic_cast(current), staff, measure); + this->DrawStaffEditorialElement(dc, dynamic_cast(current), staff, measure); } else { assert(false); @@ -1622,11 +1625,11 @@ void View::DrawLayerChildren(DeviceContext *dc, Object *parent, Layer *layer, St for (auto current : *parent->GetChildren()) { if (current->IsLayerElement()) { - DrawLayerElement(dc, dynamic_cast(current), layer, staff, measure); + this->DrawLayerElement(dc, dynamic_cast(current), layer, staff, measure); } else if (current->IsEditorialElement()) { // cast to EditorialElement check in DrawLayerEditorialElement - DrawLayerEditorialElement(dc, dynamic_cast(current), layer, staff, measure); + this->DrawLayerEditorialElement(dc, dynamic_cast(current), layer, staff, measure); } else if (!current->Is({ LABEL, LABELABBR })) { assert(false); @@ -1652,11 +1655,11 @@ void View::DrawTextChildren(DeviceContext *dc, Object *parent, TextDrawingParams for (auto current : *parent->GetChildren()) { if (current->IsTextElement()) { - DrawTextElement(dc, dynamic_cast(current), params); + this->DrawTextElement(dc, dynamic_cast(current), params); } else if (current->IsEditorialElement()) { // cast to EditorialElement check in DrawTextEditorialElement - DrawTextEditorialElement(dc, dynamic_cast(current), params); + this->DrawTextEditorialElement(dc, dynamic_cast(current), params); } else { assert(false); @@ -1671,11 +1674,11 @@ void View::DrawFbChildren(DeviceContext *dc, Object *parent, TextDrawingParams & for (auto current : *parent->GetChildren()) { if (current->IsTextElement()) { - DrawTextElement(dc, dynamic_cast(current), params); + this->DrawTextElement(dc, dynamic_cast(current), params); } else if (current->IsEditorialElement()) { // cast to EditorialElement check in DrawLayerEditorialElement - DrawFbEditorialElement(dc, dynamic_cast(current), params); + this->DrawFbEditorialElement(dc, dynamic_cast(current), params); } else { assert(false); @@ -1690,18 +1693,18 @@ void View::DrawRunningChildren(DeviceContext *dc, Object *parent, TextDrawingPar for (auto current : *parent->GetChildren()) { if (current->Is(FIG)) { - DrawFig(dc, dynamic_cast(current), params); + this->DrawFig(dc, dynamic_cast(current), params); } else if (current->IsTextElement()) { // We are now reaching a text element - start set only here because we can have a figure TextDrawingParams paramsChild = params; dc->StartText(ToDeviceContextX(params.m_x), ToDeviceContextY(params.m_y), HORIZONTALALIGNMENT_left); - DrawTextElement(dc, dynamic_cast(current), paramsChild); + this->DrawTextElement(dc, dynamic_cast(current), paramsChild); dc->EndText(); } else if (current->IsEditorialElement()) { // cast to EditorialElement check in DrawLayerEditorialElement - DrawRunningEditorialElement(dc, dynamic_cast(current), params); + this->DrawRunningEditorialElement(dc, dynamic_cast(current), params); } else { assert(false); @@ -1717,7 +1720,7 @@ void View::DrawSystemEditorialElement(DeviceContext *dc, EditorialElement *eleme { assert(element); if (element->Is(ANNOT)) { - DrawAnnot(dc, element); + this->DrawAnnot(dc, element); return; } if (element->Is(APP)) { @@ -1741,7 +1744,7 @@ void View::DrawMeasureEditorialElement(DeviceContext *dc, EditorialElement *elem { assert(element); if (element->Is(ANNOT)) { - DrawAnnot(dc, element); + this->DrawAnnot(dc, element); return; } if (element->Is(APP)) { @@ -1753,7 +1756,7 @@ void View::DrawMeasureEditorialElement(DeviceContext *dc, EditorialElement *elem dc->StartGraphic(element, "", element->GetUuid()); if (element->m_visibility == Visible) { - DrawMeasureChildren(dc, element, measure, system); + this->DrawMeasureChildren(dc, element, measure, system); } dc->EndGraphic(element, this); } @@ -1762,7 +1765,7 @@ void View::DrawStaffEditorialElement(DeviceContext *dc, EditorialElement *elemen { assert(element); if (element->Is(ANNOT)) { - DrawAnnot(dc, element); + this->DrawAnnot(dc, element); return; } if (element->Is(APP)) { @@ -1774,7 +1777,7 @@ void View::DrawStaffEditorialElement(DeviceContext *dc, EditorialElement *elemen dc->StartGraphic(element, "", element->GetUuid()); if (element->m_visibility == Visible) { - DrawStaffChildren(dc, element, staff, measure); + this->DrawStaffChildren(dc, element, staff, measure); } dc->EndGraphic(element, this); } @@ -1784,7 +1787,7 @@ void View::DrawLayerEditorialElement( { assert(element); if (element->Is(ANNOT)) { - DrawAnnot(dc, element); + this->DrawAnnot(dc, element); return; } if (element->Is(APP)) { @@ -1796,7 +1799,7 @@ void View::DrawLayerEditorialElement( dc->StartGraphic(element, "", element->GetUuid()); if (element->m_visibility == Visible) { - DrawLayerChildren(dc, element, layer, staff, measure); + this->DrawLayerChildren(dc, element, layer, staff, measure); } dc->EndGraphic(element, this); } @@ -1805,7 +1808,7 @@ void View::DrawTextEditorialElement(DeviceContext *dc, EditorialElement *element { assert(element); if (element->Is(ANNOT)) { - DrawAnnot(dc, element, true); + this->DrawAnnot(dc, element, true); return; } if (element->Is(APP)) { @@ -1817,7 +1820,7 @@ void View::DrawTextEditorialElement(DeviceContext *dc, EditorialElement *element dc->StartTextGraphic(element, "", element->GetUuid()); if (element->m_visibility == Visible) { - DrawTextChildren(dc, element, params); + this->DrawTextChildren(dc, element, params); } dc->EndTextGraphic(element, this); } @@ -1826,7 +1829,7 @@ void View::DrawFbEditorialElement(DeviceContext *dc, EditorialElement *element, { assert(element); if (element->Is(ANNOT)) { - DrawAnnot(dc, element, true); + this->DrawAnnot(dc, element, true); return; } if (element->Is(APP)) { @@ -1838,7 +1841,7 @@ void View::DrawFbEditorialElement(DeviceContext *dc, EditorialElement *element, dc->StartTextGraphic(element, "", element->GetUuid()); if (element->m_visibility == Visible) { - DrawFbChildren(dc, element, params); + this->DrawFbChildren(dc, element, params); } dc->EndTextGraphic(element, this); } @@ -1847,7 +1850,7 @@ void View::DrawRunningEditorialElement(DeviceContext *dc, EditorialElement *elem { assert(element); if (element->Is(ANNOT)) { - DrawAnnot(dc, element, true); + this->DrawAnnot(dc, element, true); return; } if (element->Is(APP)) { @@ -1859,7 +1862,7 @@ void View::DrawRunningEditorialElement(DeviceContext *dc, EditorialElement *elem dc->StartGraphic(element, "", element->GetUuid()); if (element->m_visibility == Visible) { - DrawRunningChildren(dc, element, params); + this->DrawRunningChildren(dc, element, params); } dc->EndGraphic(element, this); } diff --git a/src/view_running.cpp b/src/view_running.cpp index 4ba5f4abacf..d29209e670f 100644 --- a/src/view_running.cpp +++ b/src/view_running.cpp @@ -39,11 +39,11 @@ void View::DrawRunningElements(DeviceContext *dc, Page *page) RunningElement *header = page->GetHeader(); if (header) { - DrawPgHeader(dc, header); + this->DrawPgHeader(dc, header); } RunningElement *footer = page->GetFooter(); if (footer) { - DrawPgHeader(dc, footer); + this->DrawPgHeader(dc, footer); } } @@ -71,7 +71,7 @@ void View::DrawPgHeader(DeviceContext *dc, RunningElement *pgHeader) dc->SetBrush(m_currentColour, AxSOLID); dc->SetFont(&pgHeadTxt); - DrawRunningChildren(dc, pgHeader, params); + this->DrawRunningChildren(dc, pgHeader, params); dc->ResetFont(); dc->ResetBrush(); diff --git a/src/view_slur.cpp b/src/view_slur.cpp index ecea84726d8..e6ce535255a 100644 --- a/src/view_slur.cpp +++ b/src/view_slur.cpp @@ -76,14 +76,14 @@ void View::DrawSlur(DeviceContext *dc, Slur *slur, int x1, int x2, Staff *staff, m_slurThicknessCoefficient = BoundingBox::GetBezierThicknessCoefficient(points, curve->GetThickness(), curve->GetAngle(), penWidth); } - DrawThickBezierCurve(dc, points, m_slurThicknessCoefficient * curve->GetThickness(), staff->m_drawingStaffSize, - penWidth, curve->GetAngle(), penStyle); + this->DrawThickBezierCurve(dc, points, m_slurThicknessCoefficient * curve->GetThickness(), + staff->m_drawingStaffSize, penWidth, curve->GetAngle(), penStyle); /* int i; for (i = 0; i <= 10; ++i) { Point p = BoundingBox::CalcDeCasteljau(points, (double)i / 10.0); - DrawDot(dc, p.x, p.y, staff->m_drawingStaffSize); + this->DrawDot(dc, p.x, p.y, staff->m_drawingStaffSize); } */ diff --git a/src/view_tab.cpp b/src/view_tab.cpp index 2e36934f352..116349d2c8c 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -43,7 +43,7 @@ void View::DrawTabGrp(DeviceContext *dc, LayerElement *element, Layer *layer, St dc->StartGraphic(tabGrp, "", tabGrp->GetUuid()); // Draw children (rhyhtm, notes) - DrawLayerChildren(dc, tabGrp, layer, staff, measure); + this->DrawLayerChildren(dc, tabGrp, layer, staff, measure); dc->EndGraphic(tabGrp, this); } @@ -88,7 +88,7 @@ void View::DrawTabNote(DeviceContext *dc, LayerElement *element, Layer *layer, S params.m_y -= (m_doc->GetTextGlyphHeight(L'0', &fretTxt, drawingCueSize) / 2); dc->StartText(ToDeviceContextX(params.m_x), ToDeviceContextY(params.m_y), HORIZONTALALIGNMENT_center); - DrawTextString(dc, fret, params); + this->DrawTextString(dc, fret, params); dc->EndText(); dc->ResetFont(); @@ -107,12 +107,12 @@ void View::DrawTabNote(DeviceContext *dc, LayerElement *element, Layer *layer, S } dc->SetFont(m_doc->GetDrawingSmuflFont(glyphSize, false)); - DrawSmuflString(dc, x, y, fret, HORIZONTALALIGNMENT_center, glyphSize); + this->DrawSmuflString(dc, x, y, fret, HORIZONTALALIGNMENT_center, glyphSize); dc->ResetFont(); } // Draw children (nothing yet) - DrawLayerChildren(dc, note, layer, staff, measure); + this->DrawLayerChildren(dc, note, layer, staff, measure); dc->EndGraphic(note, this); } @@ -142,7 +142,7 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, // Do we also need to draw the dots? if (tabGrp->IsInBeam()) { const int height = m_doc->GetGlyphHeight(SMUFL_EBA8_luteDurationHalf, glyphSize, true); - DrawFilledRectangle(dc, x - m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) / 2, y, + this->DrawFilledRectangle(dc, x - m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) / 2, y, x + m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) / 2, y + height); } else { @@ -156,13 +156,13 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, default: symc = SMUFL_EBA9_luteDurationQuarter; } - DrawSmuflCode(dc, x, y, symc, glyphSize, true); + this->DrawSmuflCode(dc, x, y, symc, glyphSize, true); if (tabGrp->HasDots()) { y += m_doc->GetDrawingUnit(glyphSize) * 0.5; x += m_doc->GetDrawingUnit(glyphSize); for (int i = 0; i < tabGrp->GetDots(); ++i) { - DrawDot(dc, x, y, glyphSize * 2 / 3); + this->DrawDot(dc, x, y, glyphSize * 2 / 3); // HARDCODED x += m_doc->GetDrawingUnit(glyphSize) * 0.75; } @@ -170,7 +170,7 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, } // Draw children (nothing yet) - DrawLayerChildren(dc, tabDurSym, layer, staff, measure); + this->DrawLayerChildren(dc, tabDurSym, layer, staff, measure); dc->EndGraphic(tabDurSym, this); } diff --git a/src/view_text.cpp b/src/view_text.cpp index f42bb0d198e..36f1f0678de 100644 --- a/src/view_text.cpp +++ b/src/view_text.cpp @@ -45,7 +45,7 @@ void View::DrawF(DeviceContext *dc, F *f, TextDrawingParams ¶ms) dc->StartTextGraphic(f, "", f->GetUuid()); - DrawTextChildren(dc, f, params); + this->DrawTextChildren(dc, f, params); if (f->GetStart() && f->GetEnd()) { System *currentSystem = dynamic_cast(f->GetFirstAncestor(SYSTEM)); @@ -70,7 +70,7 @@ void View::DrawDynamString(DeviceContext *dc, std::wstring str, TextDrawingParam assert(dc); if (rend && rend->HasFontfam()) { - DrawTextString(dc, str, params); + this->DrawTextString(dc, str, params); return; } @@ -79,7 +79,7 @@ void View::DrawDynamString(DeviceContext *dc, std::wstring str, TextDrawingParam int first = true; for (auto &token : tokens) { if (!first) { - // DrawTextString(dc, L" ", params); + // this->DrawTextString(dc, L" ", params); } first = false; @@ -89,16 +89,16 @@ void View::DrawDynamString(DeviceContext *dc, std::wstring str, TextDrawingParam vrvTxt.SetFaceName("VerovioText"); vrvTxt.SetStyle(FONTSTYLE_normal); dc->SetFont(&vrvTxt); - DrawTextString(dc, smuflStr, params); + this->DrawTextString(dc, smuflStr, params); dc->ResetFont(); } else { - DrawTextString(dc, token.first, params); + this->DrawTextString(dc, token.first, params); } } } else { - DrawTextString(dc, str, params); + this->DrawTextString(dc, str, params); } } @@ -169,27 +169,27 @@ void View::DrawTextElement(DeviceContext *dc, TextElement *element, TextDrawingP if (element->Is(FIGURE)) { F *f = vrv_cast(element); assert(f); - DrawF(dc, f, params); + this->DrawF(dc, f, params); } else if (element->Is(LB)) { Lb *lb = vrv_cast(element); assert(lb); - DrawLb(dc, lb, params); + this->DrawLb(dc, lb, params); } else if (element->Is(NUM)) { Num *num = vrv_cast(element); assert(num); - DrawNum(dc, num, params); + this->DrawNum(dc, num, params); } else if (element->Is(REND)) { Rend *rend = vrv_cast(element); assert(rend); - DrawRend(dc, rend, params); + this->DrawRend(dc, rend, params); } else if (element->Is(TEXT)) { Text *text = vrv_cast(element); assert(text); - DrawText(dc, text, params); + this->DrawText(dc, text, params); } else { assert(false); @@ -260,10 +260,10 @@ void View::DrawNum(DeviceContext *dc, Num *num, TextDrawingParams ¶ms) Text *currentText = num->GetCurrentText(); if (currentText && (currentText->GetText().length() > 0)) { - DrawText(dc, num->GetCurrentText(), params); + this->DrawText(dc, num->GetCurrentText(), params); } else { - DrawTextChildren(dc, num, params); + this->DrawTextChildren(dc, num, params); } dc->EndTextGraphic(num, this); @@ -280,7 +280,7 @@ void View::DrawFig(DeviceContext *dc, Fig *fig, TextDrawingParams ¶ms) if (svg) { params.m_x = fig->GetDrawingX(); params.m_y = fig->GetDrawingY(); - DrawSvg(dc, svg, params); + this->DrawSvg(dc, svg, params); } dc->EndGraphic(fig, this); @@ -348,7 +348,7 @@ void View::DrawRend(DeviceContext *dc, Rend *rend, TextDrawingParams ¶ms) params.m_explicitPosition = true; } - DrawTextChildren(dc, rend, params); + this->DrawTextChildren(dc, rend, params); if ((rend->GetRend() == TEXTRENDITION_sup) || (rend->GetRend() == TEXTRENDITION_sub)) { params.m_y -= yShift; @@ -389,23 +389,23 @@ void View::DrawText(DeviceContext *dc, Text *text, TextDrawingParams ¶ms) // special case where we want to replace the '#' or 'b' with a VerovioText glyphs if (text->GetFirstAncestor(DYNAM)) { - DrawDynamString(dc, text->GetText(), params, dynamic_cast(text->GetFirstAncestor(REND))); + this->DrawDynamString(dc, text->GetText(), params, dynamic_cast(text->GetFirstAncestor(REND))); } else if (text->GetFirstAncestor(HARM)) { - DrawHarmString(dc, text->GetText(), params); + this->DrawHarmString(dc, text->GetText(), params); } // special case where we want to replace the '_' with a lyric connector // '_' are produce with the SibMEI plugin else if (text->GetFirstAncestor(SYL)) { if (params.m_height != VRV_UNSET && params.m_height != 0) { - DrawLyricString(dc, text->GetText(), 100, params); + this->DrawLyricString(dc, text->GetText(), 100, params); } else { - DrawLyricString(dc, text->GetText()); + this->DrawLyricString(dc, text->GetText()); } } else { - DrawTextString(dc, text->GetText(), params); + this->DrawTextString(dc, text->GetText(), params); } params.m_actualWidth = text->GetContentRight(); diff --git a/src/view_tuplet.cpp b/src/view_tuplet.cpp index 64ebc120939..70e01788c41 100644 --- a/src/view_tuplet.cpp +++ b/src/view_tuplet.cpp @@ -68,7 +68,7 @@ void View::DrawTuplet(DeviceContext *dc, LayerElement *element, Layer *layer, St dc->StartGraphic(element, "", element->GetUuid()); // Draw the inner elements - DrawLayerChildren(dc, tuplet, layer, staff, measure); + this->DrawLayerChildren(dc, tuplet, layer, staff, measure); dc->EndGraphic(element, this); } @@ -117,14 +117,14 @@ void View::DrawTupletBracket(DeviceContext *dc, LayerElement *element, Layer *la = tupletBracket->GetAlignedNum()->GetSelfRight() + m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize); const double slope = (double)(yRight - yLeft) / (double)(xRight - xLeft); const int yNumLeft = yLeft + slope * (xNumLeft - xLeft); - DrawObliquePolygon(dc, xLeft, yLeft, xNumLeft, yNumLeft, lineWidth); + this->DrawObliquePolygon(dc, xLeft, yLeft, xNumLeft, yNumLeft, lineWidth); const int yNumRight = yRight - slope * (xRight - xNumRight); - DrawObliquePolygon(dc, xNumRight, yNumRight, xRight, yRight, lineWidth); + this->DrawObliquePolygon(dc, xNumRight, yNumRight, xRight, yRight, lineWidth); bracketHeight = abs(tupletBracket->GetAlignedNum()->GetSelfTop() - tupletBracket->GetAlignedNum()->GetSelfBottom()) / 2; } else { - DrawObliquePolygon(dc, xLeft, yLeft, xRight, yRight, lineWidth); + this->DrawObliquePolygon(dc, xLeft, yLeft, xRight, yRight, lineWidth); // HARDCODED bracketHeight = m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * 6 / 5; } @@ -133,8 +133,8 @@ void View::DrawTupletBracket(DeviceContext *dc, LayerElement *element, Layer *la bracketHeight *= -1; } - DrawFilledRectangle(dc, xLeft, yLeft, xLeft + lineWidth, yLeft + bracketHeight); - DrawFilledRectangle(dc, xRight, yRight, xRight - lineWidth, yRight + bracketHeight); + this->DrawFilledRectangle(dc, xLeft, yLeft, xLeft + lineWidth, yLeft + bracketHeight); + this->DrawFilledRectangle(dc, xRight, yRight, xRight - lineWidth, yRight + bracketHeight); dc->EndResumedGraphic(tupletBracket, this); @@ -187,7 +187,7 @@ void View::DrawTupletNum(DeviceContext *dc, LayerElement *element, Layer *layer, dc->ResumeGraphic(tupletNum, tupletNum->GetUuid()); - DrawSmuflString(dc, x, y, notes, HORIZONTALALIGNMENT_left, staff->m_drawingStaffSize, drawingCueSize); + this->DrawSmuflString(dc, x, y, notes, HORIZONTALALIGNMENT_left, staff->m_drawingStaffSize, drawingCueSize); dc->EndResumedGraphic(tupletNum, this); diff --git a/src/zone.cpp b/src/zone.cpp index 8671f379777..ecdcca926fe 100644 --- a/src/zone.cpp +++ b/src/zone.cpp @@ -27,17 +27,17 @@ static const ClassRegistrar s_factory("zone", ZONE); Zone::Zone() : Object(ZONE, "zone-"), AttTyped(), AttCoordinated() { - RegisterAttClass(ATT_TYPED); - RegisterAttClass(ATT_COORDINATED); - Reset(); + this->RegisterAttClass(ATT_TYPED); + this->RegisterAttClass(ATT_COORDINATED); + this->Reset(); } Zone::~Zone() {} void Zone::Reset() { - ResetTyped(); - ResetCoordinated(); + this->ResetTyped(); + this->ResetCoordinated(); } void Zone::ShiftByXY(int xDiff, int yDiff) From 5fa9a1922391df51928428c46a32b50ccf77dc88 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sun, 30 Jan 2022 16:22:51 +0100 Subject: [PATCH 179/403] Adjust style to coding guidelines for calls to this methods [skip-ci] --- src/object.cpp | 2 +- src/tuning.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/object.cpp b/src/object.cpp index 79d5b533561..8fa9fddf9a9 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -541,7 +541,7 @@ Object *Object::FindDescendantByUuid(std::string uuid, int deepness, bool direct Object *Object::FindDescendantByType(ClassId classId, int deepness, bool direction) { ClassIdComparison comparison(classId); - return FindDescendantByComparison(&comparison, deepness, direction); + return this->FindDescendantByComparison(&comparison, deepness, direction); } Object *Object::FindDescendantByComparison(Comparison *comparison, int deepness, bool direction) diff --git a/src/tuning.cpp b/src/tuning.cpp index c493a238adc..269afdedb93 100644 --- a/src/tuning.cpp +++ b/src/tuning.cpp @@ -75,7 +75,7 @@ int Tuning::CalcPitchNumber(int course, int fret, data_NOTATIONTYPE notationType // Do we have the tuning for this course? AttNNumberLikeComparison cnc(COURSE, std::to_string(course)); - Course *courseTuning = vrv_cast(FindDescendantByComparison(&cnc)); + Course *courseTuning = vrv_cast(this->FindDescendantByComparison(&cnc)); if (courseTuning && courseTuning->HasPname() && courseTuning->HasOct()) { From 9a183aea3a87a4a6324aa3a7abade37038fb4ba2 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sun, 30 Jan 2022 16:41:23 +0100 Subject: [PATCH 180/403] Add SMuFL tab clefs 6stringTabClef and 4stringTabClef --- data/Bravura.xml | 2 ++ data/Bravura/E06D.xml | 1 + data/Bravura/E06E.xml | 1 + data/Gootville.xml | 1 + data/Gootville/E06D.xml | 1 + data/Leipzig.xml | 2 ++ data/Leipzig/E06D.xml | 1 + data/Leipzig/E06E.xml | 1 + data/Leland.xml | 2 ++ data/Leland/E06D.xml | 1 + data/Leland/E06E.xml | 1 + data/Petaluma.xml | 2 ++ data/Petaluma/E06D.xml | 1 + data/Petaluma/E06E.xml | 1 + fonts/supported.xsl | 2 ++ include/vrv/smufl.h | 4 +++- src/smufl.cpp | 4 +++- 17 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 data/Bravura/E06D.xml create mode 100644 data/Bravura/E06E.xml create mode 100644 data/Gootville/E06D.xml create mode 100644 data/Leipzig/E06D.xml create mode 100644 data/Leipzig/E06E.xml create mode 100644 data/Leland/E06D.xml create mode 100644 data/Leland/E06E.xml create mode 100644 data/Petaluma/E06D.xml create mode 100644 data/Petaluma/E06E.xml diff --git a/data/Bravura.xml b/data/Bravura.xml index 3eda0822bcc..d1b0627bc16 100644 --- a/data/Bravura.xml +++ b/data/Bravura.xml @@ -27,6 +27,8 @@ + + diff --git a/data/Bravura/E06D.xml b/data/Bravura/E06D.xml new file mode 100644 index 00000000000..86e6fddfc7a --- /dev/null +++ b/data/Bravura/E06D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Bravura/E06E.xml b/data/Bravura/E06E.xml new file mode 100644 index 00000000000..544747096b6 --- /dev/null +++ b/data/Bravura/E06E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville.xml b/data/Gootville.xml index e3c4bce50ea..d96f83deba1 100644 --- a/data/Gootville.xml +++ b/data/Gootville.xml @@ -90,6 +90,7 @@ + diff --git a/data/Gootville/E06D.xml b/data/Gootville/E06D.xml new file mode 100644 index 00000000000..001c641adb8 --- /dev/null +++ b/data/Gootville/E06D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig.xml b/data/Leipzig.xml index 8ba34e638fe..a6d9653ce81 100644 --- a/data/Leipzig.xml +++ b/data/Leipzig.xml @@ -509,6 +509,8 @@ + + diff --git a/data/Leipzig/E06D.xml b/data/Leipzig/E06D.xml new file mode 100644 index 00000000000..39d9e680d6f --- /dev/null +++ b/data/Leipzig/E06D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E06E.xml b/data/Leipzig/E06E.xml new file mode 100644 index 00000000000..4e61f9560de --- /dev/null +++ b/data/Leipzig/E06E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland.xml b/data/Leland.xml index cc89b379277..c216c2104e1 100644 --- a/data/Leland.xml +++ b/data/Leland.xml @@ -92,6 +92,8 @@ + + diff --git a/data/Leland/E06D.xml b/data/Leland/E06D.xml new file mode 100644 index 00000000000..66282d9fad6 --- /dev/null +++ b/data/Leland/E06D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland/E06E.xml b/data/Leland/E06E.xml new file mode 100644 index 00000000000..a413619e975 --- /dev/null +++ b/data/Leland/E06E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma.xml b/data/Petaluma.xml index 8d2987dfe0d..13b5a02d3c8 100644 --- a/data/Petaluma.xml +++ b/data/Petaluma.xml @@ -97,6 +97,8 @@ + + diff --git a/data/Petaluma/E06D.xml b/data/Petaluma/E06D.xml new file mode 100644 index 00000000000..468eab6378a --- /dev/null +++ b/data/Petaluma/E06D.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Petaluma/E06E.xml b/data/Petaluma/E06E.xml new file mode 100644 index 00000000000..563e126d7a1 --- /dev/null +++ b/data/Petaluma/E06E.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fonts/supported.xsl b/fonts/supported.xsl index db3075ef785..c3a1348d818 100644 --- a/fonts/supported.xsl +++ b/fonts/supported.xsl @@ -111,6 +111,8 @@ + + diff --git a/include/vrv/smufl.h b/include/vrv/smufl.h index 26d2a4a3227..5ea9479cf3a 100644 --- a/include/vrv/smufl.h +++ b/include/vrv/smufl.h @@ -49,6 +49,8 @@ enum { SMUFL_E066_fClef15ma = 0xE066, SMUFL_E069_unpitchedPercussionClef1 = 0xE069, SMUFL_E06A_unpitchedPercussionClef2 = 0xE06A, + SMUFL_E06D_6stringTabClef = 0xE06D, + SMUFL_E06E_4stringTabClef = 0xE06E, SMUFL_E073_gClefReversed = 0xE073, SMUFL_E074_gClefTurned = 0xE074, SMUFL_E075_cClefReversed = 0xE075, @@ -440,7 +442,7 @@ enum { }; /** The number of glyphs for verification **/ -#define SMUFL_COUNT 415 +#define SMUFL_COUNT 417 } // namespace vrv diff --git a/src/smufl.cpp b/src/smufl.cpp index 8a1a8efd2ce..5abd3319515 100644 --- a/src/smufl.cpp +++ b/src/smufl.cpp @@ -50,6 +50,8 @@ const std::map Resources::s_smuflNames = { { "fClef15ma", SMUFL_E066_fClef15ma }, { "unpitchedPercussionClef1", SMUFL_E069_unpitchedPercussionClef1 }, { "unpitchedPercussionClef2", SMUFL_E06A_unpitchedPercussionClef2 }, + { "6stringTabClef", SMUFL_E06D_6stringTabClef }, + { "4stringTabClef", SMUFL_E06E_4stringTabClef }, { "gClefReversed", SMUFL_E073_gClefReversed }, { "gClefTurned", SMUFL_E074_gClefTurned }, { "cClefReversed", SMUFL_E075_cClefReversed }, @@ -441,6 +443,6 @@ const std::map Resources::s_smuflNames = { }; /** The number of glyphs for verification **/ -// 415 +// 417 } // namespace vrv From b8db96ef248e76f205e2ac7cdc698df69cc2a803 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Sun, 30 Jan 2022 18:40:45 +0100 Subject: [PATCH 181/403] Add clef for guitar tablature --- include/vrv/view.h | 1 + src/clef.cpp | 2 ++ src/view_element.cpp | 16 +++++++++++----- src/view_tab.cpp | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 5 deletions(-) diff --git a/include/vrv/view.h b/include/vrv/view.h index f70a64785ae..6f547fe0051 100644 --- a/include/vrv/view.h +++ b/include/vrv/view.h @@ -508,6 +508,7 @@ class View { * Defined in view_tab.cpp */ ///@{ + void DrawTabClef(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure); void DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure); void DrawTabGrp(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure); void DrawTabNote(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure); diff --git a/src/clef.cpp b/src/clef.cpp index 8daecb5f291..7b864c8f76d 100644 --- a/src/clef.cpp +++ b/src/clef.cpp @@ -108,6 +108,8 @@ wchar_t Clef::GetClefGlyph(const data_NOTATIONTYPE notationtype) const } switch (notationtype) { + case NOTATIONTYPE_tab: + case NOTATIONTYPE_tab_guitar: return SMUFL_E06D_6stringTabClef; break; case NOTATIONTYPE_neume: // neume clefs return (this->GetShape() == CLEFSHAPE_F) ? SMUFL_E902_chantFclef : SMUFL_E906_chantCclef; diff --git a/src/view_element.cpp b/src/view_element.cpp index 889f00f7669..22b1b382328 100644 --- a/src/view_element.cpp +++ b/src/view_element.cpp @@ -616,6 +616,11 @@ void View::DrawClef(DeviceContext *dc, LayerElement *element, Layer *layer, Staf return; } + if (staff->IsTablature()) { + this->DrawTabClef(dc, element, layer, staff, measure); + return; + } + int x, y; if (m_doc->GetType() == Facs && clef->HasFacs()) { y = ToLogicalY(staff->GetDrawingY()); @@ -683,14 +688,15 @@ void View::DrawClefEnclosing( { if ((clef->GetEnclose() == ENCLOSURE_brack) || (clef->GetEnclose() == ENCLOSURE_box)) { const int unit = m_doc->GetDrawingUnit(staff->m_drawingStaffSize); - x += sizeFactor * m_doc->GetGlyphLeft(glyph, staff->m_drawingStaffSize, false); - y += sizeFactor * m_doc->GetGlyphBottom(glyph, staff->m_drawingStaffSize, false); - const int height = sizeFactor * m_doc->GetGlyphHeight(glyph, staff->m_drawingStaffSize, false); - const int width = sizeFactor * m_doc->GetGlyphWidth(glyph, staff->m_drawingStaffSize, false); + const int glyphSize = staff->GetDrawingStaffNotationSize(); + x += sizeFactor * m_doc->GetGlyphLeft(glyph, glyphSize, false); + y += sizeFactor * m_doc->GetGlyphBottom(glyph, glyphSize, false); + const int height = sizeFactor * m_doc->GetGlyphHeight(glyph, glyphSize, false); + const int width = sizeFactor * m_doc->GetGlyphWidth(glyph, glyphSize, false); const int offset = 3 * unit / 4; // We use overlapping brackets to draw boxes :) const int bracketWidth = (clef->GetEnclose() == ENCLOSURE_brack) ? unit : (width + offset); - const int verticalThickness = m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize); + const int verticalThickness = m_doc->GetDrawingStemWidth(glyphSize); const int horizontalThickness = ((clef->GetEnclose() == ENCLOSURE_brack) ? 2 : 1) * verticalThickness; this->DrawEnclosingBrackets( diff --git a/src/view_tab.cpp b/src/view_tab.cpp index 8436197d8f1..f74e3b2e774 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -30,6 +30,42 @@ namespace vrv { +void View::DrawTabClef(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure) +{ + assert(dc); + assert(element); + assert(layer); + assert(staff); + assert(measure); + + Clef *clef = vrv_cast(element); + assert(clef); + + const int glyphSize = staff->GetDrawingStaffNotationSize(); + + int x, y; + y = staff->GetDrawingY(); + x = element->GetDrawingX(); + + wchar_t sym = clef->GetClefGlyph(staff->m_drawingNotationType); + + if (sym == 0) { + clef->SetEmptyBB(); + return; + } + + y -= m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * (staff->m_drawingLines - 1); + + dc->StartGraphic(element, "", element->GetUuid()); + + this->DrawSmuflCode(dc, x, y, sym, glyphSize, false); + + // Possibly draw enclosing brackets + this->DrawClefEnclosing(dc, clef, staff, sym, x, y, 1.0); + + dc->EndGraphic(element, this); +} + void View::DrawTabGrp(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure) { assert(dc); From 561128e85f5b85a1522b3eb2731722f1eb8d2199 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Mon, 31 Jan 2022 10:24:02 +0100 Subject: [PATCH 182/403] Get notes of arpeggio Simplify getting top and bottom note --- include/vrv/arpeg.h | 7 ++- src/arpeg.cpp | 107 +++++++++++++++----------------------------- 2 files changed, 42 insertions(+), 72 deletions(-) diff --git a/include/vrv/arpeg.h b/include/vrv/arpeg.h index acc61817003..c7797ed82a6 100644 --- a/include/vrv/arpeg.h +++ b/include/vrv/arpeg.h @@ -50,9 +50,14 @@ class Arpeg : public ControlElement, int GetDrawingX() const override; ///@} + /** + * Get all notes of the arpeggio + */ + std::set GetNotes(); + /** * Set the top and bottom note of the arpeg. - * Pointers will be NULL if resovling fails (e.g., pointing to one single note) + * Pointers will be NULL if resolving fails (e.g., pointing to one single note) */ void GetDrawingTopBottomNotes(Note *&top, Note *&bottom); diff --git a/src/arpeg.cpp b/src/arpeg.cpp index 5c38a90f08a..59758afecaf 100644 --- a/src/arpeg.cpp +++ b/src/arpeg.cpp @@ -100,82 +100,47 @@ void Arpeg::SetDrawingXRel(int drawingXRel) } } -void Arpeg::GetDrawingTopBottomNotes(Note *&top, Note *&bottom) +std::set Arpeg::GetNotes() { - top = NULL; - bottom = NULL; - - Object *front = NULL; - Object *back = NULL; - - if (this->GetStart()) { - front = this->GetStart(); - back = this->GetStart(); - } - else if (!this->GetRefs()->empty()) { - front = this->GetRefs()->front(); - back = this->GetRefs()->back(); - } - - // Cannot draw an arpeg that has no target - if (!front || !back) return; - - // Cannot draw an arpeg not pointing to a chord or a note - if (!front->Is({ CHORD, NOTE }) || !back->Is({ CHORD, NOTE })) return; - - // Pointing to a single element - if (front == back) { - // It has to be a chord in this case - if (front->Is(NOTE)) return; - Chord *chord = vrv_cast(front); - assert(chord); - top = chord->GetTopNote(); - bottom = chord->GetBottomNote(); - return; - } - - Chord *chord1 = NULL; - Chord *chord2 = NULL; - Note *note1 = NULL; - Note *note2 = NULL; + std::set notes; + auto extractNotes = [¬es](Object *object) { + if (!object) return; + if (object->Is(NOTE)) { + Note *note = vrv_cast(object); + assert(note); + notes.insert(note); + } + else if (object->Is(CHORD)) { + Chord *chord = vrv_cast(object); + const ArrayOfObjects *childList = chord->GetList(chord); + for (Object *child : *childList) { + Note *note = vrv_cast(child); + assert(note); + notes.insert(note); + } + } + }; + extractNotes(this->GetStart()); + std::for_each(this->GetRefs()->begin(), this->GetRefs()->end(), extractNotes); + return notes; +} - // Get the first and second chord or note - if (front->Is(CHORD)) { - chord1 = vrv_cast(front); - assert(chord1); - } - else { - note1 = vrv_cast(front); - assert(note1); - } - if (back->Is(CHORD)) { - chord2 = vrv_cast(back); - assert(chord2); - } - else { - note2 = vrv_cast(back); - assert(note2); - } +void Arpeg::GetDrawingTopBottomNotes(Note *&top, Note *&bottom) +{ + std::set notes = this->GetNotes(); + if (notes.size() > 1) { + // Sort the involved notes by drawing Y position + std::vector sortedNotes; + std::copy(notes.begin(), notes.end(), std::back_inserter(sortedNotes)); + std::sort(sortedNotes.begin(), sortedNotes.end(), + [](Note *note1, Note *note2) { return (note1->GetDrawingY() > note2->GetDrawingY()); }); - // Note get the top and bottom note accordingly - if (chord1 && chord2) { - top = (chord1->GetTopNote()->GetDrawingY() > chord2->GetTopNote()->GetDrawingY()) ? chord1->GetTopNote() - : chord2->GetTopNote(); - bottom = (chord1->GetBottomNote()->GetDrawingY() < chord2->GetBottomNote()->GetDrawingY()) - ? chord1->GetBottomNote() - : chord2->GetBottomNote(); - } - else if (chord1 && note2) { - top = (chord1->GetTopNote()->GetDrawingY() > note2->GetDrawingY()) ? chord1->GetTopNote() : note2; - bottom = (chord1->GetBottomNote()->GetDrawingY() < note2->GetDrawingY()) ? chord1->GetBottomNote() : note2; - } - else if (note1 && chord2) { - top = (note1->GetDrawingY() > chord2->GetTopNote()->GetDrawingY()) ? note1 : chord2->GetTopNote(); - bottom = (note1->GetDrawingY() < chord2->GetBottomNote()->GetDrawingY()) ? note1 : chord2->GetBottomNote(); + top = sortedNotes.front(); + bottom = sortedNotes.back(); } else { - top = (note1->GetDrawingY() > note2->GetDrawingY()) ? note1 : note2; - bottom = (note1->GetDrawingY() < note2->GetDrawingY()) ? note1 : note2; + top = NULL; + bottom = NULL; } } From a9bdf723f3a006e2fc7981bd8a705be7d95ed048 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Mon, 31 Jan 2022 10:53:05 +0100 Subject: [PATCH 183/403] PrepareMIDI functor skeleton --- include/vrv/functorparams.h | 16 ++++++++++++++++ include/vrv/object.h | 8 ++++++++ src/doc.cpp | 6 ++++++ 3 files changed, 30 insertions(+) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index eb070734212..688d03df9bb 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -2019,6 +2019,22 @@ class PrepareLinkingParams : public FunctorParams { bool m_fillList; }; +//---------------------------------------------------------------------------- +// PrepareMIDIParams +//---------------------------------------------------------------------------- + +/** + * member 0: the semi tone transposition + * member 1: deferred notes which start slightly later + **/ + +class PrepareMIDIParams : public FunctorParams { +public: + PrepareMIDIParams() { m_transSemi = 0; } + int m_transSemi; + std::map m_deferredNotes; +}; + //---------------------------------------------------------------------------- // PrepareMilestonesParams //---------------------------------------------------------------------------- diff --git a/include/vrv/object.h b/include/vrv/object.h index 806496db311..24da47c3050 100644 --- a/include/vrv/object.h +++ b/include/vrv/object.h @@ -1262,6 +1262,7 @@ class Object : public BoundingBox { */ ///@{ virtual int HorizontalLayoutCache(FunctorParams *) { return FUNCTOR_CONTINUE; } + ///@} /** * Adjust note timings based on ties @@ -1270,6 +1271,13 @@ class Object : public BoundingBox { virtual int ResolveMIDITies(FunctorParams *) { return FUNCTOR_CONTINUE; } ///@} + /** + * Prepare the MIDI export + */ + ///@{ + virtual int PrepareMIDI(FunctorParams *) { return FUNCTOR_CONTINUE; } + ///@} + /** * Export the object to a MidiFile */ diff --git a/src/doc.cpp b/src/doc.cpp index 6e511316910..e8c167ef537 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -383,6 +383,11 @@ void Doc::ExportMIDI(smf::MidiFile *midiFile) filters.push_back(&matchStaff); filters.push_back(&matchLayer); + Functor prepareMIDI(&Object::PrepareMIDI); + PrepareMIDIParams prepareMIDIParams; + prepareMIDIParams.m_transSemi = transSemi; + this->Process(&prepareMIDI, &prepareMIDIParams, NULL, &filters); + Functor generateMIDI(&Object::GenerateMIDI); Functor generateMIDIEnd(&Object::GenerateMIDIEnd); GenerateMIDIParams generateMIDIParams(midiFile, &generateMIDI); @@ -390,6 +395,7 @@ void Doc::ExportMIDI(smf::MidiFile *midiFile) generateMIDIParams.m_midiTrack = midiTrack; generateMIDIParams.m_transSemi = transSemi; generateMIDIParams.m_currentTempo = tempo; + generateMIDIParams.m_deferredNotes = prepareMIDIParams.m_deferredNotes; // LogDebug("Exporting track %d ----------------", midiTrack); this->Process(&generateMIDI, &generateMIDIParams, &generateMIDIEnd, &filters); From 2130de4baeaca734800a327061f3a173c3e6c9fd Mon Sep 17 00:00:00 2001 From: David Bauer Date: Mon, 31 Jan 2022 15:02:24 +0100 Subject: [PATCH 184/403] Defer arpeggio notes --- include/vrv/arpeg.h | 5 +++++ include/vrv/functorparams.h | 10 ++++++++-- include/vrv/measure.h | 15 +++++++-------- src/arpeg.cpp | 27 +++++++++++++++++++++++++++ src/doc.cpp | 1 + src/measure.cpp | 10 ++++++++++ 6 files changed, 58 insertions(+), 10 deletions(-) diff --git a/include/vrv/arpeg.h b/include/vrv/arpeg.h index c7797ed82a6..3ef078d055a 100644 --- a/include/vrv/arpeg.h +++ b/include/vrv/arpeg.h @@ -113,6 +113,11 @@ class Arpeg : public ControlElement, */ int HorizontalLayoutCache(FunctorParams *functorParams) override; + /** + * See Object::PrepareMIDI + */ + int PrepareMIDI(FunctorParams *functorParams) override; + protected: // private: diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 688d03df9bb..83f0b49cb27 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -2025,13 +2025,19 @@ class PrepareLinkingParams : public FunctorParams { /** * member 0: the semi tone transposition - * member 1: deferred notes which start slightly later + * member 1: the current tempo + * member 2: deferred notes which start slightly later **/ class PrepareMIDIParams : public FunctorParams { public: - PrepareMIDIParams() { m_transSemi = 0; } + PrepareMIDIParams() + { + m_transSemi = 0; + m_currentTempo = 120.0; + } int m_transSemi; + double m_currentTempo; std::map m_deferredNotes; }; diff --git a/include/vrv/measure.h b/include/vrv/measure.h index 62a8ac7cd08..01ca6022338 100644 --- a/include/vrv/measure.h +++ b/include/vrv/measure.h @@ -447,18 +447,19 @@ class Measure : public Object, int PrepareMilestones(FunctorParams *functorParams) override; /** - * @name See Object::GenerateMIDI + * See Object::PrepareMIDI + */ + int PrepareMIDI(FunctorParams *functorParams) override; + + /** + * See Object::GenerateMIDI */ - ///@{ int GenerateMIDI(FunctorParams *functorParams) override; - ///@} /** - * @name See Object::GenerateTimemap + * See Object::GenerateTimemap */ - ///@{ int GenerateTimemap(FunctorParams *functorParams) override; - ///@} /** * See Object::CalcMaxMeasureDuration @@ -471,9 +472,7 @@ class Measure : public Object, /** * See Object::CalcOnsetOffset */ - ///@{ int CalcOnsetOffset(FunctorParams *functorParams) override; - ///@} /** * See Object::PrepareTimestamps diff --git a/src/arpeg.cpp b/src/arpeg.cpp index 59758afecaf..5a0605f4f1d 100644 --- a/src/arpeg.cpp +++ b/src/arpeg.cpp @@ -250,4 +250,31 @@ int Arpeg::HorizontalLayoutCache(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int Arpeg::PrepareMIDI(FunctorParams *functorParams) +{ + PrepareMIDIParams *params = vrv_params_cast(functorParams); + assert(params); + + // Sort the involved notes by playing order + const bool playTopDown = (this->GetOrder() == arpegLog_ORDER_down); + std::set notes = this->GetNotes(); + std::vector sortedNotes; + std::copy(notes.begin(), notes.end(), std::back_inserter(sortedNotes)); + std::sort(sortedNotes.begin(), sortedNotes.end(), [params, playTopDown](Note *note1, Note *note2) { + const int pitch1 = note1->GetMIDIPitch(params->m_transSemi); + const int pitch2 = note2->GetMIDIPitch(params->m_transSemi); + return playTopDown ? (pitch1 > pitch2) : (pitch1 < pitch2); + }); + + // Defer the notes in playing order + double shift = 0.0; + const double increment = UNACC_GRACENOTE_DUR * params->m_currentTempo / 60000.0; + for (Note *note : sortedNotes) { + if (shift > 0.0) params->m_deferredNotes[note] = shift; + shift += increment; + } + + return FUNCTOR_CONTINUE; +} + } // namespace vrv diff --git a/src/doc.cpp b/src/doc.cpp index e8c167ef537..38464410398 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -386,6 +386,7 @@ void Doc::ExportMIDI(smf::MidiFile *midiFile) Functor prepareMIDI(&Object::PrepareMIDI); PrepareMIDIParams prepareMIDIParams; prepareMIDIParams.m_transSemi = transSemi; + prepareMIDIParams.m_currentTempo = tempo; this->Process(&prepareMIDI, &prepareMIDIParams, NULL, &filters); Functor generateMIDI(&Object::GenerateMIDI); diff --git a/src/measure.cpp b/src/measure.cpp index 63cdb8604ba..847bd2e9097 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -1533,6 +1533,16 @@ int Measure::PrepareTimestampsEnd(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int Measure::PrepareMIDI(FunctorParams *functorParams) +{ + PrepareMIDIParams *params = vrv_params_cast(functorParams); + assert(params); + + params->m_currentTempo = m_currentTempo; + + return FUNCTOR_CONTINUE; +} + int Measure::GenerateMIDI(FunctorParams *functorParams) { GenerateMIDIParams *params = vrv_params_cast(functorParams); From 3e9d4cb262ccd6e4509d2e101b4795b29d4da684 Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 31 Jan 2022 17:07:01 +0200 Subject: [PATCH 185/403] Add support for improting tuplets via ABC format - Added method to parse tuplets - replaced AddBeams method with more generic one --- include/vrv/ioabc.h | 11 ++++- src/ioabc.cpp | 113 +++++++++++++++++++++++++++++++------------- 2 files changed, 88 insertions(+), 36 deletions(-) diff --git a/include/vrv/ioabc.h b/include/vrv/ioabc.h index 19e738e5283..89f78e66ec0 100644 --- a/include/vrv/ioabc.h +++ b/include/vrv/ioabc.h @@ -59,8 +59,8 @@ class ABCInput : public Input { int SetBarLine(const std::string &musicCode, int index); void CalcUnitNoteLength(); void AddAnnot(const std::string &remark); - void AddBeam(); - void AddTuplet(); + void AddLayerElement(); + int AddTuplet(const std::string &musicCode, int i); void AddTie(); void StartSlur(); void EndSlur(); @@ -95,6 +95,11 @@ class ABCInput : public Input { public: // private: + enum class ElementType { + Default, + Tuplet + }; + std::string m_filename; Mdiv *m_mdiv = NULL; Clef *m_clef = NULL; @@ -117,6 +122,8 @@ class ABCInput : public Input { int m_gracecount = 0; int m_stafflines = 5; int m_transpose = 0; + ElementType m_type = ElementType::Default; + std::pair m_containerPair = { ElementType::Default, NULL }; /* * ABC metadata stacks */ diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 52d65c43554..4c4722e1578 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -13,6 +13,7 @@ #include #include #include +#include //---------------------------------------------------------------------------- @@ -304,44 +305,89 @@ void ABCInput::CalcUnitNoteLength() } } -void ABCInput::AddBeam() +void ABCInput::AddLayerElement() { - if (!m_noteStack.size()) { - return; - } - else if (m_noteStack.size() == 1) { + // exit if there is nothing to add + if (!m_noteStack.size()) return; + // if just one note in the stack - add it do the layer directly + if (m_noteStack.size() == 1) { m_layer->AddChild(m_noteStack.back()); + m_noteStack.clear(); + } + // otherwise we can have beam or tuplet (for now) + LayerElement *element = NULL; + // if container pair key is set to Tuplet - proceed with it + if (m_containerPair.second && (ElementType::Tuplet == m_containerPair.first)) { + element = m_containerPair.second; + } + // otherwise default to it being beam + else { + element = new Beam(); + } + // add stacked notes to the current element + for (auto iter = m_noteStack.begin(); iter != m_noteStack.end(); ++iter) { + element->AddChild(*iter); + } + if (element->FindDescendantByType(NOTE)) { + m_layer->AddChild(element); } else { - Beam *beam = new Beam(); for (auto iter = m_noteStack.begin(); iter != m_noteStack.end(); ++iter) { - beam->AddChild(*iter); - } - if (beam->FindDescendantByType(NOTE)) { - m_layer->AddChild(beam); - } - else { - for (auto iter = m_noteStack.begin(); iter != m_noteStack.end(); ++iter) { - m_layer->AddChild(*iter); - } + m_layer->AddChild(*iter); } } + m_containerPair = { ElementType::Default, NULL }; m_noteStack.clear(); } -void ABCInput::AddTuplet() +int ABCInput::AddTuplet(const std::string &musicCode, int i) { - if (!m_noteStack.size()) { - return; + constexpr std::string_view tupletElements = "(:0123456789 "; + const size_t tupletEnd = musicCode.find_first_not_of(tupletElements, ++i); + const std::string tupletStr = musicCode.substr(i, tupletEnd - i); + + Tuplet *tuplet = new Tuplet(); + size_t separator = tupletStr.find_first_of(":"); + // Get tuplet number first 9:_:_ + int tupletNum = 0; + if (separator != std::string::npos) { + const std::string tupletNumStr = tupletStr.substr(0, separator); + tupletNum = atoi(tupletNumStr.data()); + ++separator; } else { - Tuplet *tuplet = new Tuplet(); - for (auto iter = m_noteStack.begin(); iter != m_noteStack.end(); ++iter) { - tuplet->AddChild(*iter); + tupletNum = atoi(tupletStr.c_str()); + } + // Get tuplet number base _:3:_ + int tupletNumbase = 0; + if (separator != std::string::npos) { + size_t secondSeparator = tupletStr.find_first_of(":", separator); + if (secondSeparator != std::string::npos) { + if (secondSeparator != separator) { + std::string tupletNumbaseStr = tupletStr.substr(separator, secondSeparator - separator); + tupletNumbase = atoi(tupletNumbaseStr.data()); + separator = secondSeparator + 1; + } + } + else { + std::string tupletNumbaseStr = tupletStr.substr(separator); + tupletNumbase = atoi(tupletNumbaseStr.data()); + separator = secondSeparator + 1; } - m_layer->AddChild(tuplet); } - m_noteStack.clear(); + // List of tuplets with default base of 3 + const std::unordered_set threeBase = { 2, 4, 8, 9 }; + if (!tupletNumbase) { + tupletNumbase = threeBase.count(tupletNum) ? 3 : 2; + } + // Get number of elements supposed to be in the tuplet _:_:9 + // Ignore this for the time being + tuplet->SetNum(tupletNum); + tuplet->SetNumbase(tupletNumbase); + m_containerPair = { ElementType::Tuplet, tuplet }; + + // return index of the last element in tuplet, so that we point to the actual notes when incrementing 'i' + return tupletEnd - 1; } void ABCInput::AddAnnot(const std::string &remark) @@ -1032,7 +1078,7 @@ void ABCInput::readMusicCode(const std::string &musicCode, Section *section) } if (isspace(musicCode.at(i))) { // always ends a beam - AddBeam(); + AddLayerElement(); } // comments @@ -1067,7 +1113,7 @@ void ABCInput::readMusicCode(const std::string &musicCode, Section *section) // linebreaks else if (musicCode.at(i) == m_linebreak) { - AddBeam(); + AddLayerElement(); Sb *sb = new Sb(); section->AddChild(sb); } @@ -1092,8 +1138,7 @@ void ABCInput::readMusicCode(const std::string &musicCode, Section *section) // tuplets else if ((i + 2 < (int)musicCode.length()) && musicCode.at(i) == '(' && isdigit(musicCode.at(i + 1))) { - LogWarning("ABC import: Tuplets not supported yet"); - // AddTuplet(); + i = AddTuplet(musicCode, i); } // slurs and ties @@ -1136,7 +1181,7 @@ void ABCInput::readMusicCode(const std::string &musicCode, Section *section) // end chord if (chord->GetDur() < DURATION_8) { // if chord cannot be beamed, write it directly to the layer - if (m_noteStack.size() > 0) AddBeam(); + if (m_noteStack.size() > 0) AddLayerElement(); m_layer->AddChild(chord); } else @@ -1157,7 +1202,7 @@ void ABCInput::readMusicCode(const std::string &musicCode, Section *section) } // end grace group else { - if ((m_gracecount > 1) || (grace == GRACE_unacc)) AddBeam(); + if ((m_gracecount > 1) || (grace == GRACE_unacc)) AddLayerElement(); grace = GRACE_NONE; m_gracecount = 0; } @@ -1315,7 +1360,7 @@ void ABCInput::readMusicCode(const std::string &musicCode, Section *section) note->SetDur(meiDur); if (note->GetDur() < DURATION_8) { // if note cannot be beamed, write it directly to the layer - if (m_noteStack.size() > 0) AddBeam(); + if (m_noteStack.size() > 0) AddLayerElement(); m_layer->AddChild(note); } else @@ -1395,7 +1440,7 @@ void ABCInput::readMusicCode(const std::string &musicCode, Section *section) space->SetDur(meiDur); // spaces cannot be beamed - AddBeam(); + AddLayerElement(); m_layer->AddChild(space); } @@ -1472,7 +1517,7 @@ void ABCInput::readMusicCode(const std::string &musicCode, Section *section) rest->SetDur(meiDur); // rests cannot be beamed - AddBeam(); + AddLayerElement(); m_layer->AddChild(rest); } @@ -1517,7 +1562,7 @@ void ABCInput::readMusicCode(const std::string &musicCode, Section *section) // barLine else if (musicCode.at(i) == '|') { // add stacked elements to layer - AddBeam(); + AddLayerElement(); i = SetBarLine(musicCode, i); if (m_barLines.second != BARRENDITION_NONE) { @@ -1569,7 +1614,7 @@ void ABCInput::readMusicCode(const std::string &musicCode, Section *section) // Verovio does not support line-breaks within a layer // has to be refined later if (sysBreak && (m_linebreak != '\0') && !(section->GetLast())->Is(SB)) { - AddBeam(); + AddLayerElement(); Sb *sb = new Sb(); sb->SetUuid(StringFormat("abcLine%02d", m_lineNum + 1)); section->AddChild(sb); From 35db6486e1c357ed544a7d11b66da8608c2770a6 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 1 Feb 2022 08:43:40 +0100 Subject: [PATCH 186/403] Use MIDI_TEMPO --- include/vrv/functorparams.h | 10 +++++----- src/measure.cpp | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 83f0b49cb27..66fad0bbd58 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1005,7 +1005,7 @@ class CalcMaxMeasureDurationParams : public FunctorParams { { m_currentScoreTime = 0.0; m_currentRealTimeSeconds = 0.0; - m_currentTempo = 120.0; + m_currentTempo = MIDI_TEMPO; m_tempoAdjustment = 1.0; m_multiRestFactor = 1; } @@ -1038,7 +1038,7 @@ class CalcOnsetOffsetParams : public FunctorParams { m_currentMensur = NULL; m_currentMeterSig = NULL; m_notationType = NOTATIONTYPE_cmn; - m_currentTempo = 120.0; + m_currentTempo = MIDI_TEMPO; } double m_currentScoreTime; double m_currentRealTimeSeconds; @@ -1628,7 +1628,7 @@ class GenerateMIDIParams : public FunctorParams { m_midiTrack = 1; m_totalTime = 0.0; m_transSemi = 0; - m_currentTempo = 120.0; + m_currentTempo = MIDI_TEMPO; m_lastNote = NULL; m_accentedGraceNote = false; m_functor = functor; @@ -1666,7 +1666,7 @@ class GenerateTimemapParams : public FunctorParams { { m_scoreTimeOffset = 0.0; m_realTimeOffsetMilliseconds = 0; - m_currentTempo = 120.0; + m_currentTempo = MIDI_TEMPO; m_timemap = timemap; m_functor = functor; } @@ -2034,7 +2034,7 @@ class PrepareMIDIParams : public FunctorParams { PrepareMIDIParams() { m_transSemi = 0; - m_currentTempo = 120.0; + m_currentTempo = MIDI_TEMPO; } int m_transSemi; double m_currentTempo; diff --git a/src/measure.cpp b/src/measure.cpp index 847bd2e9097..2f474246dbd 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -154,7 +154,7 @@ void Measure::Reset() m_scoreTimeOffset.clear(); m_realTimeOffsetMilliseconds.clear(); - m_currentTempo = 120.0; + m_currentTempo = MIDI_TEMPO; } bool Measure::IsSupportedChild(Object *child) From 0fed4614081c5e34ab55e4f09e9ba93945e724b8 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 1 Feb 2022 10:48:07 +0100 Subject: [PATCH 187/403] Convert PAE 7. (dotted 128th notes) to stemless quarter notes. Fixes #2593 --- src/iopae.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/iopae.cpp b/src/iopae.cpp index 16c2aa02434..cedbabcfc4e 100644 --- a/src/iopae.cpp +++ b/src/iopae.cpp @@ -3995,7 +3995,16 @@ bool PAEInput::ConvertDuration() assert(interface); interface->SetDur(currentDur->first); if (currentDur->second) { - interface->SetDots(currentDur->second); + if (interface->GetDur() == DURATION_128 && token.Is(NOTE)) { + Note *note = vrv_cast(token.m_object); + assert(note); + note->SetDur(DURATION_4); + note->SetStemLen(0); + note->SetStemVisible(BOOLEAN_false); + } + else { + interface->SetDots(currentDur->second); + } } // Move to the next on the stack - but this is meanless if we have a single value if (durations.size() > 1) { From eca5de47bf287ec5ac7715442ee9a1a0a0f3d85b Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 1 Feb 2022 10:58:09 +0100 Subject: [PATCH 188/403] Use an iterator in PAEInput::ConvertDuration() for allowing mensural dot insertion --- src/iopae.cpp | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/src/iopae.cpp b/src/iopae.cpp index cedbabcfc4e..9d389b3742d 100644 --- a/src/iopae.cpp +++ b/src/iopae.cpp @@ -3956,17 +3956,23 @@ bool PAEInput::ConvertDuration() std::string paeStr; bool isChord = false; - for (auto &token : m_pae) { - if (token.IsVoid()) continue; + // Here we need an iterator because we might have to add a mensural dots + std::list::iterator token = m_pae.begin(); + while (token != m_pae.end()) { + if (token->IsVoid()) { + ++token; + continue; + } // Extract duration string we can then convert in one go - if (this->Is(token, pae::DURATION)) { + if (this->Is(*token, pae::DURATION)) { if (!durationToken) { - durationToken = &token; + durationToken = &(*token); paeStr.clear(); } - paeStr.push_back(token.m_char); - token.m_char = 0; + paeStr.push_back(token->m_char); + token->m_char = 0; + ++token; continue; } // We have reach the end of a duration string - convert it, including patterns @@ -3978,25 +3984,31 @@ bool PAEInput::ConvertDuration() currentDur = durations.begin(); } // For chords we don't want to set the duration on the child notes so we need to keep a flag - if (token.Is(CHORD)) { - isChord = !token.IsContainerEnd(); - if (token.IsContainerEnd()) continue; + if (token->Is(CHORD)) { + isChord = !token->IsContainerEnd(); + if (token->IsContainerEnd()) { + ++token; + continue; + } } // Apply the current duration - if ((token.Is(NOTE) && !isChord) || token.Is(CHORD) || token.Is(REST)) { + if ((token->Is(NOTE) && !isChord) || token->Is(CHORD) || token->Is(REST)) { // We should also skip acciaccature - if (token.Is(NOTE)) { - Note *note = vrv_cast(token.m_object); + if (token->Is(NOTE)) { + Note *note = vrv_cast(token->m_object); assert(note); - if (note->GetGrace() == GRACE_unacc) continue; + if (note->GetGrace() == GRACE_unacc) { + ++token; + continue; + } } // Set the duration to the note, chord or rest - DurationInterface *interface = dynamic_cast(token.m_object); + DurationInterface *interface = dynamic_cast(token->m_object); assert(interface); interface->SetDur(currentDur->first); if (currentDur->second) { - if (interface->GetDur() == DURATION_128 && token.Is(NOTE)) { - Note *note = vrv_cast(token.m_object); + if (interface->GetDur() == DURATION_128 && token->Is(NOTE)) { + Note *note = vrv_cast(token->m_object); assert(note); note->SetDur(DURATION_4); note->SetStemLen(0); @@ -4013,6 +4025,7 @@ bool PAEInput::ConvertDuration() if (currentDur == durations.end()) currentDur = durations.begin(); } } + ++token; } return true; From d62781906c87e11daaa32e195852f9883496d3cd Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 14 Jan 2021 18:17:05 +0200 Subject: [PATCH 189/403] Fix for beamed chords in the cross-staff context - fixed logic of drawing chords in the cross-staff beams to allow correct rendering of the beams without any overaps with notes --- src/beam.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/beam.cpp b/src/beam.cpp index a1c313ffc03..847bda44a8e 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -156,12 +156,11 @@ void BeamSegment::CalcBeam( // place This occurs when mixed makes no sense and the beam is placed above or below instead. this->CalcBeamPlace(layer, beamInterface, place); - CalcBeamStemLength(staff, beamInterface->m_drawingPlace, horizontal); - if (BEAMPLACE_mixed == beamInterface->m_drawingPlace) { CalcMixedBeamPlace(staff); CalcPartialFlagPlace(); } + CalcBeamStemLength(staff, beamInterface->m_drawingPlace, horizontal); // Set drawing stem positions CalcBeamPosition(doc, staff, layer, beamInterface, horizontal); @@ -244,7 +243,7 @@ void BeamSegment::CalcBeam( int yMax, yMin; chord->GetYExtremes(yMax, yMin); if (beamInterface->m_drawingPlace == BEAMPLACE_mixed) { - if (coord->m_beamRelativePlace == BEAMPLACE_above) y2 += (yMin - yMax); + y2 += (coord->m_beamRelativePlace == BEAMPLACE_above) ? (yMin - yMax) : (yMax - yMin); } else { y2 += (beamInterface->m_drawingPlace == BEAMPLACE_above) ? (yMin - yMax) : (yMax - yMin); @@ -1099,9 +1098,16 @@ void BeamSegment::CalcBeamPlace(Layer *layer, BeamDrawingInterface *beamInterfac void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool isHorizontal) { - const data_STEMDIRECTION stemDir = (place == BEAMPLACE_below) ? STEMDIRECTION_down : STEMDIRECTION_up; int relevantNoteLoc = VRV_UNSET; for (auto coord : m_beamElementCoordRefs) { + data_STEMDIRECTION stemDir = STEMDIRECTION_NONE; + if (place != BEAMPLACE_mixed) { + stemDir = (place == BEAMPLACE_below) ? STEMDIRECTION_down : STEMDIRECTION_up; + } + else { + stemDir = (coord->m_beamRelativePlace == BEAMPLACE_below) ? STEMDIRECTION_down : STEMDIRECTION_up; + } + const int stemDirBias = (stemDir == STEMDIRECTION_up) ? 1 : -1; coord->SetClosestNote(stemDir); if (!coord->m_closestNote) continue; if (relevantNoteLoc == VRV_UNSET) { From d7477536992b890deeea0e497b30bd02c4a68080 Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 18 Jan 2021 14:41:37 +0200 Subject: [PATCH 190/403] Add logic for proper calculation of cross-staff beam positioning - changed approach to how beam postion of cross-staff beams has been calculated - now beams should be centered better with regards of additional beams - fixed problem of drawing cross-staff fTrems - added handling of centering for the cross-staff fTrems (this can be improved further by moving implentation outised of the beamSegement class) --- include/vrv/beam.h | 5 +++ src/beam.cpp | 87 +++++++++++++++++++++++++++++++++++++--------- 2 files changed, 75 insertions(+), 17 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 3ffd24a57ef..5f556055696 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -108,6 +108,8 @@ class BeamSegment { bool CalcBeamSlope( Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, bool &shorten, int &step); + void CalcMixedBeamStem(BeamDrawingInterface *beamInterface, int step); + void CalcBeamPosition(Doc *doc, Staff *staff, Layer *layer, BeamDrawingInterface *beamInterface, bool isHorizontal); void CalcAdjustSlope(Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, bool shorten, int &step); @@ -132,6 +134,9 @@ class BeamSegment { // Helper to check wheter beam fits within certain bounds bool DoesBeamOverlap(int staffTop, int topOffset, int staffBottom, int bottomOffset); + // Helper to find number of additional beams. Return { additional beams below main beam, additional beams above } + std::pair GetAdditionalBeamCount(BeamDrawingInterface *beamInterface); + // Helper to check mixed beam positioning compared to other elements (ledger lines, staff) and adjust it accordingly bool NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface); diff --git a/src/beam.cpp b/src/beam.cpp index 847bda44a8e..3c34a2b35e4 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -20,6 +20,7 @@ #include "editorial.h" #include "elementpart.h" #include "functorparams.h" +#include "ftrem.h" #include "gracegrp.h" #include "layer.h" #include "measure.h" @@ -227,6 +228,13 @@ void BeamSegment::CalcBeam( if (coord->m_partialFlagPlace == coord->m_beamRelativePlace) { stemOffset = (coord->m_dur - DUR_8) * beamInterface->m_beamWidth; } + // handle cross-staff fTrem cases + if (FTrem *fTrem = vrv_cast(beamInterface); + fTrem->Is(FTREM) && (coord->GetStemDir() == STEMDIRECTION_down)) { + const int beamsCount = fTrem->GetBeams(); + stemOffset = (beamsCount - 1) * beamInterface->m_beamWidth; + } + if (coord->m_beamRelativePlace == BEAMPLACE_below) { y1 -= doc->GetDrawingStemWidth(staff->m_drawingStaffSize) + stemOffset; y2 += stemmedInterface->GetStemDownNW(doc, staff->m_drawingStaffSize, beamInterface->m_cueSize).y; @@ -291,10 +299,14 @@ bool BeamSegment::DoesBeamOverlap(int staffTop, int topOffset, int staffBottom, return true; } -bool BeamSegment::NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface) +std::pair BeamSegment::GetAdditionalBeamCount(BeamDrawingInterface *beamInterface) { - const int unit = doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); - // find shortest duration for above/below beams for the sake of calculating overlap with additional beams + // In case we're dealing with fTrem - take @beams attribute into consideration + FTrem *fTrem = vrv_cast(beamInterface); + if (fTrem->Is(FTREM)) { + return { fTrem->GetBeams() - 1, 0 }; + } + int topShortestDur = DUR_8; int bottomShortestDur = DUR_8; std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), [&](BeamElementCoord *coord) { @@ -305,8 +317,16 @@ bool BeamSegment::NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterfa bottomShortestDur = std::max(bottomShortestDur, coord->m_dur); } }); - const int topOffset = (topShortestDur - DUR_8) * beamInterface->m_beamWidth + unit / 2; - const int bottomOffset = (bottomShortestDur - DUR_8) * beamInterface->m_beamWidth + unit / 2; + + return { topShortestDur - DUR_8, bottomShortestDur - DUR_8 }; +} + +bool BeamSegment::NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface) +{ + const int unit = doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); + const auto [topBeams, bottomBeams] = GetAdditionalBeamCount(beamInterface); + const int topOffset = topBeams * beamInterface->m_beamWidth + unit / 2; + const int bottomOffset = bottomBeams * beamInterface->m_beamWidth + unit / 2; // find top and bottom of the staff const int staffTop = staff->GetDrawingY(); @@ -552,6 +572,7 @@ bool BeamSegment::CalcBeamSlope( m_beamSlope = BoundingBox::CalcSlope(Point(m_firstNoteOrChord->m_x, m_firstNoteOrChord->m_yBeam), Point(m_lastNoteOrChord->m_x, m_lastNoteOrChord->m_yBeam)); + int noteStep = 0; double noteSlope = 0.0; if (m_firstNoteOrChord->m_closestNote && m_lastNoteOrChord->m_closestNote) { @@ -736,18 +757,7 @@ bool BeamSegment::CalcBeamSlope( } } else if (place == BEAMPLACE_mixed) { - int heightDiff = m_lastNoteOrChord->m_yBeam - m_firstNoteOrChord->m_yBeam; - if (curStep < step) { - std::swap(m_firstNoteOrChord->m_yBeam, m_lastNoteOrChord->m_yBeam); - } - if (m_beamSlope > 0.0) { - m_firstNoteOrChord->m_yBeam += (heightDiff - step) / 2; - m_lastNoteOrChord->m_yBeam -= (heightDiff - step) / 2; - } - else { - m_firstNoteOrChord->m_yBeam += (heightDiff + step) / 2; - m_lastNoteOrChord->m_yBeam -= (heightDiff + step) / 2; - } + CalcMixedBeamStem(beamInterface, step); } m_beamSlope = BoundingBox::CalcSlope(Point(m_firstNoteOrChord->m_x, m_firstNoteOrChord->m_yBeam), @@ -764,6 +774,48 @@ bool BeamSegment::CalcBeamSlope( return true; } + +void BeamSegment::CalcMixedBeamStem(BeamDrawingInterface *beamInterface, int step) +{ + // In cases, when both first and last notes/chords of the beam have same relative places (i.e. they have same stem + // direction and/or same staff), - we don't need additional calculations + if (m_firstNoteOrChord->m_beamRelativePlace == m_lastNoteOrChord->m_beamRelativePlace) { + if (m_beamSlope < 0.0) { + m_firstNoteOrChord->m_yBeam = m_lastNoteOrChord->m_yBeam + step; + } + else { + m_lastNoteOrChord->m_yBeam = m_firstNoteOrChord->m_yBeam + step; + } + return; + } + + int highestPoint = m_firstNoteOrChord->m_yBeam; + int lowestPoint = m_lastNoteOrChord->m_yBeam; + if (m_nbNotesOrChords > 2) { + std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), [&](BeamElementCoord *coord) { + if ((coord->m_beamRelativePlace == BEAMPLACE_above) && (coord->m_yBeam > highestPoint)) { + highestPoint = coord->m_yBeam; + }; + if ((coord->m_beamRelativePlace == BEAMPLACE_below) && (coord->m_yBeam < lowestPoint)) { + lowestPoint = coord->m_yBeam; + }; + }); + } + + // This helps with general beams but breaks trems + auto [up, down] = GetAdditionalBeamCount(beamInterface); + + // Calculate midpoint for the beam, taking into account highest and lowest points, as well as number of additional + // beams above and below main beam. Start position of the beam is then further adjusted based on the step size to + // make sure that beam is truly centered + int midPoint = (highestPoint + lowestPoint + (up - down) * beamInterface->m_beamWidth) / 2; + m_firstNoteOrChord->m_yBeam + = (m_lastNoteOrChord->m_beamRelativePlace == BEAMPLACE_below) ? midPoint - step / 2 : midPoint + step / 2; + m_lastNoteOrChord->m_yBeam = (m_lastNoteOrChord->m_beamRelativePlace == BEAMPLACE_below) + ? m_firstNoteOrChord->m_yBeam + step + : m_firstNoteOrChord->m_yBeam - step; +} + void BeamSegment::CalcBeamPosition( Doc *doc, Staff *staff, Layer *layer, BeamDrawingInterface *beamInterface, bool isHorizontal) { @@ -1099,6 +1151,7 @@ void BeamSegment::CalcBeamPlace(Layer *layer, BeamDrawingInterface *beamInterfac void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool isHorizontal) { int relevantNoteLoc = VRV_UNSET; + //data_STEMDIRECTION stemDir = (place == BEAMPLACE_below) ? STEMDIRECTION_down : STEMDIRECTION_up; for (auto coord : m_beamElementCoordRefs) { data_STEMDIRECTION stemDir = STEMDIRECTION_NONE; if (place != BEAMPLACE_mixed) { From 84c91ac72a2495bee9e59942ab6054f1c1ade016 Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 20 Jan 2021 13:53:20 +0200 Subject: [PATCH 191/403] Additional improvements for the beam positioning - extended beam reset logic to apply to cross-staff beams as well - changed mixed beam placement to reverse endpoint Y coordinates, if either of them collide with notes - minor code improvements --- include/vrv/beam.h | 2 +- src/beam.cpp | 92 +++++++++++++++++++++++++--------------------- 2 files changed, 51 insertions(+), 43 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 5f556055696..6aef3ccc7ca 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -132,7 +132,7 @@ class BeamSegment { void CalcSetValues(); // Helper to check wheter beam fits within certain bounds - bool DoesBeamOverlap(int staffTop, int topOffset, int staffBottom, int bottomOffset); + bool DoesBeamOverlap(int staffTop, int topOffset, int staffBottom, int bottomOffset, bool isCrossStaff = false); // Helper to find number of additional beams. Return { additional beams below main beam, additional beams above } std::pair GetAdditionalBeamCount(BeamDrawingInterface *beamInterface); diff --git a/src/beam.cpp b/src/beam.cpp index 3c34a2b35e4..4eeb7740700 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -166,7 +166,7 @@ void BeamSegment::CalcBeam( // Set drawing stem positions CalcBeamPosition(doc, staff, layer, beamInterface, horizontal); if (BEAMPLACE_mixed == beamInterface->m_drawingPlace) { - if (!beamInterface->m_crossStaffContent && NeedToResetPosition(staff, doc, beamInterface)) { + if (NeedToResetPosition(staff, doc, beamInterface)) { CalcBeamInit(layer, staff, doc, beamInterface, place); CalcBeamStemLength(staff, beamInterface->m_drawingPlace, horizontal); CalcBeamPosition(doc, staff, layer, beamInterface, horizontal); @@ -271,7 +271,7 @@ void BeamSegment::CalcBeam( } } -bool BeamSegment::DoesBeamOverlap(int staffTop, int topOffset, int staffBottom, int bottomOffset) +bool BeamSegment::DoesBeamOverlap(int staffTop, int topOffset, int staffBottom, int bottomOffset, bool isCrossStaff) { // find if current beam fits within the staff auto withinBounds @@ -281,7 +281,7 @@ bool BeamSegment::DoesBeamOverlap(int staffTop, int topOffset, int staffBottom, } return false; }); - if (withinBounds != m_beamElementCoordRefs.end()) return false; + if (!isCrossStaff && (withinBounds != m_beamElementCoordRefs.end())) return true; auto overlapping = std::find_if(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), [&](BeamElementCoord *coord) { assert(coord->m_element); @@ -295,8 +295,7 @@ bool BeamSegment::DoesBeamOverlap(int staffTop, int topOffset, int staffBottom, } return false; }); - if (overlapping != m_beamElementCoordRefs.end()) return false; - return true; + return (overlapping != m_beamElementCoordRefs.end()); } std::pair BeamSegment::GetAdditionalBeamCount(BeamDrawingInterface *beamInterface) @@ -304,7 +303,7 @@ std::pair BeamSegment::GetAdditionalBeamCount(BeamDrawingInterface *be // In case we're dealing with fTrem - take @beams attribute into consideration FTrem *fTrem = vrv_cast(beamInterface); if (fTrem->Is(FTREM)) { - return { fTrem->GetBeams() - 1, 0 }; + return { fTrem->GetBeams() / 2, 0 }; } int topShortestDur = DUR_8; @@ -333,43 +332,47 @@ bool BeamSegment::NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterfa const int staffBottom = staffTop - doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) * (staff->m_drawingLines - 1); - if (DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset)) return false; - - // Calculate midpoint for the beam with mixed placement - int min = m_beamElementCoordRefs.at(0)->m_element->GetDrawingY(); - int max = m_beamElementCoordRefs.at(0)->m_element->GetDrawingY(); - for (auto coord : m_beamElementCoordRefs) { - max = std::max(max, coord->m_element->GetDrawingY()); - min = std::min(min, coord->m_element->GetDrawingY()); - } - const int midpoint = (max + min) / 2; - bool isMidpointWithinBounds = (midpoint < staffTop - topOffset) && (midpoint > staffBottom + bottomOffset); - - // If midpoint fits within bounds of the staff, try to place beam there - if (isMidpointWithinBounds) { - const int midpointOffset - = (m_beamElementCoordRefs.front()->m_yBeam + m_beamElementCoordRefs.back()->m_yBeam - 2 * midpoint) / 2; - std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), - [midpointOffset](BeamElementCoord *coord) { coord->m_yBeam += midpointOffset; }); - if (DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset)) return false; - } - // If midpoint if above the staff, try to place beam at the top edge of the staff - if (!isMidpointWithinBounds && (midpoint > staffBottom)) { - const int offset = (m_beamElementCoordRefs.front()->m_yBeam + m_beamElementCoordRefs.back()->m_yBeam - - 2 * (staffTop - topOffset)) - / 2; - std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), - [offset](BeamElementCoord *coord) { coord->m_yBeam -= offset; }); + if (!DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset, beamInterface->m_crossStaffContent)) { + return false; } - // otherwise try placing it on the bottom edge - else if (!isMidpointWithinBounds && (midpoint < staffTop)) { - const int offset = (m_beamElementCoordRefs.front()->m_yBeam + m_beamElementCoordRefs.back()->m_yBeam - - 2 * (staffBottom + bottomOffset)) - / 2; - std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), - [offset](BeamElementCoord *coord) { coord->m_yBeam += offset; }); + + if (!beamInterface->m_crossStaffContent) { + // Calculate midpoint for the beam with mixed placement + int min = m_beamElementCoordRefs.at(0)->m_element->GetDrawingY(); + int max = m_beamElementCoordRefs.at(0)->m_element->GetDrawingY(); + for (auto coord : m_beamElementCoordRefs) { + max = std::max(max, coord->m_element->GetDrawingY()); + min = std::min(min, coord->m_element->GetDrawingY()); + } + const int midpoint = (max + min) / 2; + bool isMidpointWithinBounds = (midpoint < staffTop - topOffset) && (midpoint > staffBottom + bottomOffset); + + // If midpoint fits within bounds of the staff, try to place beam there + if (isMidpointWithinBounds) { + const int midpointOffset + = (m_beamElementCoordRefs.front()->m_yBeam + m_beamElementCoordRefs.back()->m_yBeam - 2 * midpoint) / 2; + std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), + [midpointOffset](BeamElementCoord *coord) { coord->m_yBeam += midpointOffset; }); + if (!DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset)) return false; + } + // If midpoint if above the staff, try to place beam at the top edge of the staff + if (!isMidpointWithinBounds && (midpoint > staffBottom)) { + const int offset = (m_beamElementCoordRefs.front()->m_yBeam + m_beamElementCoordRefs.back()->m_yBeam + - 2 * (staffTop - topOffset)) + / 2; + std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), + [offset](BeamElementCoord *coord) { coord->m_yBeam -= offset; }); + } + // otherwise try placing it on the bottom edge + else if (!isMidpointWithinBounds && (midpoint < staffTop)) { + const int offset = (m_beamElementCoordRefs.front()->m_yBeam + m_beamElementCoordRefs.back()->m_yBeam + - 2 * (staffBottom + bottomOffset)) + / 2; + std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), + [offset](BeamElementCoord *coord) { coord->m_yBeam += offset; }); + } + if (!DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset)) return false; } - if (DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset)) return false; // If none of the positions work - there's no space for us to draw a mixed beam (or there is space but it would // overlap with ledger line). Adjust beam placement based on the most frequent stem direction @@ -779,7 +782,7 @@ void BeamSegment::CalcMixedBeamStem(BeamDrawingInterface *beamInterface, int ste { // In cases, when both first and last notes/chords of the beam have same relative places (i.e. they have same stem // direction and/or same staff), - we don't need additional calculations - if (m_firstNoteOrChord->m_beamRelativePlace == m_lastNoteOrChord->m_beamRelativePlace) { + if ((m_firstNoteOrChord->m_beamRelativePlace == m_lastNoteOrChord->m_beamRelativePlace) && (!beamInterface->m_crossStaffContent)) { if (m_beamSlope < 0.0) { m_firstNoteOrChord->m_yBeam = m_lastNoteOrChord->m_yBeam + step; } @@ -814,6 +817,11 @@ void BeamSegment::CalcMixedBeamStem(BeamDrawingInterface *beamInterface, int ste m_lastNoteOrChord->m_yBeam = (m_lastNoteOrChord->m_beamRelativePlace == BEAMPLACE_below) ? m_firstNoteOrChord->m_yBeam + step : m_firstNoteOrChord->m_yBeam - step; + if ((abs(m_firstNoteOrChord->m_yBeam - m_firstNoteOrChord->m_element->GetDrawingY()) < beamInterface->m_beamWidth) + || (abs(m_lastNoteOrChord->m_yBeam - m_lastNoteOrChord->m_element->GetDrawingY()) + < beamInterface->m_beamWidth)) { + std::swap(m_lastNoteOrChord->m_yBeam, m_firstNoteOrChord->m_yBeam); + } } void BeamSegment::CalcBeamPosition( From cc33b8f07882e49c923b30a57b901cb4a868d346 Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 25 Jan 2021 17:57:15 +0200 Subject: [PATCH 192/403] Extend rule for horizontal beams - changed condition for horizontal beams to include cases when internal notes are on the same position as start and end notes --- src/drawinginterface.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index e1f48e1f3ac..ee35d5a68ec 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -290,10 +290,10 @@ bool BeamDrawingInterface::IsHorizontal() // Detect concave shapes for (i = 1; i < itemCount - 1; ++i) { if (m_drawingPlace == BEAMPLACE_above) { - if ((items.at(i) > first) && (items.at(i) > last)) return true; + if ((items.at(i) >= first) && (items.at(i) >= last)) return true; } else { - if ((items.at(i) < first) && (items.at(i) < last)) return true; + if ((items.at(i) <= first) && (items.at(i) <= last)) return true; } } From ec78d6df3799ff4dca85ec3a395c922802a72113 Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 27 Jan 2021 14:43:25 +0200 Subject: [PATCH 193/403] Add logic for handling beam slope for mixed beams - added separate logic for determining whether mixed beam should be drawn horizontal --- src/drawinginterface.cpp | 69 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 65 insertions(+), 4 deletions(-) diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index ee35d5a68ec..1ef88e8a43a 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -21,6 +21,19 @@ namespace vrv { +enum class NoteDirection { + none, + upward, + downward +}; + +// helper for determining note direction +NoteDirection GetNoteDirection(int leftNoteX, int rightNoteX) +{ + if (leftNoteX == rightNoteX) return NoteDirection::none; + return (leftNoteX < rightNoteX) ? NoteDirection::upward : NoteDirection::downward; +} + //---------------------------------------------------------------------------- // DrawingListInterface //---------------------------------------------------------------------------- @@ -268,14 +281,16 @@ bool BeamDrawingInterface::IsHorizontal() int elementCount = (int)m_beamElementCoords.size(); std::vector items; + std::vector directions; items.reserve(m_beamElementCoords.size()); + directions.reserve(m_beamElementCoords.size()); - int i; - for (i = 0; i < elementCount; ++i) { + for (int i = 0; i < elementCount; ++i) { BeamElementCoord *coord = m_beamElementCoords.at(i); if (!coord->m_stem || !coord->m_closestNote) continue; items.push_back(coord->m_closestNote->GetDrawingY()); + directions.push_back(coord->m_beamRelativePlace); } int itemCount = (int)items.size(); @@ -288,14 +303,60 @@ bool BeamDrawingInterface::IsHorizontal() if (first == last) return true; // Detect concave shapes - for (i = 1; i < itemCount - 1; ++i) { + for (int i = 1; i < itemCount - 1; ++i) { if (m_drawingPlace == BEAMPLACE_above) { if ((items.at(i) >= first) && (items.at(i) >= last)) return true; } - else { + else if (m_drawingPlace == BEAMPLACE_below) { if ((items.at(i) <= first) && (items.at(i) <= last)) return true; } } + if (m_drawingPlace == BEAMPLACE_mixed) { + if ((itemCount == 3) && (directions.front() == directions.back())) return true; + int directionChanges = 0; + data_BEAMPLACE previous = directions.front(); + std::for_each(directions.begin(), directions.end(), [&previous, &directionChanges](data_BEAMPLACE current) { + if (current != previous) { + ++directionChanges; + previous = current; + } + }); + // if we have a mix of cross-staff elements, going from one staff to another repeatedly, we need to check note + // directions. Otherwise we can use direction of the outside pitches for beam + if (directionChanges > 1) { + int previousTop = VRV_UNSET; + int previousBottom = VRV_UNSET; + NoteDirection outsidePitchDirection = GetNoteDirection(first, last); + std::map beamDirections{ { NoteDirection::none, 0 }, { NoteDirection::upward, 0 }, + { NoteDirection::downward, 0 } }; + for (int i = 0; i < itemCount; ++i) { + if (directions[i] == BEAMPLACE_above) { + if (previousTop == VRV_UNSET) { + previousTop = items[i]; + } + else { + ++beamDirections[GetNoteDirection(previousTop, items[i])]; + } + } + else if (directions[i] == BEAMPLACE_below) { + if (previousBottom == VRV_UNSET) { + previousBottom = items[i]; + } + else { + ++beamDirections[GetNoteDirection(previousBottom, items[i])]; + } + } + } + // if direction of beam outside pitches corresponds to majority of the note directions within the beam, beam + // can be drawn in that direction. Otherwise horizontal beam should be used + bool result = std::all_of(beamDirections.begin(), beamDirections.end(), + [&beamDirections, &outsidePitchDirection](const auto &pair) { + return (pair.first == outsidePitchDirection) ? true + : pair.second <= beamDirections[outsidePitchDirection]; + }); + if (!result) return true; + } + } // Detect beam with two pitches only and as step at the beginning or at the end const bool firstStep = (first != items.at(1)); From 9ecad7e7cdadd51be2522e34079ff87a6d8a1d60 Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 28 Jan 2021 15:29:07 +0200 Subject: [PATCH 194/403] Beam calculation fixes and horizontal positioning adjustment - fixed a bug where lowest point was set incorrectly (when first and last point of beam were on the same side of the mixed beam) - changed position calculation for the mixed beam - it now follows the same logic, as sloped beams, but with 0 step - that make first and last element on the same position - if mixed beam were to be drawn as sloped, but slope is too small to consider - adjust beam to be drawn as horizontal --- include/vrv/beam.h | 3 ++ src/beam.cpp | 75 +++++++++++++++++++++++++--------------------- 2 files changed, 44 insertions(+), 34 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 6aef3ccc7ca..8ee97e9b7db 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -122,6 +122,9 @@ class BeamSegment { // Helper to calculate the longest stem length of the beam (which will be used uniformely) void CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool isHorizontal); + // Calculate positioning for the horizontal beams + void CalcHorizontalBeam(BeamDrawingInterface *beamInterface); + // Helper to calculate relative position of the beam to for each of the coordinates void CalcMixedBeamPlace(Staff *staff); diff --git a/src/beam.cpp b/src/beam.cpp index 4eeb7740700..b1dffdcee7f 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -760,6 +760,12 @@ bool BeamSegment::CalcBeamSlope( } } else if (place == BEAMPLACE_mixed) { + if (step <= unit) { + step = 0; + } + else if (step > unit * 2) { + step = unit * 2; + } CalcMixedBeamStem(beamInterface, step); } @@ -792,15 +798,15 @@ void BeamSegment::CalcMixedBeamStem(BeamDrawingInterface *beamInterface, int ste return; } - int highestPoint = m_firstNoteOrChord->m_yBeam; - int lowestPoint = m_lastNoteOrChord->m_yBeam; + int highestPoint = VRV_UNSET; + int lowestPoint = VRV_UNSET; if (m_nbNotesOrChords > 2) { std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), [&](BeamElementCoord *coord) { - if ((coord->m_beamRelativePlace == BEAMPLACE_above) && (coord->m_yBeam > highestPoint)) { - highestPoint = coord->m_yBeam; + if (coord->m_beamRelativePlace == BEAMPLACE_above) { + if ((highestPoint == VRV_UNSET) || (coord->m_yBeam > highestPoint)) highestPoint = coord->m_yBeam; }; - if ((coord->m_beamRelativePlace == BEAMPLACE_below) && (coord->m_yBeam < lowestPoint)) { - lowestPoint = coord->m_yBeam; + if (coord->m_beamRelativePlace == BEAMPLACE_below) { + if ((lowestPoint == VRV_UNSET) || (coord->m_yBeam < lowestPoint)) lowestPoint = coord->m_yBeam; }; }); } @@ -865,34 +871,7 @@ void BeamSegment::CalcBeamPosition( } } else { - - // Find the longest stem length - int maxLength = (beamInterface->m_drawingPlace == BEAMPLACE_above) ? VRV_UNSET : -VRV_UNSET; - - for (auto coord : m_beamElementCoordRefs) { - if (!coord->m_stem) continue; - - if (beamInterface->m_drawingPlace == BEAMPLACE_above) { - if (maxLength < coord->m_yBeam) maxLength = coord->m_yBeam; - } - else if (beamInterface->m_drawingPlace == BEAMPLACE_below) { - if (maxLength > coord->m_yBeam) maxLength = coord->m_yBeam; - } - else if (beamInterface->m_drawingPlace == BEAMPLACE_mixed) { - if (coord->m_beamRelativePlace == BEAMPLACE_above) { - if (maxLength < coord->m_yBeam) maxLength = coord->m_yBeam; - } - else if (coord->m_beamRelativePlace == BEAMPLACE_below) { - if (maxLength > coord->m_yBeam) maxLength = coord->m_yBeam; - } - } - } - - if (-VRV_UNSET != abs(maxLength)) { - m_beamElementCoordRefs.at(0)->m_yBeam = maxLength; - } - - this->CalcAdjustPosition(staff, doc, beamInterface); + CalcHorizontalBeam(beamInterface); } if (!beamInterface->m_crossStaffContent) this->AdjustBeamToLedgerLines(doc, staff, beamInterface); @@ -1204,6 +1183,34 @@ void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool is } } +void BeamSegment::CalcHorizontalBeam(BeamDrawingInterface* beamInterface) { + + if (beamInterface->m_drawingPlace == BEAMPLACE_mixed) { + CalcMixedBeamStem(beamInterface, 0); + } + else { + int maxLength = (beamInterface->m_drawingPlace == BEAMPLACE_above) ? VRV_UNSET : -VRV_UNSET; + + // Find the longest stem length + for (auto coord : m_beamElementCoordRefs) { + if (!coord->m_stem) continue; + + if (beamInterface->m_drawingPlace == BEAMPLACE_above) { + if (maxLength < coord->m_yBeam) maxLength = coord->m_yBeam; + } + else if (beamInterface->m_drawingPlace == BEAMPLACE_below) { + if (maxLength > coord->m_yBeam) maxLength = coord->m_yBeam; + } + } + + if (-VRV_UNSET != abs(maxLength)) { + m_beamElementCoordRefs.at(0)->m_yBeam = maxLength; + } + } + + CalcSetValues(); +} + void BeamSegment::CalcMixedBeamPlace(Staff *staff) { const int currentStaffN = staff->GetN(); From 7af6962a9db9143aafce735a5b5e0d2dcd47843c Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 28 Jan 2021 17:35:04 +0200 Subject: [PATCH 195/403] Code cleanup + concave shape re-fix - separated logic for mixed horizontal beams into new method to make code cleaner - moved concave shape detection to happen later in the execution, and to happen only when there are no repeated notes at the start/end --- include/vrv/drawinginterface.h | 8 +++ src/drawinginterface.cpp | 118 +++++++++++++++++---------------- 2 files changed, 70 insertions(+), 56 deletions(-) diff --git a/include/vrv/drawinginterface.h b/include/vrv/drawinginterface.h index 2e8ad957ba8..7d343fdf7b5 100644 --- a/include/vrv/drawinginterface.h +++ b/include/vrv/drawinginterface.h @@ -139,6 +139,14 @@ class BeamDrawingInterface : public ObjectListInterface { */ int GetPosition(Object *object, LayerElement *element); + // +private: + /** + * Determines whether beam should be horizontal based on item positions and relative beam place. Should be used with + * mixed beams, where beam place can be different for separate elements + */ + bool IsHorizontal(const std::vector &items, const std::vector &directions) const; + public: // values to be set before calling CalcBeam bool m_changingDur; diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index 1ef88e8a43a..8f52119dc30 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -302,70 +302,25 @@ bool BeamDrawingInterface::IsHorizontal() // First note and last note have the same postion if (first == last) return true; - // Detect concave shapes - for (int i = 1; i < itemCount - 1; ++i) { - if (m_drawingPlace == BEAMPLACE_above) { - if ((items.at(i) >= first) && (items.at(i) >= last)) return true; - } - else if (m_drawingPlace == BEAMPLACE_below) { - if ((items.at(i) <= first) && (items.at(i) <= last)) return true; - } - } - if (m_drawingPlace == BEAMPLACE_mixed) { - if ((itemCount == 3) && (directions.front() == directions.back())) return true; - int directionChanges = 0; - data_BEAMPLACE previous = directions.front(); - std::for_each(directions.begin(), directions.end(), [&previous, &directionChanges](data_BEAMPLACE current) { - if (current != previous) { - ++directionChanges; - previous = current; - } - }); - // if we have a mix of cross-staff elements, going from one staff to another repeatedly, we need to check note - // directions. Otherwise we can use direction of the outside pitches for beam - if (directionChanges > 1) { - int previousTop = VRV_UNSET; - int previousBottom = VRV_UNSET; - NoteDirection outsidePitchDirection = GetNoteDirection(first, last); - std::map beamDirections{ { NoteDirection::none, 0 }, { NoteDirection::upward, 0 }, - { NoteDirection::downward, 0 } }; - for (int i = 0; i < itemCount; ++i) { - if (directions[i] == BEAMPLACE_above) { - if (previousTop == VRV_UNSET) { - previousTop = items[i]; - } - else { - ++beamDirections[GetNoteDirection(previousTop, items[i])]; - } - } - else if (directions[i] == BEAMPLACE_below) { - if (previousBottom == VRV_UNSET) { - previousBottom = items[i]; - } - else { - ++beamDirections[GetNoteDirection(previousBottom, items[i])]; - } - } - } - // if direction of beam outside pitches corresponds to majority of the note directions within the beam, beam - // can be drawn in that direction. Otherwise horizontal beam should be used - bool result = std::all_of(beamDirections.begin(), beamDirections.end(), - [&beamDirections, &outsidePitchDirection](const auto &pair) { - return (pair.first == outsidePitchDirection) ? true - : pair.second <= beamDirections[outsidePitchDirection]; - }); - if (!result) return true; - } - } + // If drawing place is mixed and is should be drawn horizontal based on mixed rules + if ((m_drawingPlace == BEAMPLACE_mixed) && (IsHorizontal(items, directions))) return true; // Detect beam with two pitches only and as step at the beginning or at the end const bool firstStep = (first != items.at(1)); const bool lastStep = (last != items.at(items.size() - 2)); if ((items.size() > 2) && (firstStep || lastStep)) { + // Detect concave shapes + for (int i = 1; i < itemCount - 1; ++i) { + if (m_drawingPlace == BEAMPLACE_above) { + if ((items.at(i) >= first) && (items.at(i) >= last)) return true; + } + else if (m_drawingPlace == BEAMPLACE_below) { + if ((items.at(i) <= first) && (items.at(i) <= last)) return true; + } + } std::vector pitches; std::unique_copy(items.begin(), items.end(), std::back_inserter(pitches)); if (pitches.size() == 2) { - // if (firstStep) if (m_drawingPlace == BEAMPLACE_above) { // Single note at the beginning as lower first if (firstStep && (std::is_sorted(items.begin(), items.end()))) return true; @@ -384,6 +339,57 @@ bool BeamDrawingInterface::IsHorizontal() return false; } +bool BeamDrawingInterface::IsHorizontal(const std::vector& items, const std::vector& directions) const +{ + // items and directions should be of the same size, otherwise something is not wrong + if (items.size() != directions.size()) return false; + if ((items.size() == 3) && (directions.front() == directions.back())) return true; + + // calculate how many times stem direction is changed withing the beam + int directionChanges = 0; + data_BEAMPLACE previous = directions.front(); + std::for_each(directions.begin(), directions.end(), [&previous, &directionChanges](data_BEAMPLACE current) { + if (current != previous) { + ++directionChanges; + previous = current; + } + }); + // if we have a mix of cross-staff elements, going from one staff to another repeatedly, we need to check note + // directions. Otherwise we can use direction of the outside pitches for beam + if (directionChanges <= 1) return false; + + int previousTop = VRV_UNSET; + int previousBottom = VRV_UNSET; + NoteDirection outsidePitchDirection = GetNoteDirection(items.front(), items.back()); + std::map beamDirections{ { NoteDirection::none, 0 }, { NoteDirection::upward, 0 }, + { NoteDirection::downward, 0 } }; + for (int i = 0; i < items.size(); ++i) { + if (directions[i] == BEAMPLACE_above) { + if (previousTop == VRV_UNSET) { + previousTop = items[i]; + } + else { + ++beamDirections[GetNoteDirection(previousTop, items[i])]; + } + } + else if (directions[i] == BEAMPLACE_below) { + if (previousBottom == VRV_UNSET) { + previousBottom = items[i]; + } + else { + ++beamDirections[GetNoteDirection(previousBottom, items[i])]; + } + } + } + // if direction of beam outside pitches corresponds to majority of the note directions within the beam, beam + // can be drawn in that direction. Otherwise horizontal beam should be used + bool result = std::any_of( + beamDirections.begin(), beamDirections.end(), [&beamDirections, &outsidePitchDirection](const auto &pair) { + return (pair.first == outsidePitchDirection) ? false : pair.second > beamDirections[outsidePitchDirection]; + }); + return result; +} + bool BeamDrawingInterface::IsRepeatedPattern() { if (m_drawingPlace == BEAMPLACE_mixed) return false; From 0b050dfa4f512ff4fdd8882aa0029e97ee2d116d Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 28 Jan 2021 18:25:38 +0200 Subject: [PATCH 196/403] Minor positioning fix --- src/drawinginterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index 8f52119dc30..ac5eafa5b65 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -343,7 +343,7 @@ bool BeamDrawingInterface::IsHorizontal(const std::vector& items, const std { // items and directions should be of the same size, otherwise something is not wrong if (items.size() != directions.size()) return false; - if ((items.size() == 3) && (directions.front() == directions.back())) return true; + if ((items.size() == 3) && (directions.front() == directions.back()) && m_crossStaffContent) return true; // calculate how many times stem direction is changed withing the beam int directionChanges = 0; From 566a8092453b219ba30cd0efca2b3e44b5fce475 Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 29 Apr 2021 13:38:01 +0300 Subject: [PATCH 197/403] Fixes for cross-staff beams - fixed cross-staff beams with all cross-staff notes - beam position should be calculated properly now and should be treated as if it were ordinary beam - fixed cross-staff beams with only two notes having invalid rendering - such beams should be properly drawn as cross-staff now --- include/vrv/beam.h | 3 +++ src/beam.cpp | 42 ++++++++++++++++++++++++++++------------ src/drawinginterface.cpp | 6 ++++-- 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 8ee97e9b7db..262322059fe 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -122,6 +122,9 @@ class BeamSegment { // Helper to calculate the longest stem length of the beam (which will be used uniformely) void CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool isHorizontal); + // Helper to calculate max/min beam points for the relative beam place + std::pair CalcBeamRelativeMinMax(data_BEAMPLACE place) const; + // Calculate positioning for the horizontal beams void CalcHorizontalBeam(BeamDrawingInterface *beamInterface); diff --git a/src/beam.cpp b/src/beam.cpp index b1dffdcee7f..5c77e827e4e 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -332,6 +332,15 @@ bool BeamSegment::NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterfa const int staffBottom = staffTop - doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) * (staff->m_drawingLines - 1); + if (beamInterface->m_crossStaffContent) { + data_BEAMPLACE place = m_beamElementCoordRefs.at(0)->m_beamRelativePlace; + auto iter = std::find_if(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), + [&place](BeamElementCoord *coord) { return coord->m_beamRelativePlace != place; }); + if (iter == m_beamElementCoordRefs.end()) { + beamInterface->m_drawingPlace = place; + return true; + } + } if (!DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset, beamInterface->m_crossStaffContent)) { return false; } @@ -798,18 +807,10 @@ void BeamSegment::CalcMixedBeamStem(BeamDrawingInterface *beamInterface, int ste return; } - int highestPoint = VRV_UNSET; - int lowestPoint = VRV_UNSET; - if (m_nbNotesOrChords > 2) { - std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), [&](BeamElementCoord *coord) { - if (coord->m_beamRelativePlace == BEAMPLACE_above) { - if ((highestPoint == VRV_UNSET) || (coord->m_yBeam > highestPoint)) highestPoint = coord->m_yBeam; - }; - if (coord->m_beamRelativePlace == BEAMPLACE_below) { - if ((lowestPoint == VRV_UNSET) || (coord->m_yBeam < lowestPoint)) lowestPoint = coord->m_yBeam; - }; - }); - } + auto [aboveMax, aboveMin] = CalcBeamRelativeMinMax(BEAMPLACE_above); + auto [belowMax, belowMin] = CalcBeamRelativeMinMax(BEAMPLACE_below); + const int highestPoint = (aboveMax != VRV_UNSET) ? aboveMax : belowMax; + const int lowestPoint = (belowMin != VRV_UNSET) ? belowMin : aboveMin; // This helps with general beams but breaks trems auto [up, down] = GetAdditionalBeamCount(beamInterface); @@ -1183,6 +1184,23 @@ void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool is } } +std::pair BeamSegment::CalcBeamRelativeMinMax(data_BEAMPLACE place) const +{ + int highestPoint = VRV_UNSET; + int lowestPoint = VRV_UNSET; + std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), [&](BeamElementCoord *coord) { + if (coord->m_beamRelativePlace == place) { + if ((highestPoint == VRV_UNSET) || (coord->m_yBeam > highestPoint)) + highestPoint = coord->m_yBeam; + if ((lowestPoint == VRV_UNSET) || (coord->m_yBeam < lowestPoint)) { + lowestPoint = coord->m_yBeam; + } + } + }); + + return { highestPoint, lowestPoint }; +} + void BeamSegment::CalcHorizontalBeam(BeamDrawingInterface* beamInterface) { if (beamInterface->m_drawingPlace == BEAMPLACE_mixed) { diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index ac5eafa5b65..ef4ad2c71b9 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -341,9 +341,11 @@ bool BeamDrawingInterface::IsHorizontal() bool BeamDrawingInterface::IsHorizontal(const std::vector& items, const std::vector& directions) const { - // items and directions should be of the same size, otherwise something is not wrong + // items and directions should be of the same size, otherwise something is wrong if (items.size() != directions.size()) return false; - if ((items.size() == 3) && (directions.front() == directions.back()) && m_crossStaffContent) return true; + if ((items.size() == 3) && m_crossStaffContent) { + if ((directions.at(0) == directions.at(2)) && (directions.at(0) != directions.at(1))) return true; + } // calculate how many times stem direction is changed withing the beam int directionChanges = 0; From 8703dfe104e399a892acbdea3785376948eea348 Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 12 May 2021 15:12:05 +0300 Subject: [PATCH 198/403] Minor changes - fix comments (typo + mismatch of comment/return values) - used dynamic_cast for fTrems to ensure that valid object is acquired --- include/vrv/beam.h | 2 +- src/beam.cpp | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 262322059fe..0419c01c92c 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -140,7 +140,7 @@ class BeamSegment { // Helper to check wheter beam fits within certain bounds bool DoesBeamOverlap(int staffTop, int topOffset, int staffBottom, int bottomOffset, bool isCrossStaff = false); - // Helper to find number of additional beams. Return { additional beams below main beam, additional beams above } + // Helper to find number of additional beams. Return { additional beams above main beam, additional beams below } std::pair GetAdditionalBeamCount(BeamDrawingInterface *beamInterface); // Helper to check mixed beam positioning compared to other elements (ledger lines, staff) and adjust it accordingly diff --git a/src/beam.cpp b/src/beam.cpp index 5c77e827e4e..4a928a8715b 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -229,8 +229,8 @@ void BeamSegment::CalcBeam( stemOffset = (coord->m_dur - DUR_8) * beamInterface->m_beamWidth; } // handle cross-staff fTrem cases - if (FTrem *fTrem = vrv_cast(beamInterface); - fTrem->Is(FTREM) && (coord->GetStemDir() == STEMDIRECTION_down)) { + if (FTrem *fTrem = dynamic_cast(beamInterface); + fTrem && (coord->GetStemDir() == STEMDIRECTION_down)) { const int beamsCount = fTrem->GetBeams(); stemOffset = (beamsCount - 1) * beamInterface->m_beamWidth; } @@ -274,14 +274,14 @@ void BeamSegment::CalcBeam( bool BeamSegment::DoesBeamOverlap(int staffTop, int topOffset, int staffBottom, int bottomOffset, bool isCrossStaff) { // find if current beam fits within the staff - auto withinBounds + auto outsideBounds = std::find_if(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), [&](BeamElementCoord *coord) { if ((coord->m_yBeam > staffTop - topOffset) || (coord->m_yBeam < staffBottom + bottomOffset)) { return true; } return false; }); - if (!isCrossStaff && (withinBounds != m_beamElementCoordRefs.end())) return true; + if (!isCrossStaff && (outsideBounds != m_beamElementCoordRefs.end())) return true; auto overlapping = std::find_if(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), [&](BeamElementCoord *coord) { assert(coord->m_element); @@ -301,8 +301,7 @@ bool BeamSegment::DoesBeamOverlap(int staffTop, int topOffset, int staffBottom, std::pair BeamSegment::GetAdditionalBeamCount(BeamDrawingInterface *beamInterface) { // In case we're dealing with fTrem - take @beams attribute into consideration - FTrem *fTrem = vrv_cast(beamInterface); - if (fTrem->Is(FTREM)) { + if (FTrem *fTrem = dynamic_cast(beamInterface); fTrem) { return { fTrem->GetBeams() / 2, 0 }; } From 6f8a3474b2bb2e4feaced48aaa53958c56ef3b47 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 8 Jun 2021 14:06:07 +0300 Subject: [PATCH 199/403] Change how cross-staff beams with too little space are handled - adjusted code to increase distance between staves if cross-staff beam do not fit (as opposed to shifting beam below/above) --- include/vrv/staff.h | 5 ++++ include/vrv/verticalaligner.h | 11 ++++++++ src/beam.cpp | 52 ++++++++++++++++++++++++++--------- src/staff.cpp | 5 ++++ src/verticalaligner.cpp | 4 +++ 5 files changed, 64 insertions(+), 13 deletions(-) diff --git a/include/vrv/staff.h b/include/vrv/staff.h index 54929b42275..952c3848aa7 100644 --- a/include/vrv/staff.h +++ b/include/vrv/staff.h @@ -167,6 +167,11 @@ class Staff : public Object, */ virtual void SetFromFacsimile(Doc *doc); + /** + * Set beam adjustment for the corresponding staff alignment + */ + void SetAlignmentBeamAdjustment(int adjust); + //----------// // Functors // //----------// diff --git a/include/vrv/verticalaligner.h b/include/vrv/verticalaligner.h index 6c8cc2ba6cc..f072ddc2116 100644 --- a/include/vrv/verticalaligner.h +++ b/include/vrv/verticalaligner.h @@ -281,6 +281,14 @@ class StaffAlignment : public Object { void ReAdjustFloatingPositionersGrps(AdjustFloatingPositionerGrpsParams *params, const ArrayOfFloatingPositioners &positioners, ArrayOfIntPairs &grpIdYRel); + /** + * @name Set/get for the beam adjust + */ + ///@{ + void SetBeamAdjust(int beamAdjust) { m_beamAdjust = beamAdjust; } + int GetBeamAdjust() const { return m_beamAdjust; } + ///@} + //----------// // Functors // //----------// @@ -374,6 +382,9 @@ class StaffAlignment : public Object { BoundingBox *m_overflowBBoxBelow; ///@} + // Value to store required beam adjustment for cross-staff beams + int m_beamAdjust; + /** * The list of overflowing bounding boxes (e.g, LayerElement or FloatingPositioner) */ diff --git a/src/beam.cpp b/src/beam.cpp index 4a928a8715b..6836d47e7f8 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -380,21 +380,47 @@ bool BeamSegment::NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterfa [offset](BeamElementCoord *coord) { coord->m_yBeam += offset; }); } if (!DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset)) return false; - } - // If none of the positions work - there's no space for us to draw a mixed beam (or there is space but it would - // overlap with ledger line). Adjust beam placement based on the most frequent stem direction - const int stemUpCount = (int)std::count_if(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), - [](BeamElementCoord *coord) { return coord->GetStemDir() == STEMDIRECTION_up; }); - const int stemDownCount = (int)std::count_if(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), - [](BeamElementCoord *coord) { return coord->GetStemDir() == STEMDIRECTION_down; }); - data_STEMDIRECTION newDirection = (stemUpCount >= stemDownCount) ? STEMDIRECTION_up : STEMDIRECTION_down; - beamInterface->m_drawingPlace = (newDirection == STEMDIRECTION_up) ? BEAMPLACE_above : BEAMPLACE_below; - if ((newDirection == STEMDIRECTION_down) && (m_uniformStemLength > 0)) m_uniformStemLength *= -1; + // If none of the positions work - there's no space for us to draw a mixed beam (or there is space but it would + // overlap with ledger line). Adjust beam placement based on the most frequent stem direction + const int stemUpCount = (int)std::count_if(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), + [](BeamElementCoord *coord) { return coord->GetStemDir() == STEMDIRECTION_up; }); + const int stemDownCount = (int)std::count_if(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), + [](BeamElementCoord *coord) { return coord->GetStemDir() == STEMDIRECTION_down; }); + data_STEMDIRECTION newDirection = (stemUpCount >= stemDownCount) ? STEMDIRECTION_up : STEMDIRECTION_down; + beamInterface->m_drawingPlace = (newDirection == STEMDIRECTION_up) ? BEAMPLACE_above : BEAMPLACE_below; + if ((newDirection == STEMDIRECTION_down) && (m_uniformStemLength > 0)) m_uniformStemLength *= -1; - LogWarning("Insufficient space to draw mixed beam, starting at '%s'. Drawing '%s' instead.", - m_beamElementCoordRefs.at(0)->m_element->GetUuid().c_str(), - (beamInterface->m_drawingPlace == BEAMPLACE_above) ? "above" : "below"); + LogWarning("Insufficient space to draw mixed beam, starting at '%s'. Drawing '%s' instead.", + m_beamElementCoordRefs.at(0)->m_element->GetUuid().c_str(), + (beamInterface->m_drawingPlace == BEAMPLACE_above) ? "above" : "below"); + } + else { + int adjust = 0; + std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), [&](BeamElementCoord *coord) { + if (!coord->m_element && !coord->m_element->Is({ NOTE, CHORD })) return; + int elemY = coord->m_element->GetDrawingY(); + const int diff = std::abs(elemY - coord->m_yBeam); + if (coord->m_stem->GetDrawingStemDir() == STEMDIRECTION_down) { + if (elemY <= coord->m_yBeam + topOffset) { + if (diff > adjust) adjust = diff + topOffset; + } + } + else if (coord->m_stem->GetDrawingStemDir() == STEMDIRECTION_up) { + if (elemY >= coord->m_yBeam - bottomOffset) { + if (diff > adjust) adjust = diff + bottomOffset; + } + } + }); + // Set adjustment for the staf here + if (beamInterface->m_crossStaffContent->GetN() < staff->GetN()) { + beamInterface->m_crossStaffContent->SetAlignmentBeamAdjustment(adjust); + } + else { + staff->SetAlignmentBeamAdjustment(adjust); + } + return false; + } return true; } diff --git a/src/staff.cpp b/src/staff.cpp index 8aad8981e79..1be1f3f74e0 100644 --- a/src/staff.cpp +++ b/src/staff.cpp @@ -377,6 +377,11 @@ int Staff::GetNearestInterStaffPosition(int y, Doc *doc, data_STAFFREL place) } } +void Staff::SetAlignmentBeamAdjustment(int adjust) +{ + m_staffAlignment->SetBeamAdjust(adjust); +} + //---------------------------------------------------------------------------- // LedgerLine //---------------------------------------------------------------------------- diff --git a/src/verticalaligner.cpp b/src/verticalaligner.cpp index 06506486bb5..8fd9596c49f 100644 --- a/src/verticalaligner.cpp +++ b/src/verticalaligner.cpp @@ -506,6 +506,10 @@ int StaffAlignment::CalcMinimumRequiredSpacing(const Doc *doc) const // Add a margin overflowSum += doc->GetBottomMargin(STAFF) * doc->GetDrawingUnit(this->GetStaffSize()); + if (const int adjust = prevAlignment->GetBeamAdjust()) { + overflowSum += adjust; + } + BoundingBox *previous = prevAlignment->GetOverflowBBoxBelow(); BoundingBox *current = this->GetOverflowBBoxAbove(); From 451d1c14d3441951e0a6213d004b4c17e22a7c2a Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 1 Dec 2021 17:28:02 +0200 Subject: [PATCH 200/403] Rebase fixes for the beams --- include/vrv/beam.h | 2 +- src/beam.cpp | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 0419c01c92c..07414fbb757 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -126,7 +126,7 @@ class BeamSegment { std::pair CalcBeamRelativeMinMax(data_BEAMPLACE place) const; // Calculate positioning for the horizontal beams - void CalcHorizontalBeam(BeamDrawingInterface *beamInterface); + void CalcHorizontalBeam(Doc *doc, Staff *staff, BeamDrawingInterface *beamInterface); // Helper to calculate relative position of the beam to for each of the coordinates void CalcMixedBeamPlace(Staff *staff); diff --git a/src/beam.cpp b/src/beam.cpp index 6836d47e7f8..7bd81b1ddb4 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -889,15 +889,15 @@ void BeamSegment::CalcBeamPosition( if (!isHorizontal) { bool shorten; int step; - if (CalcBeamSlope(layer, staff, doc, beamInterface, shorten, step)) { - CalcAdjustSlope(staff, doc, beamInterface, shorten, step); + if (this->CalcBeamSlope(layer, staff, doc, beamInterface, shorten, step)) { + this->CalcAdjustSlope(staff, doc, beamInterface, shorten, step); } else { this->CalcAdjustPosition(staff, doc, beamInterface); } } else { - CalcHorizontalBeam(beamInterface); + this->CalcHorizontalBeam(doc, staff, beamInterface); } if (!beamInterface->m_crossStaffContent) this->AdjustBeamToLedgerLines(doc, staff, beamInterface); @@ -1164,15 +1164,11 @@ void BeamSegment::CalcBeamPlace(Layer *layer, BeamDrawingInterface *beamInterfac void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool isHorizontal) { int relevantNoteLoc = VRV_UNSET; - //data_STEMDIRECTION stemDir = (place == BEAMPLACE_below) ? STEMDIRECTION_down : STEMDIRECTION_up; + const data_STEMDIRECTION globalStemDir = (place == BEAMPLACE_below) ? STEMDIRECTION_down : STEMDIRECTION_up; for (auto coord : m_beamElementCoordRefs) { - data_STEMDIRECTION stemDir = STEMDIRECTION_NONE; - if (place != BEAMPLACE_mixed) { - stemDir = (place == BEAMPLACE_below) ? STEMDIRECTION_down : STEMDIRECTION_up; - } - else { - stemDir = (coord->m_beamRelativePlace == BEAMPLACE_below) ? STEMDIRECTION_down : STEMDIRECTION_up; - } + const data_STEMDIRECTION stemDir = (place != BEAMPLACE_mixed) ? globalStemDir + : (coord->m_beamRelativePlace == BEAMPLACE_below) ? STEMDIRECTION_down + : STEMDIRECTION_up; const int stemDirBias = (stemDir == STEMDIRECTION_up) ? 1 : -1; coord->SetClosestNote(stemDir); if (!coord->m_closestNote) continue; @@ -1188,6 +1184,10 @@ void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool is int minDuration = DUR_4; for (auto coord : m_beamElementCoordRefs) { + const data_STEMDIRECTION stemDir = (place != BEAMPLACE_mixed) ? globalStemDir + : (coord->m_beamRelativePlace == BEAMPLACE_below) ? STEMDIRECTION_down + : STEMDIRECTION_up; + const int coordStemLength = coord->CalculateStemLength(staff, stemDir, isHorizontal); if (!coord->m_closestNote) continue; // if location matches, or if current elements duration is shorter than 8th. This ensures that beams with // partial beams will not be shorted when lowest/highest note is 8th and can be shortened @@ -1226,10 +1226,10 @@ std::pair BeamSegment::CalcBeamRelativeMinMax(data_BEAMPLACE place) co return { highestPoint, lowestPoint }; } -void BeamSegment::CalcHorizontalBeam(BeamDrawingInterface* beamInterface) { +void BeamSegment::CalcHorizontalBeam(Doc *doc, Staff *staff, BeamDrawingInterface* beamInterface) { if (beamInterface->m_drawingPlace == BEAMPLACE_mixed) { - CalcMixedBeamStem(beamInterface, 0); + this->CalcMixedBeamStem(beamInterface, 0); } else { int maxLength = (beamInterface->m_drawingPlace == BEAMPLACE_above) ? VRV_UNSET : -VRV_UNSET; @@ -1251,7 +1251,7 @@ void BeamSegment::CalcHorizontalBeam(BeamDrawingInterface* beamInterface) { } } - CalcSetValues(); + this->CalcAdjustPosition(staff, doc, beamInterface); } void BeamSegment::CalcMixedBeamPlace(Staff *staff) From 4d46c233cf6aedc3632eb92005cd81ff8e60584e Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 9 Dec 2021 15:33:24 +0200 Subject: [PATCH 201/403] Adjust stem length for the cross-staff fTrem --- src/beam.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/beam.cpp b/src/beam.cpp index 7bd81b1ddb4..5bae9b245ca 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -232,7 +232,7 @@ void BeamSegment::CalcBeam( if (FTrem *fTrem = dynamic_cast(beamInterface); fTrem && (coord->GetStemDir() == STEMDIRECTION_down)) { const int beamsCount = fTrem->GetBeams(); - stemOffset = (beamsCount - 1) * beamInterface->m_beamWidth; + stemOffset = beamsCount * beamInterface->m_beamWidth; } if (coord->m_beamRelativePlace == BEAMPLACE_below) { From 047810fdd27ba0160ed0f176e7ce2ac4078d4da2 Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 13 Dec 2021 20:31:51 +0200 Subject: [PATCH 202/403] Initialize missed variable --- include/vrv/verticalaligner.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/vrv/verticalaligner.h b/include/vrv/verticalaligner.h index f072ddc2116..8f4481938b8 100644 --- a/include/vrv/verticalaligner.h +++ b/include/vrv/verticalaligner.h @@ -383,7 +383,7 @@ class StaffAlignment : public Object { ///@} // Value to store required beam adjustment for cross-staff beams - int m_beamAdjust; + int m_beamAdjust = 0; /** * The list of overflowing bounding boxes (e.g, LayerElement or FloatingPositioner) From b885d810ef604660329d87ad32ba53c5b767204a Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 15 Dec 2021 11:42:43 +0200 Subject: [PATCH 203/403] Remove redundant variable --- src/beam.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/beam.cpp b/src/beam.cpp index 5bae9b245ca..b73506b7ddb 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1169,7 +1169,6 @@ void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool is const data_STEMDIRECTION stemDir = (place != BEAMPLACE_mixed) ? globalStemDir : (coord->m_beamRelativePlace == BEAMPLACE_below) ? STEMDIRECTION_down : STEMDIRECTION_up; - const int stemDirBias = (stemDir == STEMDIRECTION_up) ? 1 : -1; coord->SetClosestNote(stemDir); if (!coord->m_closestNote) continue; if (relevantNoteLoc == VRV_UNSET) { From 87fd900b884c902c6e7da4ac8f2e5cc02c43f743 Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 15 Dec 2021 19:21:35 +0200 Subject: [PATCH 204/403] Extend cross-staff overflow to FTREM elements - split GetOverflowStaffAlignments into three parts to make sure that Beam and FTrem are treated in similar fashion in cross-staff cases - added two templates for the Beam/Ftrem handling of staff alignment overflow - changed stemOffset for FTrem to take into account floating beams --- include/vrv/layerelement.h | 16 +++++ src/beam.cpp | 3 +- src/layerelement.cpp | 126 +++++++++++++++++++++++-------------- 3 files changed, 96 insertions(+), 49 deletions(-) diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index ee6426da2c4..adb2065151c 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -467,6 +467,22 @@ class LayerElement : public Object, private: int GetDrawingArticulationTopOrBottom(data_STAFFREL place, ArticType type); + /** + * Template for getting above/below overflow for BeamType elements (BEAM or FTREM) + */ + template void GetBeamOverflow(StaffAlignment *&above, StaffAlignment *&below); + + /** + * Template for getting above/below overflow for children of BeamType elements (BEAM or FTREM) + */ + template + void GetBeamChildOverflow(StaffAlignment *&above, StaffAlignment *&below, BeamType *parent); + + /** + * Get above/below overflow for the chord elements + */ + void GetChordOverflow(StaffAlignment *&above, StaffAlignment *&below, int staffN); + public: /** Absolute position X. This is used for facsimile (transcription) encoding */ int m_xAbs; diff --git a/src/beam.cpp b/src/beam.cpp index b73506b7ddb..4194bbeef17 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -231,7 +231,8 @@ void BeamSegment::CalcBeam( // handle cross-staff fTrem cases if (FTrem *fTrem = dynamic_cast(beamInterface); fTrem && (coord->GetStemDir() == STEMDIRECTION_down)) { - const int beamsCount = fTrem->GetBeams(); + int beamsCount = std::max(fTrem->GetBeams(), fTrem->GetBeamsFloat()); + if (!fTrem->HasBeamsFloat()) beamsCount--; stemOffset = beamsCount * beamInterface->m_beamWidth; } diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 1772df52755..86b4d810825 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -290,65 +290,95 @@ void LayerElement::GetOverflowStaffAlignments(StaffAlignment *&above, StaffAlign above = staff->GetAlignment(); below = above; - // Chord and beam parent (if any) - Chord *chord = vrv_cast(this->GetFirstAncestor(CHORD)); - Beam *beam = vrv_cast(this->GetFirstAncestor(BEAM)); - // Dots, flags and stems with cross-staff chords need special treatment - if (this->Is({ DOTS, FLAG, STEM }) && chord && chord->HasCrossStaff()) { - Staff *staffAbove = NULL; - Staff *staffBelow = NULL; - chord->GetCrossStaffExtremes(staffAbove, staffBelow); - if (staffAbove && (staffAbove->GetN() < staff->GetN())) { - above = staffAbove->GetAlignment(); + this->GetChordOverflow(above, below, staff->GetN()); + + // Stems cross-staff beam need special treatment but only if the beam itself is not cross-staff + if (this->Is({ ARTIC, STEM })) { + if (this->GetFirstAncestor(BEAM)) { + Beam *beam = vrv_cast(this->GetFirstAncestor(BEAM)); + this->GetBeamChildOverflow(above, below, beam); } - if (staffBelow && (staffBelow->GetN() > staff->GetN())) { - below = staffBelow->GetAlignment(); + else if (this->GetFirstAncestor(FTREM)) { + FTrem *fTrem = vrv_cast(this->GetFirstAncestor(BEAM)); + this->GetBeamChildOverflow(above, below, fTrem); } } - // Stems cross-staff beam need special treatment but only if the beam itself is not cross-staff - if (this->Is({ ARTIC, STEM }) && beam && beam->m_crossStaffContent && !beam->m_crossStaff) { - data_STAFFREL_basic direction = beam->m_crossStaffRel; + // Beams in cross-staff situation need special treatment + else if (this->Is(BEAM)) { + this->GetBeamOverflow(above, below); + } + else if (this->Is(FTREM)) { + this->GetBeamOverflow(above, below); + } +} + +template +void LayerElement::GetBeamOverflow(StaffAlignment *&above, StaffAlignment *&below) +{ + if (!this->Is({ BEAM, FTREM })) return; + + BeamType *beam = vrv_cast(this); + assert(beam); + // Beam between the staves - ignore both above and below + if (!beam->m_crossStaffContent || beam->m_crossStaff) return; + + data_STAFFREL_basic direction = beam->m_crossStaffRel; + if (beam->m_drawingPlace == BEAMPLACE_mixed) { + above = NULL; + below = NULL; + } + // Beam below - ignore above and find the appropriate below staff + else if (beam->m_drawingPlace == BEAMPLACE_below) { + above = NULL; if (direction == STAFFREL_basic_above) { - above = beam->m_crossStaffContent->GetAlignment(); below = beam->m_beamStaff->GetAlignment(); } else { - above = beam->m_beamStaff->GetAlignment(); below = beam->m_crossStaffContent->GetAlignment(); } } - // Beams in cross-staff situation need special treatment - if (this->Is(BEAM)) { - beam = vrv_cast(this); - assert(beam); - // Beam between the staves - ignore both above and below - if (beam->m_crossStaffContent && !beam->m_crossStaff) { - data_STAFFREL_basic direction = beam->m_crossStaffRel; - if (beam->m_drawingPlace == BEAMPLACE_mixed) { - above = NULL; - below = NULL; - } - // Beam below - ignore above and find the appropriate below staff - else if (beam->m_drawingPlace == BEAMPLACE_below) { - above = NULL; - if (direction == STAFFREL_basic_above) { - below = beam->m_beamStaff->GetAlignment(); - } - else { - below = beam->m_crossStaffContent->GetAlignment(); - } - } - // Beam above - ignore below and find the appropriate above staff - else if (beam->m_drawingPlace == BEAMPLACE_above) { - below = NULL; - if (direction == STAFFREL_basic_below) { - above = beam->m_beamStaff->GetAlignment(); - } - else { - above = beam->m_crossStaffContent->GetAlignment(); - } - } + // Beam above - ignore below and find the appropriate above staff + else if (beam->m_drawingPlace == BEAMPLACE_above) { + below = NULL; + if (direction == STAFFREL_basic_below) { + above = beam->m_beamStaff->GetAlignment(); + } + else { + above = beam->m_crossStaffContent->GetAlignment(); + } + } +} + +template +void LayerElement::GetBeamChildOverflow(StaffAlignment *&above, StaffAlignment *&below, BeamType *parent) +{ + if (parent && parent->m_crossStaffContent && !parent->m_crossStaff) { + data_STAFFREL_basic direction = parent->m_crossStaffRel; + if (direction == STAFFREL_basic_above) { + above = parent->m_crossStaffContent->GetAlignment(); + below = parent->m_beamStaff->GetAlignment(); + } + else { + above = parent->m_beamStaff->GetAlignment(); + below = parent->m_crossStaffContent->GetAlignment(); + } + } +} + +void LayerElement::GetChordOverflow(StaffAlignment *&above, StaffAlignment *&below, int staffN) +{ + Chord *chord = vrv_cast(this->GetFirstAncestor(CHORD)); + // Dots, flags and stems with cross-staff chords need special treatment + if (this->Is({ DOTS, FLAG, STEM }) && chord && chord->HasCrossStaff()) { + Staff *staffAbove = NULL; + Staff *staffBelow = NULL; + chord->GetCrossStaffExtremes(staffAbove, staffBelow); + if (staffAbove && (staffAbove->GetN() < staffN)) { + above = staffAbove->GetAlignment(); + } + if (staffBelow && (staffBelow->GetN() > staffN)) { + below = staffBelow->GetAlignment(); } } } From 916772b816b106d44f1091687c6f71f64e76887d Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 16 Dec 2021 17:32:09 +0200 Subject: [PATCH 205/403] Add this keyword + center cross-staff fTrems --- src/beam.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/beam.cpp b/src/beam.cpp index 4194bbeef17..d0c3d544d19 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -263,7 +263,6 @@ void BeamSegment::CalcBeam( // This is the case with fTrem on whole notes if (!stem) continue; - // stem->SetDrawingStemDir(beamInterface->m_stemDir); // Since the value were calculated relatively to the element position, adjust them stem->SetDrawingXRel(coord->m_x - el->GetDrawingX()); stem->SetDrawingYRel(y2 - el->GetDrawingY()); @@ -303,7 +302,7 @@ std::pair BeamSegment::GetAdditionalBeamCount(BeamDrawingInterface *be { // In case we're dealing with fTrem - take @beams attribute into consideration if (FTrem *fTrem = dynamic_cast(beamInterface); fTrem) { - return { fTrem->GetBeams() / 2, 0 }; + return { fTrem->GetBeams(), 0 }; } int topShortestDur = DUR_8; @@ -323,7 +322,7 @@ std::pair BeamSegment::GetAdditionalBeamCount(BeamDrawingInterface *be bool BeamSegment::NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface) { const int unit = doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); - const auto [topBeams, bottomBeams] = GetAdditionalBeamCount(beamInterface); + const auto [topBeams, bottomBeams] = this->GetAdditionalBeamCount(beamInterface); const int topOffset = topBeams * beamInterface->m_beamWidth + unit / 2; const int bottomOffset = bottomBeams * beamInterface->m_beamWidth + unit / 2; @@ -341,7 +340,7 @@ bool BeamSegment::NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterfa return true; } } - if (!DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset, beamInterface->m_crossStaffContent)) { + if (!this->DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset, beamInterface->m_crossStaffContent)) { return false; } @@ -362,7 +361,7 @@ bool BeamSegment::NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterfa = (m_beamElementCoordRefs.front()->m_yBeam + m_beamElementCoordRefs.back()->m_yBeam - 2 * midpoint) / 2; std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), [midpointOffset](BeamElementCoord *coord) { coord->m_yBeam += midpointOffset; }); - if (!DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset)) return false; + if (!this->DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset)) return false; } // If midpoint if above the staff, try to place beam at the top edge of the staff if (!isMidpointWithinBounds && (midpoint > staffBottom)) { @@ -380,7 +379,7 @@ bool BeamSegment::NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterfa std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), [offset](BeamElementCoord *coord) { coord->m_yBeam += offset; }); } - if (!DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset)) return false; + if (!this->DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset)) return false; // If none of the positions work - there's no space for us to draw a mixed beam (or there is space but it would // overlap with ledger line). Adjust beam placement based on the most frequent stem direction @@ -801,7 +800,7 @@ bool BeamSegment::CalcBeamSlope( else if (step > unit * 2) { step = unit * 2; } - CalcMixedBeamStem(beamInterface, step); + this->CalcMixedBeamStem(beamInterface, step); } m_beamSlope = BoundingBox::CalcSlope(Point(m_firstNoteOrChord->m_x, m_firstNoteOrChord->m_yBeam), @@ -833,18 +832,18 @@ void BeamSegment::CalcMixedBeamStem(BeamDrawingInterface *beamInterface, int ste return; } - auto [aboveMax, aboveMin] = CalcBeamRelativeMinMax(BEAMPLACE_above); - auto [belowMax, belowMin] = CalcBeamRelativeMinMax(BEAMPLACE_below); + const auto [aboveMax, aboveMin] = this->CalcBeamRelativeMinMax(BEAMPLACE_above); + const auto [belowMax, belowMin] = this->CalcBeamRelativeMinMax(BEAMPLACE_below); const int highestPoint = (aboveMax != VRV_UNSET) ? aboveMax : belowMax; const int lowestPoint = (belowMin != VRV_UNSET) ? belowMin : aboveMin; // This helps with general beams but breaks trems - auto [up, down] = GetAdditionalBeamCount(beamInterface); + const auto [up, down] = this->GetAdditionalBeamCount(beamInterface); // Calculate midpoint for the beam, taking into account highest and lowest points, as well as number of additional // beams above and below main beam. Start position of the beam is then further adjusted based on the step size to // make sure that beam is truly centered - int midPoint = (highestPoint + lowestPoint + (up - down) * beamInterface->m_beamWidth) / 2; + const int midPoint = (highestPoint + lowestPoint + (up - down) * beamInterface->m_beamWidth) / 2; m_firstNoteOrChord->m_yBeam = (m_lastNoteOrChord->m_beamRelativePlace == BEAMPLACE_below) ? midPoint - step / 2 : midPoint + step / 2; m_lastNoteOrChord->m_yBeam = (m_lastNoteOrChord->m_beamRelativePlace == BEAMPLACE_below) From 1cfea22d668b953ee33e00e66f9e6361e3ec4f9b Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 16 Dec 2021 18:30:05 +0200 Subject: [PATCH 206/403] Improve fTrem cross-staff posiitoning code - removed explicit casting to fTrem, replaced by polymorphic calls to corresponing funcitons of DrawingInterface - adjusted code for centering of cross-staff fTrems --- include/vrv/beam.h | 10 +++++-- include/vrv/drawinginterface.h | 10 +++++++ include/vrv/ftrem.h | 10 +++++++ src/beam.cpp | 54 ++++++++++++++++------------------ src/ftrem.cpp | 10 +++++++ 5 files changed, 62 insertions(+), 32 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 07414fbb757..b9cd5515e03 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -140,9 +140,6 @@ class BeamSegment { // Helper to check wheter beam fits within certain bounds bool DoesBeamOverlap(int staffTop, int topOffset, int staffBottom, int bottomOffset, bool isCrossStaff = false); - // Helper to find number of additional beams. Return { additional beams above main beam, additional beams below } - std::pair GetAdditionalBeamCount(BeamDrawingInterface *beamInterface); - // Helper to check mixed beam positioning compared to other elements (ledger lines, staff) and adjust it accordingly bool NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface); @@ -216,6 +213,7 @@ class Beam : public LayerElement, const ArrayOfBeamElementCoords *GetElementCoords(); /** + * Return true if the beam has a tabGrp child. * In that case, the ObjectList will only have tabGrp elements. See Beam::FilterList */ @@ -229,6 +227,12 @@ class Beam : public LayerElement, Beam *GetStemSameasBeam() const { return m_stemSameas; } void SetStemSameasBeam(Beam *stemSameas) { m_stemSameas = stemSameas; } ///@} + + /** + * See DrawingInterface::GetAdditionalBeamCount + */ + std::pair GetAdditionalBeamCount() const override; + //----------// // Functors // diff --git a/include/vrv/drawinginterface.h b/include/vrv/drawinginterface.h index 7d343fdf7b5..ee2bb913d06 100644 --- a/include/vrv/drawinginterface.h +++ b/include/vrv/drawinginterface.h @@ -132,6 +132,16 @@ class BeamDrawingInterface : public ObjectListInterface { */ void ClearCoords(); + /** + * Helper to find number of additional beams. Return { additional beams above main beam, additional beams below } + */ + virtual std::pair GetAdditionalBeamCount() const { return { 0, 0 }; } + + /** + * Helper to get number of beams represented by attributes @beam and @beam.float + */ + virtual std::pair GetFloatingBeamCount() const { return { 0, 0 }; } + protected: /** * Return the position of the element in the beam. diff --git a/include/vrv/ftrem.h b/include/vrv/ftrem.h index 8d165437e16..09afc584362 100644 --- a/include/vrv/ftrem.h +++ b/include/vrv/ftrem.h @@ -47,6 +47,16 @@ class FTrem : public LayerElement, public BeamDrawingInterface, public AttFTremV */ const ArrayOfBeamElementCoords *GetElementCoords(); + /** + * See DrawingInterface::GetAdditionalBeamCount + */ + std::pair GetAdditionalBeamCount() const override; + + /** + * See DrawingInterface::GetFloatingBeamCount + */ + std::pair GetFloatingBeamCount() const override; + //----------// // Functors // //----------// diff --git a/src/beam.cpp b/src/beam.cpp index d0c3d544d19..072660c830d 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -20,7 +20,6 @@ #include "editorial.h" #include "elementpart.h" #include "functorparams.h" -#include "ftrem.h" #include "gracegrp.h" #include "layer.h" #include "measure.h" @@ -229,10 +228,10 @@ void BeamSegment::CalcBeam( stemOffset = (coord->m_dur - DUR_8) * beamInterface->m_beamWidth; } // handle cross-staff fTrem cases - if (FTrem *fTrem = dynamic_cast(beamInterface); - fTrem && (coord->GetStemDir() == STEMDIRECTION_down)) { - int beamsCount = std::max(fTrem->GetBeams(), fTrem->GetBeamsFloat()); - if (!fTrem->HasBeamsFloat()) beamsCount--; + const auto [beams, beamsFloat] = beamInterface->GetFloatingBeamCount(); + if ((coord->GetStemDir() == STEMDIRECTION_down) && ((beams > 0) || (beamsFloat > 0))) { + int beamsCount = std::max(beams, beamsFloat); + if (beamsFloat <= 0) beamsCount--; stemOffset = beamsCount * beamInterface->m_beamWidth; } @@ -298,32 +297,13 @@ bool BeamSegment::DoesBeamOverlap(int staffTop, int topOffset, int staffBottom, return (overlapping != m_beamElementCoordRefs.end()); } -std::pair BeamSegment::GetAdditionalBeamCount(BeamDrawingInterface *beamInterface) -{ - // In case we're dealing with fTrem - take @beams attribute into consideration - if (FTrem *fTrem = dynamic_cast(beamInterface); fTrem) { - return { fTrem->GetBeams(), 0 }; - } - - int topShortestDur = DUR_8; - int bottomShortestDur = DUR_8; - std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), [&](BeamElementCoord *coord) { - if (coord->m_partialFlagPlace == BEAMPLACE_above) { - topShortestDur = std::max(topShortestDur, coord->m_dur); - } - else if (coord->m_partialFlagPlace == BEAMPLACE_below) { - bottomShortestDur = std::max(bottomShortestDur, coord->m_dur); - } - }); - - return { topShortestDur - DUR_8, bottomShortestDur - DUR_8 }; -} - bool BeamSegment::NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface) { const int unit = doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); - const auto [topBeams, bottomBeams] = this->GetAdditionalBeamCount(beamInterface); - const int topOffset = topBeams * beamInterface->m_beamWidth + unit / 2; + const auto [topBeams, bottomBeams] = beamInterface->GetAdditionalBeamCount(); + double multiplier = 1; + if (Object *obj = dynamic_cast(beamInterface); obj && obj->Is(FTREM)) multiplier = 0.5; + const int topOffset = multiplier * topBeams * beamInterface->m_beamWidth + unit / 2; const int bottomOffset = bottomBeams * beamInterface->m_beamWidth + unit / 2; // find top and bottom of the staff @@ -838,7 +818,7 @@ void BeamSegment::CalcMixedBeamStem(BeamDrawingInterface *beamInterface, int ste const int lowestPoint = (belowMin != VRV_UNSET) ? belowMin : aboveMin; // This helps with general beams but breaks trems - const auto [up, down] = this->GetAdditionalBeamCount(beamInterface); + const auto [up, down] = beamInterface->GetAdditionalBeamCount(); // Calculate midpoint for the beam, taking into account highest and lowest points, as well as number of additional // beams above and below main beam. Start position of the beam is then further adjusted based on the step size to @@ -1796,6 +1776,22 @@ int Beam::CalcLayerOverlap(Doc *doc, Object *beam, int directionBias, int y1, in return overlap; } +std::pair Beam::GetAdditionalBeamCount() const +{ + int topShortestDur = DUR_8; + int bottomShortestDur = DUR_8; + std::for_each(m_beamElementCoords.begin(), m_beamElementCoords.end(), [&](BeamElementCoord *coord) { + if (coord->m_partialFlagPlace == BEAMPLACE_above) { + topShortestDur = std::max(topShortestDur, coord->m_dur); + } + else if (coord->m_partialFlagPlace == BEAMPLACE_below) { + bottomShortestDur = std::max(bottomShortestDur, coord->m_dur); + } + }); + + return { topShortestDur - DUR_8, bottomShortestDur - DUR_8 }; +} + //---------------------------------------------------------------------------- // Functors methods //---------------------------------------------------------------------------- diff --git a/src/ftrem.cpp b/src/ftrem.cpp index 994490d82ee..12a2a35dd1f 100644 --- a/src/ftrem.cpp +++ b/src/ftrem.cpp @@ -107,6 +107,16 @@ void FTrem::FilterList(ArrayOfObjects *childList) this->InitCue(false); } +std::pair FTrem::GetAdditionalBeamCount() const +{ + return { std::max(this->GetBeams(), this->GetBeamsFloat()), 0 }; +} + +std::pair FTrem::GetFloatingBeamCount() const +{ + return { this->GetBeams(), this->GetBeamsFloat() }; +} + //---------------------------------------------------------------------------- // Functors methods //---------------------------------------------------------------------------- From 4304e8b2db2efe6bad00768e73a422d03d8e7fa5 Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 16 Dec 2021 18:33:07 +0200 Subject: [PATCH 207/403] Formatting --- src/beam.cpp | 21 ++++++++++----------- src/layerelement.cpp | 3 +-- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/beam.cpp b/src/beam.cpp index 072660c830d..270de29f02f 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -323,7 +323,7 @@ bool BeamSegment::NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterfa if (!this->DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset, beamInterface->m_crossStaffContent)) { return false; } - + if (!beamInterface->m_crossStaffContent) { // Calculate midpoint for the beam with mixed placement int min = m_beamElementCoordRefs.at(0)->m_element->GetDrawingY(); @@ -589,7 +589,6 @@ bool BeamSegment::CalcBeamSlope( m_beamSlope = BoundingBox::CalcSlope(Point(m_firstNoteOrChord->m_x, m_firstNoteOrChord->m_yBeam), Point(m_lastNoteOrChord->m_x, m_lastNoteOrChord->m_yBeam)); - int noteStep = 0; double noteSlope = 0.0; if (m_firstNoteOrChord->m_closestNote && m_lastNoteOrChord->m_closestNote) { @@ -776,10 +775,10 @@ bool BeamSegment::CalcBeamSlope( else if (place == BEAMPLACE_mixed) { if (step <= unit) { step = 0; - } + } else if (step > unit * 2) { step = unit * 2; - } + } this->CalcMixedBeamStem(beamInterface, step); } @@ -797,12 +796,12 @@ bool BeamSegment::CalcBeamSlope( return true; } - void BeamSegment::CalcMixedBeamStem(BeamDrawingInterface *beamInterface, int step) { // In cases, when both first and last notes/chords of the beam have same relative places (i.e. they have same stem // direction and/or same staff), - we don't need additional calculations - if ((m_firstNoteOrChord->m_beamRelativePlace == m_lastNoteOrChord->m_beamRelativePlace) && (!beamInterface->m_crossStaffContent)) { + if ((m_firstNoteOrChord->m_beamRelativePlace == m_lastNoteOrChord->m_beamRelativePlace) + && (!beamInterface->m_crossStaffContent)) { if (m_beamSlope < 0.0) { m_firstNoteOrChord->m_yBeam = m_lastNoteOrChord->m_yBeam + step; } @@ -1194,8 +1193,7 @@ std::pair BeamSegment::CalcBeamRelativeMinMax(data_BEAMPLACE place) co int lowestPoint = VRV_UNSET; std::for_each(m_beamElementCoordRefs.begin(), m_beamElementCoordRefs.end(), [&](BeamElementCoord *coord) { if (coord->m_beamRelativePlace == place) { - if ((highestPoint == VRV_UNSET) || (coord->m_yBeam > highestPoint)) - highestPoint = coord->m_yBeam; + if ((highestPoint == VRV_UNSET) || (coord->m_yBeam > highestPoint)) highestPoint = coord->m_yBeam; if ((lowestPoint == VRV_UNSET) || (coord->m_yBeam < lowestPoint)) { lowestPoint = coord->m_yBeam; } @@ -1205,8 +1203,9 @@ std::pair BeamSegment::CalcBeamRelativeMinMax(data_BEAMPLACE place) co return { highestPoint, lowestPoint }; } -void BeamSegment::CalcHorizontalBeam(Doc *doc, Staff *staff, BeamDrawingInterface* beamInterface) { - +void BeamSegment::CalcHorizontalBeam(Doc *doc, Staff *staff, BeamDrawingInterface *beamInterface) +{ + if (beamInterface->m_drawingPlace == BEAMPLACE_mixed) { this->CalcMixedBeamStem(beamInterface, 0); } @@ -1776,7 +1775,7 @@ int Beam::CalcLayerOverlap(Doc *doc, Object *beam, int directionBias, int y1, in return overlap; } -std::pair Beam::GetAdditionalBeamCount() const +std::pair Beam::GetAdditionalBeamCount() const { int topShortestDur = DUR_8; int bottomShortestDur = DUR_8; diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 86b4d810825..86bffc024e6 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -313,8 +313,7 @@ void LayerElement::GetOverflowStaffAlignments(StaffAlignment *&above, StaffAlign } } -template -void LayerElement::GetBeamOverflow(StaffAlignment *&above, StaffAlignment *&below) +template void LayerElement::GetBeamOverflow(StaffAlignment *&above, StaffAlignment *&below) { if (!this->Is({ BEAM, FTREM })) return; From 47aa0768494b55cf98334f3505c329f85426eebf Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 21 Dec 2021 14:29:41 +0200 Subject: [PATCH 208/403] Minor fix --- src/layerelement.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 86bffc024e6..2efeddcb82a 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -300,7 +300,7 @@ void LayerElement::GetOverflowStaffAlignments(StaffAlignment *&above, StaffAlign this->GetBeamChildOverflow(above, below, beam); } else if (this->GetFirstAncestor(FTREM)) { - FTrem *fTrem = vrv_cast(this->GetFirstAncestor(BEAM)); + FTrem *fTrem = vrv_cast(this->GetFirstAncestor(FTREM)); this->GetBeamChildOverflow(above, below, fTrem); } } From 4827c88ef63f277087160be04f3ea2d01f872b48 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 21 Dec 2021 15:26:54 +0200 Subject: [PATCH 209/403] Formatting --- src/drawinginterface.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index ef4ad2c71b9..abbde4c5cd5 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -21,11 +21,7 @@ namespace vrv { -enum class NoteDirection { - none, - upward, - downward -}; +enum class NoteDirection { none, upward, downward }; // helper for determining note direction NoteDirection GetNoteDirection(int leftNoteX, int rightNoteX) @@ -339,12 +335,13 @@ bool BeamDrawingInterface::IsHorizontal() return false; } -bool BeamDrawingInterface::IsHorizontal(const std::vector& items, const std::vector& directions) const +bool BeamDrawingInterface::IsHorizontal( + const std::vector &items, const std::vector &directions) const { // items and directions should be of the same size, otherwise something is wrong if (items.size() != directions.size()) return false; if ((items.size() == 3) && m_crossStaffContent) { - if ((directions.at(0) == directions.at(2)) && (directions.at(0) != directions.at(1))) return true; + if ((directions.at(0) == directions.at(2)) && (directions.at(0) != directions.at(1))) return true; } // calculate how many times stem direction is changed withing the beam From a4e2274289adbff65891525a3fa036085d9e798e Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 1 Feb 2022 11:42:45 +0100 Subject: [PATCH 210/403] Add dot in PAE mensural notation import. Fixes #2599 --- src/iopae.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/iopae.cpp b/src/iopae.cpp index 9d389b3742d..6be994ec4b5 100644 --- a/src/iopae.cpp +++ b/src/iopae.cpp @@ -2256,7 +2256,8 @@ enum { ERR_055_KEYSIG_CHANGE, ERR_056_TIMESIG_CHANGE, ERR_057_MENSUR_CHANGE, - ERR_058_FERMATA_MREST + ERR_058_FERMATA_MREST, + ERR_059_DOUBLE_DOTS_MENS }; // clang-format off @@ -2318,7 +2319,8 @@ const std::map PAEInput::s_errCodes{ { ERR_055_KEYSIG_CHANGE, "The key signature cannot be changed more than once in a measure." }, { ERR_056_TIMESIG_CHANGE, "The time signature cannot be changed more than once in a measure." }, { ERR_057_MENSUR_CHANGE, "The mensur sign cannot be changed more than once in a measure." }, - { ERR_058_FERMATA_MREST, "A fermata on measure with extra '%s' is invalid." } + { ERR_058_FERMATA_MREST, "A fermata on measure with extra '%s' is invalid." }, + { ERR_059_DOUBLE_DOTS_MENS, "Double-dotted notes are invalid with mensural notation." } }; // clang-format on @@ -4014,6 +4016,16 @@ bool PAEInput::ConvertDuration() note->SetStemLen(0); note->SetStemVisible(BOOLEAN_false); } + else if (m_isMensural) { + if (currentDur->second > 1) { + LogPAE(ERR_059_DOUBLE_DOTS_MENS, *token); + if (m_pedanticMode) return false; + } + Dot *dot = new Dot(); + // We need to insert it before the next one + ++token; + token = m_pae.insert(token, pae::Token(0, pae::UNKOWN_POS, dot)); + } else { interface->SetDots(currentDur->second); } From 5f3dda31ab9709117de8158c9a853e30c0df3a11 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 1 Feb 2022 12:10:19 +0100 Subject: [PATCH 211/403] Add PAE support for nested beam when within a grace group. Fixes #2601 --- src/iopae.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 10 deletions(-) diff --git a/src/iopae.cpp b/src/iopae.cpp index 6be994ec4b5..e3300bf89cd 100644 --- a/src/iopae.cpp +++ b/src/iopae.cpp @@ -3670,6 +3670,8 @@ bool PAEInput::ConvertChord() bool PAEInput::ConvertBeam() { Beam *beam = NULL; + Beam *graceBeam = NULL; + bool withinGrace = false; // Here we need an iterator because we might have to add a missing closing tag std::list::iterator token = m_pae.begin(); @@ -3688,13 +3690,29 @@ bool PAEInput::ConvertBeam() continue; } if (beam) { - LogPAE(ERR_023_BEAM_NESTED, *token); - if (m_pedanticMode) return false; - ++token; - continue; + // Nested beams only allowed if the second one is in a grace group + if (!withinGrace) { + LogPAE(ERR_023_BEAM_NESTED, *token); + if (m_pedanticMode) return false; + ++token; + continue; + } + // No nested beams within a grace group + else if (graceBeam) { + LogPAE(ERR_023_BEAM_NESTED, *token); + if (m_pedanticMode) return false; + ++token; + continue; + } + // Create a grace beam + graceBeam = new Beam(); + token->m_object = graceBeam; + } + else { + // Create a beam + beam = new Beam(); + token->m_object = beam; } - beam = new Beam(); - token->m_object = beam; } else if (token->m_char == '}') { token->m_char = 0; @@ -3703,17 +3721,40 @@ bool PAEInput::ConvertBeam() ++token; continue; } - if (!beam) { + // Closing while no beam or grace beam have been open + if (!beam && !graceBeam) { LogPAE(ERR_024_BEAM_CLOSING, *token); if (m_pedanticMode) return false; ++token; continue; } - token->m_object = beam; - token->m_char = pae::CONTAINER_END; - beam = NULL; + if (graceBeam) { + token->m_object = graceBeam; + token->m_char = pae::CONTAINER_END; + graceBeam = NULL; + } + else { + token->m_object = beam; + token->m_char = pae::CONTAINER_END; + beam = NULL; + } } + // Flag the beginning of a grace group + else if (token->m_char == 'Q') { + withinGrace = true; + } + // Flag the end + else if (token->m_char == 'r') { + withinGrace = false; + } + // Close beams left open else if (token->IsEnd() || token->Is(MEASURE)) { + if (graceBeam) { + LogPAE(ERR_025_BEAM_OPEN, *token); + if (m_pedanticMode) return false; + token = m_pae.insert(token, pae::Token(pae::CONTAINER_END, pae::UNKOWN_POS, graceBeam)); + graceBeam = NULL; + } if (beam) { LogPAE(ERR_025_BEAM_OPEN, *token); if (m_pedanticMode) return false; From 25bc9af5b5768f2b5585290554987e0a2487f646 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 1 Feb 2022 13:17:30 +0100 Subject: [PATCH 212/403] Set not duration for PAE pseudo neumatic notation --- src/iopae.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/iopae.cpp b/src/iopae.cpp index e3300bf89cd..ea07212f3a5 100644 --- a/src/iopae.cpp +++ b/src/iopae.cpp @@ -4053,9 +4053,7 @@ bool PAEInput::ConvertDuration() if (interface->GetDur() == DURATION_128 && token->Is(NOTE)) { Note *note = vrv_cast(token->m_object); assert(note); - note->SetDur(DURATION_4); - note->SetStemLen(0); - note->SetStemVisible(BOOLEAN_false); + note->SetDur(DURATION_NONE); } else if (m_isMensural) { if (currentDur->second > 1) { From 8d7aadb370d6f2b63d13120f022a7401e7d8da00 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 1 Feb 2022 13:50:52 +0100 Subject: [PATCH 213/403] Add missing "rest" in error message --- src/iopae.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iopae.cpp b/src/iopae.cpp index ea07212f3a5..72dbfaefa2d 100644 --- a/src/iopae.cpp +++ b/src/iopae.cpp @@ -2319,7 +2319,7 @@ const std::map PAEInput::s_errCodes{ { ERR_055_KEYSIG_CHANGE, "The key signature cannot be changed more than once in a measure." }, { ERR_056_TIMESIG_CHANGE, "The time signature cannot be changed more than once in a measure." }, { ERR_057_MENSUR_CHANGE, "The mensur sign cannot be changed more than once in a measure." }, - { ERR_058_FERMATA_MREST, "A fermata on measure with extra '%s' is invalid." }, + { ERR_058_FERMATA_MREST, "A fermata on measure rest with extra '%s' is invalid." }, { ERR_059_DOUBLE_DOTS_MENS, "Double-dotted notes are invalid with mensural notation." } }; // clang-format on From 1e3eb8b269dc4c661406db1ad56096a4d611b021 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 1 Feb 2022 19:48:23 +0200 Subject: [PATCH 214/403] Refactor code for splitting tunes in ABC importer - changed code for splitting tunes into mdivs - clened up code for parcing ABC, added a couple of helper functions --- include/vrv/ioabc.h | 7 +- src/ioabc.cpp | 238 +++++++++++++++++++++----------------------- 2 files changed, 118 insertions(+), 127 deletions(-) diff --git a/include/vrv/ioabc.h b/include/vrv/ioabc.h index 19e738e5283..d8877cf3a09 100644 --- a/include/vrv/ioabc.h +++ b/include/vrv/ioabc.h @@ -31,6 +31,7 @@ class Mdiv; class Measure; class MeterSig; class Note; +class Score; class Section; class Slur; class Staff; @@ -53,7 +54,7 @@ class ABCInput : public Input { private: // function declarations: - void parseABC(std::istream &infile); + void ParseABC(std::istream &infile); // parsing functions int SetBarLine(const std::string &musicCode, int index); @@ -86,9 +87,11 @@ class ABCInput : public Input { void AddOrnaments(LayerElement *element); // additional functions - void PrintInformationFields(); + void PrintInformationFields(Score *score); void CreateHeader(); void CreateWorkEntry(); + void FlushControlElements(Score *score, Section *section); + void InitScoreAndSection(Score *&score, Section *§ion); #endif // NO_ABC_SUPPORT diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 52d65c43554..264065de85c 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -90,7 +90,7 @@ ABCInput::~ABCInput() {} bool ABCInput::Import(const std::string &abc) { std::istringstream in_stream(abc); - parseABC(in_stream); + ParseABC(in_stream); return true; } @@ -99,143 +99,57 @@ bool ABCInput::Import(const std::string &abc) // parseABC -- // -void ABCInput::parseABC(std::istream &infile) +void ABCInput::ParseABC(std::istream &infile) { // initialize doc m_doc->Reset(); m_doc->SetType(Raw); - // read file header - std::getline(infile, abcLine); - while (abcLine[0] != 'X') { - if (infile.eof()) { - LogError("ABC import: No tune found"); - exit(0); - } - if ((abcLine[0] == '%') && (abcLine[1] == '%')) - LogWarning("ABC import: Stylesheet directives are ignored"); - else if (abcLine[1] == ':') - readInformationField(abcLine[0], &abcLine[2]); + Score *score = NULL; + Section *section = NULL; + while (!infile.eof()) { std::getline(infile, abcLine); ++m_lineNum; - } - CreateHeader(); - - while (!infile.eof()) { - while (!(abcLine[0] == 'X' && abcLine[1] == ':') && !infile.eof()) { - std::getline(infile, abcLine); - ++m_lineNum; + if (abcLine[0] == 'X') { + this->readInformationField('X', &abcLine[2]); + while (abcLine[0] != 'K' && !infile.eof()) { + std::getline(infile, abcLine); + ++m_lineNum; + this->readInformationField(abcLine[0], &abcLine[2]); + } + if (infile.eof()) break; + if (m_title.empty()) { + LogWarning("ABC import: Title field missing, creating empty title"); + m_title.push_back(std::make_pair("", 0)); + } + // add work entry to meiHead + this->CreateWorkEntry(); + + this->InitScoreAndSection(score, section); } - if (infile.eof()) break; - - // read tune header - readInformationField('X', &abcLine[2]); - while (abcLine[0] != 'K' && !infile.eof()) { - std::getline(infile, abcLine); - ++m_lineNum; - readInformationField(abcLine[0], &abcLine[2]); + else if (!m_mdiv || !score || !section) { + // if m_div is not initialized - we didn't read X element, so continue until we do + continue; } - if (infile.eof()) break; - if (m_title.empty()) { - LogWarning("ABC import: Title field missing, creating empty title"); - m_title.push_back(std::make_pair("", 0)); + if (std::string(abcLine).find_first_not_of(' ') == std::string::npos) { + // abc tunes are separated from each other by empty lines + this->FlushControlElements(score, section); + continue; } - // add work entry to meiHead - CreateWorkEntry(); - - // create score - assert(m_mdiv != NULL); - Score *score = new Score(); - if (!m_doc->HasCurrentScore() || !m_doc->GetCurrentScoreDef()->GetFirst(STAFFGRP)) { - m_mdiv->AddChild(score); - - // create page head - PrintInformationFields(); - StaffGrp *staffGrp = new StaffGrp(); - // create staff - StaffDef *staffDef = new StaffDef(); - staffDef->SetN(1); - staffDef->SetLines(m_stafflines); - staffDef->SetTransSemi(m_transpose); - if (m_clef) { - staffDef->AddChild(m_clef); - m_clef = NULL; - } - if (m_meter) { - staffDef->AddChild(m_meter); - m_meter = NULL; - } - staffGrp->AddChild(staffDef); - m_doc->GetCurrentScoreDef()->AddChild(staffGrp); - if (m_key) { - m_doc->GetCurrentScoreDef()->AddChild(m_key); - m_key = NULL; - } - } - - // create section - Section *section = new Section(); - // start with a new page - if (m_linebreak != '\0') { - Pb *pb = new Pb(); - pb->SetUuid(StringFormat("abcLine%02d", m_lineNum + 1)); - section->AddChild(pb); - } - // calculate default unit note length - if (m_durDefault == DURATION_NONE) { - CalcUnitNoteLength(); - } - m_doc->GetCurrentScoreDef()->SetDurDefault(m_durDefault); - m_durDefault = DURATION_NONE; - - // read music code - m_layer = new Layer(); - m_layer->SetN(1); - while (!infile.eof()) { - std::getline(infile, abcLine); - ++m_lineNum; - if (std::string(abcLine).find_first_not_of(' ') == std::string::npos) { - // abc tunes are separated from each other by empty lines - break; - } - else if (abcLine[0] == '%') - // skipping comments and stylesheet directives - continue; - else if (abcLine[1] == ':' && abcLine[0] != '|') { - if (abcLine[0] != 'K') { - readInformationField(abcLine[0], &abcLine[2]); - } - else { - LogWarning("ABC import: Key changes not supported", abcLine[0]); - } + else if (abcLine[0] == '%') + // skipping comments and stylesheet directives + continue; + else if (abcLine[1] == ':' && abcLine[0] != '|') { + if (abcLine[0] != 'K') { + this->readInformationField(abcLine[0], &abcLine[2]); } else { - readMusicCode(abcLine, section); + LogWarning("ABC import: Key changes not supported", abcLine[0]); } } - - // add ornaments, ties, and slur - Layer *layer = NULL; - Measure *measure = NULL; - for (auto iter = m_controlElements.begin(); iter != m_controlElements.end(); ++iter) { - if (!measure || (layer && layer->GetUuid() != iter->first)) { - layer = dynamic_cast(section->FindDescendantByUuid(iter->first)); - } - if (!layer) { - LogWarning("ABC import: Element '%s' could not be assigned to layer '%s'", - iter->second->GetClassName().c_str(), iter->first.c_str()); - delete iter->second; - continue; - } - measure = vrv_cast(layer->GetFirstAncestor(MEASURE)); - assert(measure); - measure->AddChild(iter->second); + else { + this->readMusicCode(abcLine, section); } - - score->AddChild(section); - - // only append first tune in file - if (!score->GetFirstAncestor(MDIV)) delete score; } m_controlElements.clear(); @@ -817,7 +731,7 @@ void ABCInput::parseReferenceNumber(const std::string &referenceNumberString) m_title.clear(); } -void ABCInput::PrintInformationFields() +void ABCInput::PrintInformationFields(Score *score) { PgHead *pgHead = new PgHead(); for (auto it = m_title.begin(); it != m_title.end(); ++it) { @@ -857,7 +771,7 @@ void ABCInput::PrintInformationFields() originRend->AddChild(origin); pgHead->AddChild(originRend); } - m_doc->GetCurrentScoreDef()->AddChild(pgHead); + score->GetScoreDef()->AddChild(pgHead); } void ABCInput::CreateHeader() @@ -959,6 +873,80 @@ void ABCInput::CreateWorkEntry() } } +void ABCInput::FlushControlElements(Score *score, Section *section) +{ + Layer *layer = NULL; + Measure *measure = NULL; + for (auto iter = m_controlElements.begin(); iter != m_controlElements.end(); ++iter) { + if (!measure || (layer && layer->GetUuid() != iter->first)) { + layer = dynamic_cast(section->FindDescendantByUuid(iter->first)); + } + if (!layer) { + LogWarning("ABC import: Element '%s' could not be assigned to layer '%s'", + iter->second->GetClassName().c_str(), iter->first.c_str()); + delete iter->second; + continue; + } + measure = vrv_cast(layer->GetFirstAncestor(MEASURE)); + assert(measure); + measure->AddChild(iter->second); + } + + score->AddChild(section); + m_controlElements.clear(); +} + + +void ABCInput::InitScoreAndSection(Score *&score, Section *§ion) +{ + // create score + assert(m_mdiv != NULL); + score = new Score(); + m_mdiv->AddChild(score); + + StaffGrp *staffGrp = new StaffGrp(); + // create staff + StaffDef *staffDef = new StaffDef(); + staffDef->SetN(1); + staffDef->SetLines(m_stafflines); + staffDef->SetTransSemi(m_transpose); + if (m_clef) { + staffDef->AddChild(m_clef); + m_clef = NULL; + } + if (m_meter) { + staffDef->AddChild(m_meter); + m_meter = NULL; + } + staffGrp->AddChild(staffDef); + score->GetScoreDef()->AddChild(staffGrp); + if (m_key) { + score->GetScoreDef()->AddChild(m_key); + m_key = NULL; + } + // create page head + this->PrintInformationFields(score); + + // create section + section = new Section(); + // start with a new page + if (m_linebreak != '\0') { + Pb *pb = new Pb(); + pb->SetUuid(StringFormat("abcLine%02d", m_lineNum + 1)); + section->AddChild(pb); + } + // calculate default unit note length + if (m_durDefault == DURATION_NONE) { + CalcUnitNoteLength(); + } + score->GetScoreDef()->SetDurDefault(m_durDefault); + m_durDefault = DURATION_NONE; + + // read music code + m_layer = new Layer(); + m_layer->SetN(1); +} + ////////////////////////////// // // readInformationField -- From 1dc266fc29cf811a6cc6e053c141ecd9f8e6cdd6 Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 2 Feb 2022 11:07:18 +0200 Subject: [PATCH 215/403] Change method and parameter names --- include/vrv/ioabc.h | 2 +- src/ioabc.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/vrv/ioabc.h b/include/vrv/ioabc.h index 89f78e66ec0..be0f5806881 100644 --- a/include/vrv/ioabc.h +++ b/include/vrv/ioabc.h @@ -60,10 +60,10 @@ class ABCInput : public Input { void CalcUnitNoteLength(); void AddAnnot(const std::string &remark); void AddLayerElement(); - int AddTuplet(const std::string &musicCode, int i); void AddTie(); void StartSlur(); void EndSlur(); + int ParseTuplet(const std::string &musicCode, int index); // parse information fields void parseInstruction(const std::string &keyString); // I: diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 4c4722e1578..328fd4b958c 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -340,11 +340,11 @@ void ABCInput::AddLayerElement() m_noteStack.clear(); } -int ABCInput::AddTuplet(const std::string &musicCode, int i) +int ABCInput::ParseTuplet(const std::string &musicCode, int index) { constexpr std::string_view tupletElements = "(:0123456789 "; - const size_t tupletEnd = musicCode.find_first_not_of(tupletElements, ++i); - const std::string tupletStr = musicCode.substr(i, tupletEnd - i); + const size_t tupletEnd = musicCode.find_first_not_of(tupletElements, ++index); + const std::string tupletStr = musicCode.substr(index, tupletEnd - index); Tuplet *tuplet = new Tuplet(); size_t separator = tupletStr.find_first_of(":"); @@ -1138,7 +1138,7 @@ void ABCInput::readMusicCode(const std::string &musicCode, Section *section) // tuplets else if ((i + 2 < (int)musicCode.length()) && musicCode.at(i) == '(' && isdigit(musicCode.at(i + 1))) { - i = AddTuplet(musicCode, i); + i = ParseTuplet(musicCode, i); } // slurs and ties From de868cfc90aafde774cf9f0c5750ac5d8452c656 Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 2 Feb 2022 11:10:49 +0200 Subject: [PATCH 216/403] Formatting --- include/vrv/ioabc.h | 5 +---- src/ioabc.cpp | 4 ++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/include/vrv/ioabc.h b/include/vrv/ioabc.h index be0f5806881..506ec42fddc 100644 --- a/include/vrv/ioabc.h +++ b/include/vrv/ioabc.h @@ -95,10 +95,7 @@ class ABCInput : public Input { public: // private: - enum class ElementType { - Default, - Tuplet - }; + enum class ElementType { Default, Tuplet }; std::string m_filename; Mdiv *m_mdiv = NULL; diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 328fd4b958c..18aeaff271b 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -305,7 +305,7 @@ void ABCInput::CalcUnitNoteLength() } } -void ABCInput::AddLayerElement() +void ABCInput::AddLayerElement() { // exit if there is nothing to add if (!m_noteStack.size()) return; @@ -346,7 +346,7 @@ int ABCInput::ParseTuplet(const std::string &musicCode, int index) const size_t tupletEnd = musicCode.find_first_not_of(tupletElements, ++index); const std::string tupletStr = musicCode.substr(index, tupletEnd - index); - Tuplet *tuplet = new Tuplet(); + Tuplet *tuplet = new Tuplet(); size_t separator = tupletStr.find_first_of(":"); // Get tuplet number first 9:_:_ int tupletNum = 0; From fd53145ecf667b1eb5a58c029ce7dcb5d50dc36d Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Wed, 2 Feb 2022 11:11:21 +0100 Subject: [PATCH 217/403] allow more than 6 accidentals in keySig --- src/att.cpp | 4 ++-- src/keysig.cpp | 12 ++++++------ src/object.cpp | 2 +- src/transposition.cpp | 28 ++++++++++++++-------------- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/att.cpp b/src/att.cpp index 0f38151f60c..f790405558b 100644 --- a/src/att.cpp +++ b/src/att.cpp @@ -312,7 +312,7 @@ data_KEYSIGNATURE Att::StrToKeysignature(const std::string &value, bool logWarni int alterationNumber = 0; data_ACCIDENTAL_WRITTEN alterationType = ACCIDENTAL_WRITTEN_NONE; - std::regex test("mixed|0|[1-7][s|f]"); + std::regex test("mixed|0|([1-9]|1[0-2])[f|s]"); if (!std::regex_match(value, test)) { if (logWarning) LogWarning("Unsupported data.KEYSIGNATURE '%s'", value.c_str()); return { -1, ACCIDENTAL_WRITTEN_NONE }; @@ -322,7 +322,7 @@ data_KEYSIGNATURE Att::StrToKeysignature(const std::string &value, bool logWarni return { VRV_UNSET, ACCIDENTAL_WRITTEN_NONE }; } else if (value != "0") { - alterationNumber = atoi(value.substr(0, 1).c_str()); + alterationNumber = std::stoi(value); alterationType = (value.at(1) == 's') ? ACCIDENTAL_WRITTEN_s : ACCIDENTAL_WRITTEN_f; } else { diff --git a/src/keysig.cpp b/src/keysig.cpp index 419c55eaecd..d933a4fee6f 100644 --- a/src/keysig.cpp +++ b/src/keysig.cpp @@ -179,7 +179,7 @@ void KeySig::FillMap(MapOfPitchAccid &mapOfPitchAccid) int i; data_ACCIDENTAL_WRITTEN accidType = this->GetAccidType(); - for (i = 0; i < this->GetAccidCount(); i++) { + for (i = 0; i < this->GetAccidCount(); ++i) { mapOfPitchAccid[KeySig::GetAccidPnameAt(accidType, i)] = accidType; } } @@ -200,17 +200,17 @@ std::wstring KeySig::GetKeyAccidStrAt(int pos, data_ACCIDENTAL_WRITTEN &accid, d return keyAccid->GetSymbolStr(); } - if (pos > 6) return symbolStr; + if (pos > 12) return symbolStr; int symb; accid = this->GetAccidType(); if (accid == ACCIDENTAL_WRITTEN_f) { - symb = SMUFL_E260_accidentalFlat; - pname = s_pnameForFlats[pos]; + symb = (pos < 7) ? SMUFL_E260_accidentalFlat : SMUFL_E264_accidentalDoubleFlat; + pname = s_pnameForFlats[pos % 7]; } else { - symb = SMUFL_E262_accidentalSharp; - pname = s_pnameForSharps[pos]; + symb = (pos < 7) ? SMUFL_E262_accidentalSharp : SMUFL_E263_accidentalDoubleSharp; + pname = s_pnameForSharps[pos % 7]; } symbolStr.push_back(symb); diff --git a/src/object.cpp b/src/object.cpp index 8fa9fddf9a9..15876428792 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -719,7 +719,7 @@ int Object::GetDescendantIndex(const Object *child, const ClassId classId, int d int i = 0; for (auto &object : objects) { if (child == object) return i; - i++; + ++i; } return -1; } diff --git a/src/transposition.cpp b/src/transposition.cpp index 98bc43b3940..280eedd18f7 100644 --- a/src/transposition.cpp +++ b/src/transposition.cpp @@ -316,12 +316,12 @@ std::ostream &operator<<(std::ostream &out, const TransPitch &pitch) default: out << "X"; } if (pitch.m_accid > 0) { - for (int i = 0; i < pitch.m_accid; i++) { + for (int i = 0; i < pitch.m_accid; ++i) { out << "#"; } } else if (pitch.m_accid < 0) { - for (int i = 0; i < abs(pitch.m_accid); i++) { + for (int i = 0; i < abs(pitch.m_accid); ++i) { out << "b"; } } @@ -693,7 +693,7 @@ bool Transposer::GetKeyTonic(const std::string &keyTonic, TransPitch &tonic) int pitch = 0; int accid = 0; int state = 0; - for (unsigned int i = 0; i < (unsigned int)keyTonic.size(); i++) { + for (unsigned int i = 0; i < (unsigned int)keyTonic.size(); ++i) { switch (state) { case 0: switch (keyTonic[i]) { @@ -760,7 +760,7 @@ int Transposer::GetInterval(const std::string &intervalName) std::string number; int state = 0; - for (int i = 0; i < (int)intervalName.size(); i++) { + for (int i = 0; i < (int)intervalName.size(); ++i) { switch (state) { case 0: // direction or quality expected switch (intervalName[i]) { @@ -1142,7 +1142,7 @@ TransPitch Transposer::IntegerPitchToTransPitch(int ipitch) // search from C upwards mindiff = chroma - m_diatonicMapping[0]; mini = 0; - for (int i = 1; i < (int)m_diatonicMapping.size(); i++) { + for (int i = 1; i < (int)m_diatonicMapping.size(); ++i) { int diff = chroma - m_diatonicMapping[i]; if (abs(diff) < abs(mindiff)) { mindiff = diff; @@ -1212,7 +1212,7 @@ std::string Transposer::GetIntervalName(int intervalClass) int mindiff = chroma; int mini = 0; - for (int i = 1; i < (int)m_diatonicMapping.size(); i++) { + for (int i = 1; i < (int)m_diatonicMapping.size(); ++i) { int diff = chroma - (m_diatonicMapping[i] - m_diatonicMapping[0]); if (abs(diff) < abs(mindiff)) { mindiff = diff; @@ -1329,12 +1329,12 @@ std::string Transposer::GetIntervalName(int intervalClass) if (quality.empty()) { if (augmented) { - for (int i = 0; i < augmented; i++) { + for (int i = 0; i < augmented; ++i) { quality += "A"; } } else if (diminished) { - for (int i = 0; i < diminished; i++) { + for (int i = 0; i < diminished; ++i) { quality += "d"; } } @@ -1391,7 +1391,7 @@ int Transposer::IntervalToCircleOfFifths(int transval) int p5 = this->PerfectFifthClass(); int p4 = this->PerfectFourthClass(); - for (int i = 1; i < m_base; i++) { + for (int i = 1; i < m_base; ++i) { if ((p5 * i) % m_base == transval) { return i; } @@ -1549,12 +1549,12 @@ std::string Transposer::DiatonicChromaticToIntervalName(int diatonic, int chroma output += "P"; } else if (chromatic > 0) { - for (int i = 0; i < chromatic; i++) { + for (int i = 0; i < chromatic; ++i) { output += "A"; } } else { - for (int i = 0; i < -chromatic; i++) { + for (int i = 0; i < -chromatic; ++i) { output += "d"; } } @@ -1676,12 +1676,12 @@ std::string Transposer::DiatonicChromaticToIntervalName(int diatonic, int chroma if (quality.empty()) { if (augmented) { - for (int i = 0; i < augmented; i++) { + for (int i = 0; i < augmented; ++i) { quality += "A"; } } else if (diminished) { - for (int i = 0; i < diminished; i++) { + for (int i = 0; i < diminished; ++i) { quality += "d"; } } @@ -1719,7 +1719,7 @@ void Transposer::IntervalToDiatonicChromatic(int &diatonic, int &chromatic, cons std::string number; int state = 0; - for (int i = 0; i < (int)intervalName.size(); i++) { + for (int i = 0; i < (int)intervalName.size(); ++i) { switch (state) { case 0: // direction or quality expected switch (intervalName[i]) { From 7f47ff3558551ea07c47c8b62a0d32a6f30f56b1 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Wed, 2 Feb 2022 11:25:29 +0100 Subject: [PATCH 218/403] Run PrepareMIDI once add comments --- include/vrv/functorparams.h | 7 +------ include/vrv/object.h | 2 ++ src/arpeg.cpp | 6 +++--- src/doc.cpp | 12 ++++++------ 4 files changed, 12 insertions(+), 15 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 66fad0bbd58..c06bdd1fe03 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -2031,12 +2031,7 @@ class PrepareLinkingParams : public FunctorParams { class PrepareMIDIParams : public FunctorParams { public: - PrepareMIDIParams() - { - m_transSemi = 0; - m_currentTempo = MIDI_TEMPO; - } - int m_transSemi; + PrepareMIDIParams() { m_currentTempo = MIDI_TEMPO; } double m_currentTempo; std::map m_deferredNotes; }; diff --git a/include/vrv/object.h b/include/vrv/object.h index 24da47c3050..eb4c6a656b1 100644 --- a/include/vrv/object.h +++ b/include/vrv/object.h @@ -1273,6 +1273,8 @@ class Object : public BoundingBox { /** * Prepare the MIDI export + * Captures information (i.e. from control elements) for MIDI interpretation + * This information is usually required beforehand in GenerateMIDI */ ///@{ virtual int PrepareMIDI(FunctorParams *) { return FUNCTOR_CONTINUE; } diff --git a/src/arpeg.cpp b/src/arpeg.cpp index 5a0605f4f1d..84d78b3eabb 100644 --- a/src/arpeg.cpp +++ b/src/arpeg.cpp @@ -260,9 +260,9 @@ int Arpeg::PrepareMIDI(FunctorParams *functorParams) std::set notes = this->GetNotes(); std::vector sortedNotes; std::copy(notes.begin(), notes.end(), std::back_inserter(sortedNotes)); - std::sort(sortedNotes.begin(), sortedNotes.end(), [params, playTopDown](Note *note1, Note *note2) { - const int pitch1 = note1->GetMIDIPitch(params->m_transSemi); - const int pitch2 = note2->GetMIDIPitch(params->m_transSemi); + std::sort(sortedNotes.begin(), sortedNotes.end(), [playTopDown](Note *note1, Note *note2) { + const int pitch1 = note1->GetMIDIPitch(); + const int pitch2 = note2->GetMIDIPitch(); return playTopDown ? (pitch1 > pitch2) : (pitch1 < pitch2); }); diff --git a/src/doc.cpp b/src/doc.cpp index 38464410398..97c4b24e8bc 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -310,6 +310,12 @@ void Doc::ExportMIDI(smf::MidiFile *midiFile) } midiFile->addTempo(0, 0, tempo); + // Capture information for MIDI generation, i.e. from control elements + Functor prepareMIDI(&Object::PrepareMIDI); + PrepareMIDIParams prepareMIDIParams; + prepareMIDIParams.m_currentTempo = tempo; + this->Process(&prepareMIDI, &prepareMIDIParams); + // We need to populate processing lists for processing the document by Layer (by Verse will not be used) PrepareProcessingListsParams prepareProcessingListsParams; // Alternate solution with StaffN_LayerN_VerseN_t (see also Verse::PrepareDrawing) @@ -383,12 +389,6 @@ void Doc::ExportMIDI(smf::MidiFile *midiFile) filters.push_back(&matchStaff); filters.push_back(&matchLayer); - Functor prepareMIDI(&Object::PrepareMIDI); - PrepareMIDIParams prepareMIDIParams; - prepareMIDIParams.m_transSemi = transSemi; - prepareMIDIParams.m_currentTempo = tempo; - this->Process(&prepareMIDI, &prepareMIDIParams, NULL, &filters); - Functor generateMIDI(&Object::GenerateMIDI); Functor generateMIDIEnd(&Object::GenerateMIDIEnd); GenerateMIDIParams generateMIDIParams(midiFile, &generateMIDI); From 9a8ca56cedb7b5011b1599bd0ca5897a0c0c13dc Mon Sep 17 00:00:00 2001 From: David Bauer Date: Wed, 2 Feb 2022 11:38:25 +0100 Subject: [PATCH 219/403] Adjust comment --- include/vrv/functorparams.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index c06bdd1fe03..5bdf7922a0a 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -2024,9 +2024,8 @@ class PrepareLinkingParams : public FunctorParams { //---------------------------------------------------------------------------- /** - * member 0: the semi tone transposition - * member 1: the current tempo - * member 2: deferred notes which start slightly later + * member 0: the current tempo + * member 1: deferred notes which start slightly later **/ class PrepareMIDIParams : public FunctorParams { From 7ce96c04e8af21184dc75e399174f7596d2b2511 Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 2 Feb 2022 14:53:47 +0200 Subject: [PATCH 220/403] Fix code to allow for beamed and unbeamed tuplets --- include/vrv/ioabc.h | 8 ++++++-- src/ioabc.cpp | 39 +++++++++++++++++++++++++-------------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/include/vrv/ioabc.h b/include/vrv/ioabc.h index 506ec42fddc..70887793116 100644 --- a/include/vrv/ioabc.h +++ b/include/vrv/ioabc.h @@ -96,6 +96,11 @@ class ABCInput : public Input { // private: enum class ElementType { Default, Tuplet }; + struct ContainerElement { + ElementType m_type = ElementType::Default; + LayerElement *m_element = NULL; + int m_count = 0; + }; std::string m_filename; Mdiv *m_mdiv = NULL; @@ -119,8 +124,7 @@ class ABCInput : public Input { int m_gracecount = 0; int m_stafflines = 5; int m_transpose = 0; - ElementType m_type = ElementType::Default; - std::pair m_containerPair = { ElementType::Default, NULL }; + ContainerElement m_containerElement; /* * ABC metadata stacks */ diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 18aeaff271b..c7235902ac1 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -311,24 +311,35 @@ void ABCInput::AddLayerElement() if (!m_noteStack.size()) return; // if just one note in the stack - add it do the layer directly if (m_noteStack.size() == 1) { - m_layer->AddChild(m_noteStack.back()); + if (m_containerElement.m_element && (ElementType::Tuplet == m_containerElement.m_type)) { + m_containerElement.m_element->AddChild(m_noteStack.back()); + if (!--m_containerElement.m_count) { + m_layer->AddChild(m_containerElement.m_element); + m_containerElement = {}; + } + } + else { + m_layer->AddChild(m_noteStack.back()); + } m_noteStack.clear(); + return; } // otherwise we can have beam or tuplet (for now) - LayerElement *element = NULL; - // if container pair key is set to Tuplet - proceed with it - if (m_containerPair.second && (ElementType::Tuplet == m_containerPair.first)) { - element = m_containerPair.second; - } - // otherwise default to it being beam - else { - element = new Beam(); - } + Beam *beam = new Beam(); // add stacked notes to the current element for (auto iter = m_noteStack.begin(); iter != m_noteStack.end(); ++iter) { - element->AddChild(*iter); + beam->AddChild(*iter); } - if (element->FindDescendantByType(NOTE)) { + if (beam->FindDescendantByType(NOTE)) { + LayerElement *element = NULL; + if (m_containerElement.m_element && (ElementType::Tuplet == m_containerElement.m_type)) { + element = m_containerElement.m_element; + element->AddChild(beam); + } + // otherwise default to it being beam + else { + element = beam; + } m_layer->AddChild(element); } else { @@ -336,7 +347,7 @@ void ABCInput::AddLayerElement() m_layer->AddChild(*iter); } } - m_containerPair = { ElementType::Default, NULL }; + m_containerElement = {}; m_noteStack.clear(); } @@ -384,7 +395,7 @@ int ABCInput::ParseTuplet(const std::string &musicCode, int index) // Ignore this for the time being tuplet->SetNum(tupletNum); tuplet->SetNumbase(tupletNumbase); - m_containerPair = { ElementType::Tuplet, tuplet }; + m_containerElement = { ElementType::Tuplet, tuplet, tupletNum }; // return index of the last element in tuplet, so that we point to the actual notes when incrementing 'i' return tupletEnd - 1; From 8fa002b8d2e584aec88d8ee61e4103d1ee2c6b80 Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 2 Feb 2022 17:06:20 +0200 Subject: [PATCH 221/403] Add data clean up --- src/ioabc.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/ioabc.cpp b/src/ioabc.cpp index c7235902ac1..50caf3b0662 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -347,6 +347,11 @@ void ABCInput::AddLayerElement() m_layer->AddChild(*iter); } } + // clean-up leftover data, if any + if (beam && !beam->GetChildCount()) delete beam; + if (m_containerElement.m_element && !m_containerElement.m_element->GetChildCount()) + delete m_containerElement.m_element; + m_containerElement = {}; m_noteStack.clear(); } From faf3f88f1e6de83f9461bb9c486583e6b23fe65c Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Wed, 2 Feb 2022 16:09:51 +0100 Subject: [PATCH 222/403] update supported.xsl --- fonts/supported.xsl | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/fonts/supported.xsl b/fonts/supported.xsl index c3a1348d818..7c46e2f37c1 100644 --- a/fonts/supported.xsl +++ b/fonts/supported.xsl @@ -113,15 +113,15 @@ - - - - - - - - - + + + + + + + + + From 83a245e414d922e5777f1a1c08560b4e51822e9d Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 17 Jan 2022 12:01:56 +0200 Subject: [PATCH 223/403] Use all of the glyphs inside of the font xml - adjusted code to parse all of the glyphs that are available - changed container for glyphs from map to unordered_map --- include/vrv/glyph.h | 14 ++++- include/vrv/vrv.h | 15 +++-- src/svgdevicecontext.cpp | 7 +-- src/vrv.cpp | 126 ++++++++++++++------------------------- 4 files changed, 69 insertions(+), 93 deletions(-) diff --git a/include/vrv/glyph.h b/include/vrv/glyph.h index d0205d28136..0d54a0919fa 100644 --- a/include/vrv/glyph.h +++ b/include/vrv/glyph.h @@ -50,14 +50,24 @@ class Glyph { */ void SetBoundingBox(double x, double y, double w, double h); - /** Get the units per EM */ + /** + * @name Setter and getter for the units per EM + */ + ///@{ int GetUnitsPerEm() const { return m_unitsPerEm; } + void SetUnitsPerEm(int units) { m_unitsPerEm = units; } + ///@} /** Get the path */ std::string GetPath() { return m_path; } - /** Get the code string */ + /** + * @name Setter and getter for the code string + */ + ///@{ std::string GetCodeStr() { return m_codeStr; } + void SetCodeStr(const std::string &codeStr) { m_codeStr = codeStr; } + ///@} /** * @name Setter and getter for the horizAdvX diff --git a/include/vrv/vrv.h b/include/vrv/vrv.h index 79f5c182199..66bd82a2e8b 100644 --- a/include/vrv/vrv.h +++ b/include/vrv/vrv.h @@ -13,6 +13,7 @@ #include #include #include +#include #include #ifndef _WIN32 @@ -135,8 +136,9 @@ bool Check(Object *object); class Resources { public: using StyleAttributes = std::pair; - using GlyphMap = std::map; - using GlyphTextMap = std::map; + using GlyphTable = std::unordered_map; + using GlyphNameTable = std::unordered_map; + using GlyphTextMap = std::map; //----------------// // Static methods // @@ -149,6 +151,8 @@ class Resources { /** Resource path */ static std::string GetPath() { return s_path; } static void SetPath(const std::string &path) { s_path = path; } + /** Font name */ + static std::string GetSmuflFontName() { return m_smuflFontName; } /** Init the SMufL music and text fonts */ static bool InitFonts(); /** Init the text font (bounding boxes and ASCII only) */ @@ -177,17 +181,18 @@ class Resources { /** The path to the resources directory (e.g., for the svg/ subdirectory with fonts as XML */ static thread_local std::string s_path; + /** Name of the font used for SMUFL glyphs*/ + static thread_local std::string m_smuflFontName; /** The loaded SMuFL font */ - static thread_local GlyphMap s_font; + static thread_local GlyphTable m_fontGlyphTable; /** A text font used for bounding box calculations */ static thread_local GlyphTextMap s_textFont; static thread_local StyleAttributes s_currentStyle; static const StyleAttributes k_defaultStyle; /** * A map of glyph name / code - * The map in generated by ./fonts/generate_all.sh into ./src/smufl.cpp */ - static const std::map s_smuflNames; + static thread_local GlyphNameTable m_glyphNameTable; }; //---------------------------------------------------------------------------- diff --git a/src/svgdevicecontext.cpp b/src/svgdevicecontext.cpp index 9d71f1bf6d1..c5715f3225a 100644 --- a/src/svgdevicecontext.cpp +++ b/src/svgdevicecontext.cpp @@ -127,7 +127,8 @@ void SvgDeviceContext::Commit(bool xml_declaration) std::set::const_iterator it; for (it = m_smuflGlyphs.begin(); it != m_smuflGlyphs.end(); ++it) { // load the XML file that contains it as a pugi::xml_document - std::ifstream source((*it).c_str()); + const std::string path = Resources::GetPath() + "/" + Resources::GetSmuflFontName() + "/" + *it + ".xml"; + std::ifstream source(path); sourceDoc.load(source); // copy all the nodes inside into the master document @@ -904,10 +905,8 @@ void SvgDeviceContext::DrawMusicText(const std::wstring &text, int x, int y, boo continue; } - std::string path = glyph->GetPath(); - // Add the glyph to the array for the - m_smuflGlyphs.insert(path); + m_smuflGlyphs.insert(glyph->GetCodeStr()); // Write the char in the SVG pugi::xml_node useChild = AppendChild("use"); diff --git a/src/vrv.cpp b/src/vrv.cpp index 78e1e1b4322..cdaeabd6abb 100644 --- a/src/vrv.cpp +++ b/src/vrv.cpp @@ -66,8 +66,10 @@ namespace vrv { //---------------------------------------------------------------------------- thread_local std::string Resources::s_path = "/usr/local/share/verovio"; +thread_local std::string Resources::m_smuflFontName = ""; thread_local Resources::GlyphTextMap Resources::s_textFont; -thread_local Resources::GlyphMap Resources::s_font; +thread_local Resources::GlyphTable Resources::m_fontGlyphTable; +thread_local Resources::GlyphNameTable Resources::m_glyphNameTable; thread_local Resources::StyleAttributes Resources::s_currentStyle; const Resources::StyleAttributes Resources::k_defaultStyle{ data_FONTWEIGHT::FONTWEIGHT_normal, data_FONTSTYLE::FONTSTYLE_normal }; @@ -84,11 +86,6 @@ bool Resources::InitFonts() // The Leipzig as the default font if (!LoadFont("Leipzig")) LogError("Leipzig font could not be loaded."); - if (s_font.size() < SMUFL_COUNT) { - LogError("Expected %d default SMuFL glyphs but could load only %d.", SMUFL_COUNT, s_font.size()); - return false; - } - struct TextFontInfo_type { const StyleAttributes m_style; const std::string m_fileName; @@ -122,21 +119,17 @@ bool Resources::SetFont(const std::string &fontName) Glyph *Resources::GetGlyph(wchar_t smuflCode) { - if (!s_font.count(smuflCode)) return NULL; - return &s_font[smuflCode]; + return m_fontGlyphTable.count(smuflCode) ? &m_fontGlyphTable.at(smuflCode) : NULL; } Glyph *Resources::GetGlyph(const std::string &smuflName) { - wchar_t code = GetGlyphCode(smuflName); - if (code == 0) return NULL; - return GetGlyph(code); + return m_glyphNameTable.count(smuflName) ? &m_fontGlyphTable.at(m_glyphNameTable.at(smuflName)) : NULL; } wchar_t Resources::GetGlyphCode(const std::string &smuflName) { - if (!s_smuflNames.count(smuflName)) return 0; - return s_smuflNames.at(smuflName); + return m_glyphNameTable.count(smuflName) ? m_glyphNameTable.at(smuflName) : 0; } void Resources::SelectTextFont(data_FONTWEIGHT fontWeight, data_FONTSTYLE fontStyle) @@ -158,88 +151,51 @@ void Resources::SelectTextFont(data_FONTWEIGHT fontWeight, data_FONTSTYLE fontSt Glyph *Resources::GetTextGlyph(wchar_t code) { - GlyphMap *currentMap = &s_textFont[s_textFont.count(s_currentStyle) != 0 ? s_currentStyle : k_defaultStyle]; + GlyphTable *currentTable = &s_textFont[s_textFont.count(s_currentStyle) != 0 ? s_currentStyle : k_defaultStyle]; - if (currentMap->count(code) == 0) { + if (currentTable->count(code) == 0) { return NULL; } - return ¤tMap->at(code); + return ¤tTable->at(code); } bool Resources::LoadFont(const std::string &fontName) { - ::DIR *dir; - dirent *pdir; - std::string dirname = Resources::GetPath() + "/" + fontName; - dir = opendir(dirname.c_str()); + // set font name + m_smuflFontName = fontName; - if (!dir) { - LogError("Font directory '%s' cannot be read", dirname.c_str()); - return false; - } - - // First loop through the fontName directory and load each glyph - // Since the filename starts with the Unicode code, it is used - // to assign the glyph to the corresponding position in m_fonts - while ((pdir = readdir(dir))) { - if (strstr(pdir->d_name, ".xml")) { - // E.g, : E053-gClef8va.xml => strtol extracts E053 as hex - wchar_t smuflCode = (wchar_t)strtol(pdir->d_name, NULL, 16); - if (smuflCode == 0) { - LogError("Invalid SMUFL code (0)"); - continue; - } - std::string codeStr = pdir->d_name; - codeStr = codeStr.substr(0, 4); - Glyph glyph(Resources::GetPath() + "/" + fontName + "/" + pdir->d_name, codeStr); - s_font[smuflCode] = glyph; - } - } - - closedir(dir); - - // Then load the bounding boxes (if bounding box file is provided) pugi::xml_document doc; - std::string filename = Resources::GetPath() + "/" + fontName + ".xml"; - pugi::xml_parse_result result = doc.load_file(filename.c_str()); - if (!result) { + const std::string filename = Resources::GetPath() + "/" + fontName + ".xml"; + pugi::xml_parse_result parseResult = doc.load_file(filename.c_str()); + if (!parseResult) { // File not found, default bounding boxes will be used LogMessage("Font loaded without bounding boxes"); - return true; + return false; } pugi::xml_node root = doc.first_child(); if (!root.attribute("units-per-em")) { LogWarning("No units-per-em attribute in bouding box file"); - return true; + return false; } - const int unitsPerEm = root.attribute("units-per-em").as_int(); - pugi::xml_node current; - for (current = root.child("g"); current; current = current.next_sibling("g")) { - Glyph *glyph = NULL; - if (current.attribute("c")) { - const wchar_t smuflCode = (wchar_t)strtol(current.attribute("c").value(), NULL, 16); - if (!s_font.count(smuflCode)) { - LogWarning("Glyph with code point U+%X not found.", smuflCode); - continue; - } - glyph = &s_font[smuflCode]; - if (glyph->GetUnitsPerEm() != unitsPerEm * 10) { - LogWarning("Glyph and bounding box units-per-em for code point U+%X miss-match (bounding box: %d)", - smuflCode, unitsPerEm); - continue; - } - float x = 0.0, y = 0.0, width = 0.0, height = 0.0; - // Not check for missing values... - if (current.attribute("x")) x = current.attribute("x").as_float(); - if (current.attribute("y")) y = current.attribute("y").as_float(); - if (current.attribute("w")) width = current.attribute("w").as_float(); - if (current.attribute("h")) height = current.attribute("h").as_float(); - glyph->SetBoundingBox(x, y, width, height); - if (current.attribute("h-a-x")) glyph->SetHorizAdvX(current.attribute("h-a-x").as_float()); - } - if (!glyph) continue; + const int unitsPerEm = atoi(root.attribute("units-per-em").value()); + + for (pugi::xml_node current = root.child("g"); current; current = current.next_sibling("g")) { + pugi::xml_attribute c_attribute = current.attribute("c"); + pugi::xml_attribute n_attribute = current.attribute("n"); + if (!c_attribute || !n_attribute) continue; + + Glyph glyph; + glyph.SetUnitsPerEm(unitsPerEm * 10); + glyph.SetCodeStr(c_attribute.value()); + float x = 0.0, y = 0.0, width = 0.0, height = 0.0; + if (current.attribute("x")) x = atof(current.attribute("x").value()); + if (current.attribute("y")) y = atof(current.attribute("y").value()); + if (current.attribute("w")) width = atof(current.attribute("w").value()); + if (current.attribute("h")) height = atof(current.attribute("h").value()); + glyph.SetBoundingBox(x, y, width, height); + if (current.attribute("h-a-x")) glyph.SetHorizAdvX(atof(current.attribute("h-a-x").value())); // load anchors pugi::xml_node anchor; @@ -247,9 +203,14 @@ bool Resources::LoadFont(const std::string &fontName) if (anchor.attribute("n")) { std::string name = std::string(anchor.attribute("n").value()); // No check for possible x and y missing attributes - not very safe. - glyph->SetAnchor(name, anchor.attribute("x").as_float(), anchor.attribute("y").as_float()); + + glyph.SetAnchor(name, atof(anchor.attribute("x").value()), atof(anchor.attribute("y").value())); } } + + wchar_t smuflCode = (wchar_t)strtol(c_attribute.value(), NULL, 16); + m_fontGlyphTable[smuflCode] = glyph; + m_glyphNameTable[n_attribute.value()] = smuflCode; } return true; @@ -276,9 +237,9 @@ bool Resources::InitTextFont(const std::string &fontName, const StyleAttributes const int unitsPerEm = root.attribute("units-per-em").as_int(); pugi::xml_node current; if (s_textFont.count(style) == 0) { - s_textFont[style] = GlyphMap{}; + s_textFont[style] = {}; } - GlyphMap ¤tMap = s_textFont.at(style); + GlyphTable ¤tTable = s_textFont.at(style); for (current = root.child("g"); current; current = current.next_sibling("g")) { if (current.attribute("c")) { wchar_t code = (wchar_t)strtol(current.attribute("c").value(), NULL, 16); @@ -292,11 +253,12 @@ bool Resources::InitTextFont(const std::string &fontName, const StyleAttributes if (current.attribute("w")) width = current.attribute("w").as_float(); if (current.attribute("h")) height = current.attribute("h").as_float(); glyph.SetBoundingBox(x, y, width, height); + if (current.attribute("h-a-x")) glyph.SetHorizAdvX(current.attribute("h-a-x").as_float()); - if (currentMap.count(code) > 0) { + if (currentTable.count(code) > 0) { LogDebug("Redefining %d with %s", code, fontName.c_str()); } - currentMap[code] = glyph; + currentTable[code] = glyph; } } return true; From b1a736f5cf30db783de1f0e322f43293e2e27b02 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 18 Jan 2022 12:23:40 +0200 Subject: [PATCH 224/403] Add method to limit range of parsed glyphs - added method to allow to parse input file (fontmetadata.json), to allow and specify which ranges of glyphs should be parsed from the font. If file is not found or empty, no limitation will be applied and all glyphs will be read --- include/vrv/glyph.h | 5 ----- include/vrv/vrv.h | 4 ++++ src/glyph.cpp | 3 --- src/vrv.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 54 insertions(+), 9 deletions(-) diff --git a/include/vrv/glyph.h b/include/vrv/glyph.h index 0d54a0919fa..780e8941932 100644 --- a/include/vrv/glyph.h +++ b/include/vrv/glyph.h @@ -58,9 +58,6 @@ class Glyph { void SetUnitsPerEm(int units) { m_unitsPerEm = units; } ///@} - /** Get the path */ - std::string GetPath() { return m_path; } - /** * @name Setter and getter for the code string */ @@ -107,8 +104,6 @@ class Glyph { int m_horizAdvX; /** Units per EM for the glyph */ int m_unitsPerEm; - /** Path to the file */ - std::string m_path; /** The Unicode code in hexa as string */ std::string m_codeStr; /** A map of the available anchors */ diff --git a/include/vrv/vrv.h b/include/vrv/vrv.h index 66bd82a2e8b..f8a306ee836 100644 --- a/include/vrv/vrv.h +++ b/include/vrv/vrv.h @@ -173,6 +173,10 @@ class Resources { private: static bool LoadFont(const std::string &fontName); + /** + * Returns ranges of the glyphs to be parsed + */ + static std::map GetGlyphRanges(); private: //----------------// diff --git a/src/glyph.cpp b/src/glyph.cpp index 190cc1cfc33..baad7aac223 100644 --- a/src/glyph.cpp +++ b/src/glyph.cpp @@ -34,7 +34,6 @@ Glyph::Glyph() m_height = 0; m_horizAdvX = 0; m_unitsPerEm = 20480; - m_path = "[unset]"; m_codeStr = "[unset]"; } @@ -46,7 +45,6 @@ Glyph::Glyph(std::string path, std::string codeStr) m_height = 0; m_horizAdvX = 0; m_unitsPerEm = 20480; - m_path = path; m_codeStr = codeStr; pugi::xml_document doc; @@ -82,7 +80,6 @@ Glyph::Glyph(int unitsPerEm) m_height = 0; m_horizAdvX = 0; m_unitsPerEm = unitsPerEm * 10; - m_path = "[unset]"; m_codeStr = "[unset]"; } diff --git a/src/vrv.cpp b/src/vrv.cpp index cdaeabd6abb..a5a0555eff1 100644 --- a/src/vrv.cpp +++ b/src/vrv.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #ifndef _WIN32 @@ -45,6 +46,7 @@ //---------------------------------------------------------------------------- #include "checked.h" +#include "jsonxx.h" #include "pugixml.hpp" #include "unchecked.h" @@ -132,6 +134,45 @@ wchar_t Resources::GetGlyphCode(const std::string &smuflName) return m_glyphNameTable.count(smuflName) ? m_glyphNameTable.at(smuflName) : 0; } +std::map Resources::GetGlyphRanges() +{ + constexpr std::string_view input = "fontmetadata.json"; + constexpr std::string_view glyphRanges = "glyphRanges"; + constexpr std::string_view rangeStart = "rangeStart"; + constexpr std::string_view rangeEnd = "rangeEnd"; + + jsonxx::Object content; + // Input is file path + std::ifstream in(Resources::GetPath() + "/" + input.data()); + if (!in.is_open()) { + return {}; + } + const bool parseResult = content.parse(in); + in.close(); + if (!parseResult) return {}; + + if (content.kv_map().empty() || !content.kv_map().count(glyphRanges.data()) + || !content.kv_map().at(glyphRanges.data())->is()) + return {}; + + const jsonxx::Array jsonRanges = content.kv_map().at(glyphRanges.data())->get(); + std::map result; + for (const auto element : jsonRanges.values()) { + if (!element->is()) continue; + + auto range = element->get().kv_map(); + if (!range.count(rangeStart.data()) || !range.at(rangeStart.data())->is()) continue; + if (!range.count(rangeEnd.data()) || !range.at(rangeEnd.data())->is()) continue; + + const wchar_t start = (wchar_t)strtol(range.at(rangeStart.data())->get().c_str(), NULL, 16); + const wchar_t end = (wchar_t)strtol(range.at(rangeEnd.data())->get().c_str(), NULL, 16); + + result[start] = end; + } + + return result; +} + void Resources::SelectTextFont(data_FONTWEIGHT fontWeight, data_FONTSTYLE fontStyle) { if (fontWeight == FONTWEIGHT_NONE) { @@ -181,11 +222,20 @@ bool Resources::LoadFont(const std::string &fontName) const int unitsPerEm = atoi(root.attribute("units-per-em").value()); + const std::map ranges = GetGlyphRanges(); + for (pugi::xml_node current = root.child("g"); current; current = current.next_sibling("g")) { pugi::xml_attribute c_attribute = current.attribute("c"); pugi::xml_attribute n_attribute = current.attribute("n"); if (!c_attribute || !n_attribute) continue; + const wchar_t smuflCode = (wchar_t)strtol(c_attribute.value(), NULL, 16); + const auto it + = std::find_if(ranges.begin(), ranges.end(), [smuflCode](const std::pair &keyValue) { + return (smuflCode >= keyValue.first) && (smuflCode <= keyValue.second); + }); + if (it == ranges.end()) continue; + Glyph glyph; glyph.SetUnitsPerEm(unitsPerEm * 10); glyph.SetCodeStr(c_attribute.value()); @@ -208,7 +258,6 @@ bool Resources::LoadFont(const std::string &fontName) } } - wchar_t smuflCode = (wchar_t)strtol(c_attribute.value(), NULL, 16); m_fontGlyphTable[smuflCode] = glyph; m_glyphNameTable[n_attribute.value()] = smuflCode; } From e889851a88c71724751948a8ba24d9c4cee2eb77 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 18 Jan 2022 12:51:01 +0200 Subject: [PATCH 225/403] Minor fix --- src/vrv.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/vrv.cpp b/src/vrv.cpp index a5a0555eff1..a9c6d7d6327 100644 --- a/src/vrv.cpp +++ b/src/vrv.cpp @@ -230,11 +230,13 @@ bool Resources::LoadFont(const std::string &fontName) if (!c_attribute || !n_attribute) continue; const wchar_t smuflCode = (wchar_t)strtol(c_attribute.value(), NULL, 16); - const auto it - = std::find_if(ranges.begin(), ranges.end(), [smuflCode](const std::pair &keyValue) { - return (smuflCode >= keyValue.first) && (smuflCode <= keyValue.second); - }); - if (it == ranges.end()) continue; + if (!ranges.empty()) { + const auto it + = std::find_if(ranges.begin(), ranges.end(), [smuflCode](const std::pair &keyValue) { + return (smuflCode >= keyValue.first) && (smuflCode <= keyValue.second); + }); + if (it == ranges.end()) continue; + } Glyph glyph; glyph.SetUnitsPerEm(unitsPerEm * 10); From 6ecc1dc872a0a0ec31e85049237083faa4b76991 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 18 Jan 2022 12:51:59 +0200 Subject: [PATCH 226/403] Add font ranges json file --- data/fontmetadata.json | 209 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 data/fontmetadata.json diff --git a/data/fontmetadata.json b/data/fontmetadata.json new file mode 100644 index 00000000000..5fc29d1920d --- /dev/null +++ b/data/fontmetadata.json @@ -0,0 +1,209 @@ +{ + "glyphRanges" : [ + { + "rangeName" : "Staff brackets and dividers", + "rangeStart" : "E000", + "rangeEnd" : "E004" + }, + { + "rangeName" : "Repeats", + "rangeStart" : "E043", + "rangeEnd" : "E04B" + }, + { + "rangeName" : "Clefs", + "rangeStart" : "E050", + "rangeEnd" : "E077" + }, + { + "rangeName" : "Time signatures", + "rangeStart" : "E080", + "rangeEnd" : "E095" + }, + { + "rangeName" : "Noteheads", + "rangeStart" : "E0A0", + "rangeEnd" : "E0FA" + }, + { + "rangeName" : "Slash noteheads", + "rangeStart" : "E101", + "rangeEnd" : "E103" + }, + { + "rangeName" : "Tremolos", + "rangeStart" : "E220", + "rangeEnd" : "E22A" + }, + { + "rangeName" : "Flags", + "rangeStart" : "E240", + "rangeEnd" : "E24F" + }, + { + "rangeName" : "Standard accidentals (12-EDO)", + "rangeStart" : "E260", + "rangeEnd" : "E26D" + }, + { + "rangeName" : "Gould arrow quartertone accidentals (24-EDO)", + "rangeStart" : "E270", + "rangeEnd" : "E275" + }, + { + "rangeName" : "Stein-Zimmermann accidentals (24-EDO)", + "rangeStart" : "E280", + "rangeEnd" : "E283" + }, + { + "rangeName" : "Arel-Ezgi-Uzdilek (AEU) accidentals", + "rangeStart" : "E440", + "rangeEnd" : "E447" + }, + { + "rangeName" : "Articulation", + "rangeStart" : "E4A0", + "rangeEnd" : "E4BD" + }, + { + "rangeName" : "Holds and pauses", + "rangeStart" : "E4C0", + "rangeEnd" : "E4CE" + }, + { + "rangeName" : "Rests", + "rangeStart" : "E4E0", + "rangeEnd" : "E4F6" + }, + { + "rangeName" : "Bar repeats", + "rangeStart" : "E500", + "rangeEnd" : "E505" + }, + { + "rangeName" : "Octaves", + "rangeStart" : "E510", + "rangeEnd" : "E51E" + }, + { + "rangeName" : "Dynamics", + "rangeStart" : "E520", + "rangeEnd" : "E53D" + }, + { + "rangeName" : "Common ornaments", + "rangeStart" : "E566", + "rangeEnd" : "E56F" + }, + { + "rangeName" : "Other baroque ornaments", + "rangeStart" : "E583", + "rangeEnd" : "E587" + }, + { + "rangeName" : "Combining strokes for trills and mordents", + "rangeStart" : "E59D", + "rangeEnd" : "E59E" + }, + { + "rangeName" : "Precomposed trills and mordents", + "rangeStart" : "E5B0", + "rangeEnd" : "E5C8" + }, + { + "rangeName" : "Brass techniques", + "rangeStart" : "E5E5", + "rangeEnd" : "E5E7" + }, + { + "rangeName" : "String techniques", + "rangeStart" : "E610", + "rangeEnd" : "E614" + }, + { + "rangeName" : "Plucked techniques", + "rangeStart" : "E630", + "rangeEnd" : "E638" + }, + { + "rangeName" : "Vocal techniques", + "rangeStart" : "E645", + "rangeEnd" : "E645" + }, + { + "rangeName" : "Keyboard techniques", + "rangeStart" : "E650", + "rangeEnd" : "E65A" + }, + { + "rangeName" : "Tuplets", + "rangeStart" : "E880", + "rangeEnd" : "E88A" + }, + { + "rangeName" : "Medieval and Renaissance clefs", + "rangeStart" : "E901", + "rangeEnd" : "E909" + }, + { + "rangeName" : "Medieval and Renaissance prolations", + "rangeStart" : "E910", + "rangeEnd" : "E925" + }, + { + "rangeName" : "Medieval and Renaissance noteheads and stems", + "rangeStart" : "E938", + "rangeEnd" : "E94C" + }, + { + "rangeName" : "Medieval and Renaissance plainchant single-note forms", + "rangeStart" : "E990", + "rangeEnd" : "E99F" + }, + { + "rangeName" : "Medieval and Renaissance plainchant multiple-note forms", + "rangeStart" : "E9B4", + "rangeEnd" : "E9BC" + }, + { + "rangeName" : "Medieval and Renaissance accidentals", + "rangeStart" : "E9E0", + "rangeEnd" : "E9E3" + }, + { + "rangeName" : "Medieval and Renaissance rests", + "rangeStart" : "E9F0", + "rangeEnd" : "E9F8" + }, + { + "rangeName" : "Medieval and Renaissance miscellany", + "rangeStart" : "EA02", + "rangeEnd" : "EA06" + }, + { + "rangeName" : "Multi-segment lines", + "rangeStart" : "EAA4", + "rangeEnd" : "EAAF" + }, + { + "rangeName" : "Renaissance lute tablature", + "rangeStart" : "EBA7", + "rangeEnd" : "EBAC" + }, + { + "rangeName" : "French and English Renaissance lute tablature", + "rangeStart" : "EBC0", + "rangeEnd" : "EBCC" + }, + { + "rangeName" : "Italian and Spanish Renaissance lute tablature", + "rangeStart" : "EBE0", + "rangeEnd" : "EBE9" + }, + { + "rangeName" : "Articulation supplement", + "rangeStart" : "ED40", + "rangeEnd" : "ED41" + } + ] +} \ No newline at end of file From 63eb0456588eeca859c9aba42bddadc96d46d766 Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 27 Jan 2022 11:28:51 +0200 Subject: [PATCH 227/403] Remove smufl.cpp and its generation - removed smufl.cpp file - removed generation of smufl.cpp - renamed fontmetadata.json to *.template, so it's not parsed automatically - fixed parts of the code to use as_float() instead of atof(*.value()) --- Verovio.xcodeproj/project.pbxproj | 10 - ...tadata.json => fontmetadata.json.template} | 0 fonts/generate-smufl-code.py | 16 +- src/smufl.cpp | 448 ------------------ src/vrv.cpp | 13 +- 5 files changed, 7 insertions(+), 480 deletions(-) rename data/{fontmetadata.json => fontmetadata.json.template} (100%) delete mode 100644 src/smufl.cpp diff --git a/Verovio.xcodeproj/project.pbxproj b/Verovio.xcodeproj/project.pbxproj index e905a8ea6d3..dfab23f16f6 100644 --- a/Verovio.xcodeproj/project.pbxproj +++ b/Verovio.xcodeproj/project.pbxproj @@ -414,10 +414,6 @@ 4D95D4F91D718D4A00B2B856 /* systemelement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D95D4F81D718D4A00B2B856 /* systemelement.cpp */; }; 4D95D4FC1D74551100B2B856 /* score.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D95D4FB1D74551100B2B856 /* score.cpp */; }; 4D983005192E959E00320037 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D983004192E959E00320037 /* main.cpp */; }; - 4D98CCDB25D26E3C00DC7A2C /* smufl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D98CCDA25D26E3C00DC7A2C /* smufl.cpp */; }; - 4D98CCDC25D26E3C00DC7A2C /* smufl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D98CCDA25D26E3C00DC7A2C /* smufl.cpp */; }; - 4D98CCE125D26E8F00DC7A2C /* smufl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D98CCDA25D26E3C00DC7A2C /* smufl.cpp */; }; - 4D98CCE625D26E8F00DC7A2C /* smufl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D98CCDA25D26E3C00DC7A2C /* smufl.cpp */; }; 4D9A9C17199F560200028D93 /* verse.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D9A9C16199F560200028D93 /* verse.h */; }; 4D9A9C19199F561200028D93 /* verse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D9A9C18199F561200028D93 /* verse.cpp */; }; 4D9A9C1A199F561200028D93 /* verse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D9A9C18199F561200028D93 /* verse.cpp */; }; @@ -1473,7 +1469,6 @@ 4D95D4FA1D74549700B2B856 /* score.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = score.h; path = include/vrv/score.h; sourceTree = ""; }; 4D95D4FB1D74551100B2B856 /* score.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = score.cpp; path = src/score.cpp; sourceTree = ""; }; 4D983004192E959E00320037 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = tools/main.cpp; sourceTree = SOURCE_ROOT; }; - 4D98CCDA25D26E3C00DC7A2C /* smufl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = smufl.cpp; path = src/smufl.cpp; sourceTree = ""; }; 4D9A9C16199F560200028D93 /* verse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = verse.h; path = include/vrv/verse.h; sourceTree = ""; }; 4D9A9C18199F561200028D93 /* verse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = verse.cpp; path = src/verse.cpp; sourceTree = ""; }; 4D9A9C1B199F576100028D93 /* syl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = syl.h; path = include/vrv/syl.h; sourceTree = ""; }; @@ -2216,7 +2211,6 @@ 4DA80D941A6940120089802D /* options.h */, E79ADDC626BD645B00527E4B /* runtimeclock.cpp */, E79ADDC326BD1AE900527E4B /* runtimeclock.h */, - 4D98CCDA25D26E3C00DC7A2C /* smufl.cpp */, 4D1D733B1A1D0390001E08F6 /* smufl.h */, 4DD7C0FB27A55CEA00B9C017 /* timemap.cpp */, 4DD7C0FE27A55CFD00B9C017 /* timemap.h */, @@ -3215,7 +3209,6 @@ 4D16944F1E3A44F300569BF4 /* timeinterface.cpp in Sources */, 4D6331F61F46D2CB00A0D6BF /* arpeg.cpp in Sources */, 4D1694501E3A44F300569BF4 /* attconverter.cpp in Sources */, - 4D98CCE125D26E8F00DC7A2C /* smufl.cpp in Sources */, 4D674B47255F40B7008AEF4C /* plica.cpp in Sources */, 4D1694511E3A44F300569BF4 /* glyph.cpp in Sources */, 4D1694521E3A44F300569BF4 /* syl.cpp in Sources */, @@ -3351,7 +3344,6 @@ 4D6413782035F58200BB630E /* pages.cpp in Sources */, 8F086EFE188539540037FD8E /* scoredef.cpp in Sources */, 4D5572401CF3F32A008D06A0 /* octave.cpp in Sources */, - 4D98CCE625D26E8F00DC7A2C /* smufl.cpp in Sources */, 8F086EFF188539540037FD8E /* slur.cpp in Sources */, 4DEC4DAA21C81EEC00D1D273 /* restore.cpp in Sources */, 36E0442C2347A9150054F141 /* expansionmap.cpp in Sources */, @@ -3646,7 +3638,6 @@ 4D1BE76C1C688F5A0086DC0E /* Binasc.cpp in Sources */, 4D9A9C1A199F561200028D93 /* verse.cpp in Sources */, 4DB3D8DC1F83D14900B5FC2B /* artic.cpp in Sources */, - 4D98CCDB25D26E3C00DC7A2C /* smufl.cpp in Sources */, 4D674B48255F40B7008AEF4C /* plica.cpp in Sources */, 4D9A9C1F19A1DE2000028D93 /* syl.cpp in Sources */, 4D4335CB1ED00A33003BE1A9 /* atts_gestural.cpp in Sources */, @@ -3864,7 +3855,6 @@ BB4C4AF922A932BC001F6AF0 /* restore.cpp in Sources */, BB4C4AFD22A932BC001F6AF0 /* subst.cpp in Sources */, BB4C4BBE22A932FC001F6AF0 /* MidiFile.cpp in Sources */, - 4D98CCDC25D26E3C00DC7A2C /* smufl.cpp in Sources */, 4D674B49255F40B7008AEF4C /* plica.cpp in Sources */, BB4C4A9C22A9328F001F6AF0 /* options.cpp in Sources */, BB4C4A6222A9321F001F6AF0 /* atts_cmn.cpp in Sources */, diff --git a/data/fontmetadata.json b/data/fontmetadata.json.template similarity index 100% rename from data/fontmetadata.json rename to data/fontmetadata.json.template diff --git a/fonts/generate-smufl-code.py b/fonts/generate-smufl-code.py index f26f212fae3..6f2af233ca4 100644 --- a/fonts/generate-smufl-code.py +++ b/fonts/generate-smufl-code.py @@ -5,7 +5,6 @@ # Define file output paths SMUFL_HEADER = "../include/vrv/smufl.h" -SMUFL_SOURCE = "../src/smufl.cpp" ###################### # Helper Functions # @@ -67,17 +66,4 @@ def get_supported_glyph_codes() -> dict: smufl_h_content += f"#define SMUFL_COUNT {len(smufl_names)}" + "\n\n" smufl_h_content += "} // namespace vrv\n\n" smufl_h_content += "#endif\n" - write_file_content(SMUFL_HEADER, smufl_h_content) - - # (2) Create cpp file - smufl_cpp_content = get_file_content("smufl.cpp.inc") + "\n" - smufl_cpp_content += "const std::map Resources::s_smuflNames = {\n" - for glyph_code in smufl_names: - # { "brace", SMUFL_E000_brace }, - smufl_cpp_content += " " * 4 + \ - f"{{ \"{smufl_names[glyph_code]}\", SMUFL_{glyph_code}_{smufl_names[glyph_code]} }}," + "\n" - smufl_cpp_content += "};\n\n" - smufl_cpp_content += "/** The number of glyphs for verification **/\n" - smufl_cpp_content += f"// {len(smufl_names)}" + "\n\n" - smufl_cpp_content += "} // namespace vrv\n" - write_file_content(SMUFL_SOURCE, smufl_cpp_content) + write_file_content(SMUFL_HEADER, smufl_h_content) \ No newline at end of file diff --git a/src/smufl.cpp b/src/smufl.cpp deleted file mode 100644 index 5abd3319515..00000000000 --- a/src/smufl.cpp +++ /dev/null @@ -1,448 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: smufl.cpp -// Author: Laurent Pugin -// Created: 2021 -// Copyright (c) Authors and others. All rights reserved. -///////////////////////////////////////////////////////////////////////////// - -///////////////////////////////////////////////////////////////////////////// -// NOTE: this file was generated by the ./fonts/generate-smufl-code.py script -// and should not be edited because changes will be lost. -///////////////////////////////////////////////////////////////////////////// - -#include "smufl.h" - -//---------------------------------------------------------------------------- - -#include "vrv.h" - -namespace vrv { - -//---------------------------------------------------------------------------- -// A map for the SMUFL names and the glyphs available in Verovio -//---------------------------------------------------------------------------- - -const std::map Resources::s_smuflNames = { - { "brace", SMUFL_E000_brace }, - { "bracketTop", SMUFL_E003_bracketTop }, - { "bracketBottom", SMUFL_E004_bracketBottom }, - { "repeatDots", SMUFL_E043_repeatDots }, - { "repeatDot", SMUFL_E044_repeatDot }, - { "dalSegno", SMUFL_E045_dalSegno }, - { "daCapo", SMUFL_E046_daCapo }, - { "segno", SMUFL_E047_segno }, - { "coda", SMUFL_E048_coda }, - { "codaSquare", SMUFL_E049_codaSquare }, - { "segnoSerpent2", SMUFL_E04B_segnoSerpent2 }, - { "gClef", SMUFL_E050_gClef }, - { "gClef15mb", SMUFL_E051_gClef15mb }, - { "gClef8vb", SMUFL_E052_gClef8vb }, - { "gClef8va", SMUFL_E053_gClef8va }, - { "gClef15ma", SMUFL_E054_gClef15ma }, - { "gClef8vbOld", SMUFL_E055_gClef8vbOld }, - { "gClef8vbCClef", SMUFL_E056_gClef8vbCClef }, - { "cClef", SMUFL_E05C_cClef }, - { "cClef8vb", SMUFL_E05D_cClef8vb }, - { "fClef", SMUFL_E062_fClef }, - { "fClef15mb", SMUFL_E063_fClef15mb }, - { "fClef8vb", SMUFL_E064_fClef8vb }, - { "fClef8va", SMUFL_E065_fClef8va }, - { "fClef15ma", SMUFL_E066_fClef15ma }, - { "unpitchedPercussionClef1", SMUFL_E069_unpitchedPercussionClef1 }, - { "unpitchedPercussionClef2", SMUFL_E06A_unpitchedPercussionClef2 }, - { "6stringTabClef", SMUFL_E06D_6stringTabClef }, - { "4stringTabClef", SMUFL_E06E_4stringTabClef }, - { "gClefReversed", SMUFL_E073_gClefReversed }, - { "gClefTurned", SMUFL_E074_gClefTurned }, - { "cClefReversed", SMUFL_E075_cClefReversed }, - { "fClefReversed", SMUFL_E076_fClefReversed }, - { "fClefTurned", SMUFL_E077_fClefTurned }, - { "timeSig0", SMUFL_E080_timeSig0 }, - { "timeSig1", SMUFL_E081_timeSig1 }, - { "timeSig2", SMUFL_E082_timeSig2 }, - { "timeSig3", SMUFL_E083_timeSig3 }, - { "timeSig4", SMUFL_E084_timeSig4 }, - { "timeSig5", SMUFL_E085_timeSig5 }, - { "timeSig6", SMUFL_E086_timeSig6 }, - { "timeSig7", SMUFL_E087_timeSig7 }, - { "timeSig8", SMUFL_E088_timeSig8 }, - { "timeSig9", SMUFL_E089_timeSig9 }, - { "timeSigCommon", SMUFL_E08A_timeSigCommon }, - { "timeSigCutCommon", SMUFL_E08B_timeSigCutCommon }, - { "timeSigPlus", SMUFL_E08C_timeSigPlus }, - { "timeSigPlusSmall", SMUFL_E08D_timeSigPlusSmall }, - { "timeSigFractionalSlash", SMUFL_E08E_timeSigFractionalSlash }, - { "timeSigEquals", SMUFL_E08F_timeSigEquals }, - { "timeSigMinus", SMUFL_E090_timeSigMinus }, - { "timeSigMultiply", SMUFL_E091_timeSigMultiply }, - { "timeSigParensLeftSmall", SMUFL_E092_timeSigParensLeftSmall }, - { "timeSigParensRightSmall", SMUFL_E093_timeSigParensRightSmall }, - { "timeSigParensLeft", SMUFL_E094_timeSigParensLeft }, - { "timeSigParensRight", SMUFL_E095_timeSigParensRight }, - { "noteheadDoubleWhole", SMUFL_E0A0_noteheadDoubleWhole }, - { "noteheadDoubleWholeSquare", SMUFL_E0A1_noteheadDoubleWholeSquare }, - { "noteheadWhole", SMUFL_E0A2_noteheadWhole }, - { "noteheadHalf", SMUFL_E0A3_noteheadHalf }, - { "noteheadBlack", SMUFL_E0A4_noteheadBlack }, - { "noteheadNull", SMUFL_E0A5_noteheadNull }, - { "noteheadXBlack", SMUFL_E0A9_noteheadXBlack }, - { "noteheadPlusBlack", SMUFL_E0AF_noteheadPlusBlack }, - { "noteheadWholeWithX", SMUFL_E0B5_noteheadWholeWithX }, - { "noteheadHalfWithX", SMUFL_E0B6_noteheadHalfWithX }, - { "noteheadVoidWithX", SMUFL_E0B7_noteheadVoidWithX }, - { "noteheadDiamondHalf", SMUFL_E0D9_noteheadDiamondHalf }, - { "noteheadDiamondHalfWide", SMUFL_E0DA_noteheadDiamondHalfWide }, - { "noteheadDiamondBlack", SMUFL_E0DB_noteheadDiamondBlack }, - { "noteheadDiamondBlackWide", SMUFL_E0DC_noteheadDiamondBlackWide }, - { "noteheadDiamondWhite", SMUFL_E0DD_noteheadDiamondWhite }, - { "noteheadDiamondWhiteWide", SMUFL_E0DE_noteheadDiamondWhiteWide }, - { "noteheadParenthesisLeft", SMUFL_E0F5_noteheadParenthesisLeft }, - { "noteheadParenthesisRight", SMUFL_E0F6_noteheadParenthesisRight }, - { "noteheadWholeFilled", SMUFL_E0FA_noteheadWholeFilled }, - { "noteheadSlashHorizontalEnds", SMUFL_E101_noteheadSlashHorizontalEnds }, - { "noteheadSlashWhiteWhole", SMUFL_E102_noteheadSlashWhiteWhole }, - { "noteheadSlashWhiteHalf", SMUFL_E103_noteheadSlashWhiteHalf }, - { "tremolo1", SMUFL_E220_tremolo1 }, - { "tremolo2", SMUFL_E221_tremolo2 }, - { "tremolo3", SMUFL_E222_tremolo3 }, - { "tremolo4", SMUFL_E223_tremolo4 }, - { "tremolo5", SMUFL_E224_tremolo5 }, - { "buzzRoll", SMUFL_E22A_buzzRoll }, - { "flag8thUp", SMUFL_E240_flag8thUp }, - { "flag8thDown", SMUFL_E241_flag8thDown }, - { "flag16thUp", SMUFL_E242_flag16thUp }, - { "flag16thDown", SMUFL_E243_flag16thDown }, - { "flag32ndUp", SMUFL_E244_flag32ndUp }, - { "flag32ndDown", SMUFL_E245_flag32ndDown }, - { "flag64thUp", SMUFL_E246_flag64thUp }, - { "flag64thDown", SMUFL_E247_flag64thDown }, - { "flag128thUp", SMUFL_E248_flag128thUp }, - { "flag128thDown", SMUFL_E249_flag128thDown }, - { "flag256thUp", SMUFL_E24A_flag256thUp }, - { "flag256thDown", SMUFL_E24B_flag256thDown }, - { "flag512thUp", SMUFL_E24C_flag512thUp }, - { "flag512thDown", SMUFL_E24D_flag512thDown }, - { "flag1024thUp", SMUFL_E24E_flag1024thUp }, - { "flag1024thDown", SMUFL_E24F_flag1024thDown }, - { "accidentalFlat", SMUFL_E260_accidentalFlat }, - { "accidentalNatural", SMUFL_E261_accidentalNatural }, - { "accidentalSharp", SMUFL_E262_accidentalSharp }, - { "accidentalDoubleSharp", SMUFL_E263_accidentalDoubleSharp }, - { "accidentalDoubleFlat", SMUFL_E264_accidentalDoubleFlat }, - { "accidentalTripleSharp", SMUFL_E265_accidentalTripleSharp }, - { "accidentalTripleFlat", SMUFL_E266_accidentalTripleFlat }, - { "accidentalNaturalFlat", SMUFL_E267_accidentalNaturalFlat }, - { "accidentalNaturalSharp", SMUFL_E268_accidentalNaturalSharp }, - { "accidentalSharpSharp", SMUFL_E269_accidentalSharpSharp }, - { "accidentalParensLeft", SMUFL_E26A_accidentalParensLeft }, - { "accidentalParensRight", SMUFL_E26B_accidentalParensRight }, - { "accidentalBracketLeft", SMUFL_E26C_accidentalBracketLeft }, - { "accidentalBracketRight", SMUFL_E26D_accidentalBracketRight }, - { "accidentalQuarterToneFlatArrowUp", SMUFL_E270_accidentalQuarterToneFlatArrowUp }, - { "accidentalThreeQuarterTonesFlatArrowDown", SMUFL_E271_accidentalThreeQuarterTonesFlatArrowDown }, - { "accidentalQuarterToneSharpNaturalArrowUp", SMUFL_E272_accidentalQuarterToneSharpNaturalArrowUp }, - { "accidentalQuarterToneFlatNaturalArrowDown", SMUFL_E273_accidentalQuarterToneFlatNaturalArrowDown }, - { "accidentalThreeQuarterTonesSharpArrowUp", SMUFL_E274_accidentalThreeQuarterTonesSharpArrowUp }, - { "accidentalQuarterToneSharpArrowDown", SMUFL_E275_accidentalQuarterToneSharpArrowDown }, - { "accidentalQuarterToneFlatStein", SMUFL_E280_accidentalQuarterToneFlatStein }, - { "accidentalThreeQuarterTonesFlatZimmermann", SMUFL_E281_accidentalThreeQuarterTonesFlatZimmermann }, - { "accidentalQuarterToneSharpStein", SMUFL_E282_accidentalQuarterToneSharpStein }, - { "accidentalThreeQuarterTonesSharpStein", SMUFL_E283_accidentalThreeQuarterTonesSharpStein }, - { "accidentalBuyukMucennebFlat", SMUFL_E440_accidentalBuyukMucennebFlat }, - { "accidentalKucukMucennebFlat", SMUFL_E441_accidentalKucukMucennebFlat }, - { "accidentalBakiyeFlat", SMUFL_E442_accidentalBakiyeFlat }, - { "accidentalKomaFlat", SMUFL_E443_accidentalKomaFlat }, - { "accidentalKomaSharp", SMUFL_E444_accidentalKomaSharp }, - { "accidentalBakiyeSharp", SMUFL_E445_accidentalBakiyeSharp }, - { "accidentalKucukMucennebSharp", SMUFL_E446_accidentalKucukMucennebSharp }, - { "accidentalBuyukMucennebSharp", SMUFL_E447_accidentalBuyukMucennebSharp }, - { "articAccentAbove", SMUFL_E4A0_articAccentAbove }, - { "articAccentBelow", SMUFL_E4A1_articAccentBelow }, - { "articStaccatoAbove", SMUFL_E4A2_articStaccatoAbove }, - { "articStaccatoBelow", SMUFL_E4A3_articStaccatoBelow }, - { "articTenutoAbove", SMUFL_E4A4_articTenutoAbove }, - { "articTenutoBelow", SMUFL_E4A5_articTenutoBelow }, - { "articStaccatissimoAbove", SMUFL_E4A6_articStaccatissimoAbove }, - { "articStaccatissimoBelow", SMUFL_E4A7_articStaccatissimoBelow }, - { "articStaccatissimoWedgeAbove", SMUFL_E4A8_articStaccatissimoWedgeAbove }, - { "articStaccatissimoWedgeBelow", SMUFL_E4A9_articStaccatissimoWedgeBelow }, - { "articStaccatissimoStrokeAbove", SMUFL_E4AA_articStaccatissimoStrokeAbove }, - { "articStaccatissimoStrokeBelow", SMUFL_E4AB_articStaccatissimoStrokeBelow }, - { "articMarcatoAbove", SMUFL_E4AC_articMarcatoAbove }, - { "articMarcatoBelow", SMUFL_E4AD_articMarcatoBelow }, - { "articMarcatoStaccatoAbove", SMUFL_E4AE_articMarcatoStaccatoAbove }, - { "articMarcatoStaccatoBelow", SMUFL_E4AF_articMarcatoStaccatoBelow }, - { "articAccentStaccatoAbove", SMUFL_E4B0_articAccentStaccatoAbove }, - { "articAccentStaccatoBelow", SMUFL_E4B1_articAccentStaccatoBelow }, - { "articTenutoStaccatoAbove", SMUFL_E4B2_articTenutoStaccatoAbove }, - { "articTenutoStaccatoBelow", SMUFL_E4B3_articTenutoStaccatoBelow }, - { "articTenutoAccentAbove", SMUFL_E4B4_articTenutoAccentAbove }, - { "articTenutoAccentBelow", SMUFL_E4B5_articTenutoAccentBelow }, - { "articStressAbove", SMUFL_E4B6_articStressAbove }, - { "articStressBelow", SMUFL_E4B7_articStressBelow }, - { "articUnstressAbove", SMUFL_E4B8_articUnstressAbove }, - { "articUnstressBelow", SMUFL_E4B9_articUnstressBelow }, - { "articLaissezVibrerAbove", SMUFL_E4BA_articLaissezVibrerAbove }, - { "articLaissezVibrerBelow", SMUFL_E4BB_articLaissezVibrerBelow }, - { "articMarcatoTenutoAbove", SMUFL_E4BC_articMarcatoTenutoAbove }, - { "articMarcatoTenutoBelow", SMUFL_E4BD_articMarcatoTenutoBelow }, - { "fermataAbove", SMUFL_E4C0_fermataAbove }, - { "fermataBelow", SMUFL_E4C1_fermataBelow }, - { "fermataVeryShortAbove", SMUFL_E4C2_fermataVeryShortAbove }, - { "fermataVeryShortBelow", SMUFL_E4C3_fermataVeryShortBelow }, - { "fermataShortAbove", SMUFL_E4C4_fermataShortAbove }, - { "fermataShortBelow", SMUFL_E4C5_fermataShortBelow }, - { "fermataLongAbove", SMUFL_E4C6_fermataLongAbove }, - { "fermataLongBelow", SMUFL_E4C7_fermataLongBelow }, - { "fermataVeryLongAbove", SMUFL_E4C8_fermataVeryLongAbove }, - { "fermataVeryLongBelow", SMUFL_E4C9_fermataVeryLongBelow }, - { "breathMarkComma", SMUFL_E4CE_breathMarkComma }, - { "restMaxima", SMUFL_E4E0_restMaxima }, - { "restLonga", SMUFL_E4E1_restLonga }, - { "restDoubleWhole", SMUFL_E4E2_restDoubleWhole }, - { "restWhole", SMUFL_E4E3_restWhole }, - { "restHalf", SMUFL_E4E4_restHalf }, - { "restQuarter", SMUFL_E4E5_restQuarter }, - { "rest8th", SMUFL_E4E6_rest8th }, - { "rest16th", SMUFL_E4E7_rest16th }, - { "rest32nd", SMUFL_E4E8_rest32nd }, - { "rest64th", SMUFL_E4E9_rest64th }, - { "rest128th", SMUFL_E4EA_rest128th }, - { "rest256th", SMUFL_E4EB_rest256th }, - { "rest512th", SMUFL_E4EC_rest512th }, - { "rest1024th", SMUFL_E4ED_rest1024th }, - { "restQuarterOld", SMUFL_E4F2_restQuarterOld }, - { "restQuarterZ", SMUFL_E4F6_restQuarterZ }, - { "repeat1Bar", SMUFL_E500_repeat1Bar }, - { "repeat2Bars", SMUFL_E501_repeat2Bars }, - { "repeat4Bars", SMUFL_E502_repeat4Bars }, - { "repeatBarUpperDot", SMUFL_E503_repeatBarUpperDot }, - { "repeatBarSlash", SMUFL_E504_repeatBarSlash }, - { "repeatBarLowerDot", SMUFL_E505_repeatBarLowerDot }, - { "ottava", SMUFL_E510_ottava }, - { "ottavaAlta", SMUFL_E511_ottavaAlta }, - { "ottavaBassa", SMUFL_E512_ottavaBassa }, - { "ottavaBassaBa", SMUFL_E513_ottavaBassaBa }, - { "quindicesima", SMUFL_E514_quindicesima }, - { "quindicesimaAlta", SMUFL_E515_quindicesimaAlta }, - { "quindicesimaBassa", SMUFL_E516_quindicesimaBassa }, - { "ventiduesima", SMUFL_E517_ventiduesima }, - { "ventiduesimaAlta", SMUFL_E518_ventiduesimaAlta }, - { "ventiduesimaBassa", SMUFL_E519_ventiduesimaBassa }, - { "octaveParensLeft", SMUFL_E51A_octaveParensLeft }, - { "octaveParensRight", SMUFL_E51B_octaveParensRight }, - { "ottavaBassaVb", SMUFL_E51C_ottavaBassaVb }, - { "quindicesimaBassaMb", SMUFL_E51D_quindicesimaBassaMb }, - { "ventiduesimaBassaMb", SMUFL_E51E_ventiduesimaBassaMb }, - { "dynamicPiano", SMUFL_E520_dynamicPiano }, - { "dynamicMezzo", SMUFL_E521_dynamicMezzo }, - { "dynamicForte", SMUFL_E522_dynamicForte }, - { "dynamicRinforzando", SMUFL_E523_dynamicRinforzando }, - { "dynamicSforzando", SMUFL_E524_dynamicSforzando }, - { "dynamicZ", SMUFL_E525_dynamicZ }, - { "dynamicNiente", SMUFL_E526_dynamicNiente }, - { "dynamicPPPPPP", SMUFL_E527_dynamicPPPPPP }, - { "dynamicPPPPP", SMUFL_E528_dynamicPPPPP }, - { "dynamicPPPP", SMUFL_E529_dynamicPPPP }, - { "dynamicPPP", SMUFL_E52A_dynamicPPP }, - { "dynamicPP", SMUFL_E52B_dynamicPP }, - { "dynamicMP", SMUFL_E52C_dynamicMP }, - { "dynamicMF", SMUFL_E52D_dynamicMF }, - { "dynamicPF", SMUFL_E52E_dynamicPF }, - { "dynamicFF", SMUFL_E52F_dynamicFF }, - { "dynamicFFF", SMUFL_E530_dynamicFFF }, - { "dynamicFFFF", SMUFL_E531_dynamicFFFF }, - { "dynamicFFFFF", SMUFL_E532_dynamicFFFFF }, - { "dynamicFFFFFF", SMUFL_E533_dynamicFFFFFF }, - { "dynamicFortePiano", SMUFL_E534_dynamicFortePiano }, - { "dynamicForzando", SMUFL_E535_dynamicForzando }, - { "dynamicSforzando1", SMUFL_E536_dynamicSforzando1 }, - { "dynamicSforzandoPiano", SMUFL_E537_dynamicSforzandoPiano }, - { "dynamicSforzandoPianissimo", SMUFL_E538_dynamicSforzandoPianissimo }, - { "dynamicSforzato", SMUFL_E539_dynamicSforzato }, - { "dynamicSforzatoPiano", SMUFL_E53A_dynamicSforzatoPiano }, - { "dynamicSforzatoFF", SMUFL_E53B_dynamicSforzatoFF }, - { "dynamicRinforzando1", SMUFL_E53C_dynamicRinforzando1 }, - { "dynamicRinforzando2", SMUFL_E53D_dynamicRinforzando2 }, - { "ornamentTrill", SMUFL_E566_ornamentTrill }, - { "ornamentTurn", SMUFL_E567_ornamentTurn }, - { "ornamentTurnInverted", SMUFL_E568_ornamentTurnInverted }, - { "ornamentTurnSlash", SMUFL_E569_ornamentTurnSlash }, - { "ornamentTurnUp", SMUFL_E56A_ornamentTurnUp }, - { "ornamentTurnUpS", SMUFL_E56B_ornamentTurnUpS }, - { "ornamentShortTrill", SMUFL_E56C_ornamentShortTrill }, - { "ornamentMordent", SMUFL_E56D_ornamentMordent }, - { "ornamentTremblement", SMUFL_E56E_ornamentTremblement }, - { "ornamentHaydn", SMUFL_E56F_ornamentHaydn }, - { "ornamentVerticalLine", SMUFL_E583_ornamentVerticalLine }, - { "ornamentSchleifer", SMUFL_E587_ornamentSchleifer }, - { "ornamentZigZagLineNoRightEnd", SMUFL_E59D_ornamentZigZagLineNoRightEnd }, - { "ornamentZigZagLineWithRightEnd", SMUFL_E59E_ornamentZigZagLineWithRightEnd }, - { "ornamentPrecompSlide", SMUFL_E5B0_ornamentPrecompSlide }, - { "ornamentPrecompDescendingSlide", SMUFL_E5B1_ornamentPrecompDescendingSlide }, - { "ornamentPrecompAppoggTrill", SMUFL_E5B2_ornamentPrecompAppoggTrill }, - { "ornamentPrecompAppoggTrillSuffix", SMUFL_E5B3_ornamentPrecompAppoggTrillSuffix }, - { "ornamentPrecompTurnTrillDAnglebert", SMUFL_E5B4_ornamentPrecompTurnTrillDAnglebert }, - { "ornamentPrecompSlideTrillDAnglebert", SMUFL_E5B5_ornamentPrecompSlideTrillDAnglebert }, - { "ornamentPrecompSlideTrillMarpurg", SMUFL_E5B6_ornamentPrecompSlideTrillMarpurg }, - { "ornamentPrecompTurnTrillBach", SMUFL_E5B7_ornamentPrecompTurnTrillBach }, - { "ornamentPrecompSlideTrillBach", SMUFL_E5B8_ornamentPrecompSlideTrillBach }, - { "ornamentPrecompSlideTrillMuffat", SMUFL_E5B9_ornamentPrecompSlideTrillMuffat }, - { "ornamentPrecompSlideTrillSuffixMuffat", SMUFL_E5BA_ornamentPrecompSlideTrillSuffixMuffat }, - { "ornamentPrecompTrillSuffixDandrieu", SMUFL_E5BB_ornamentPrecompTrillSuffixDandrieu }, - { "ornamentPrecompPortDeVoixMordent", SMUFL_E5BC_ornamentPrecompPortDeVoixMordent }, - { "ornamentPrecompTrillWithMordent", SMUFL_E5BD_ornamentPrecompTrillWithMordent }, - { "ornamentPrecompCadence", SMUFL_E5BE_ornamentPrecompCadence }, - { "ornamentPrecompCadenceWithTurn", SMUFL_E5BF_ornamentPrecompCadenceWithTurn }, - { "ornamentPrecompDoubleCadenceLowerPrefix", SMUFL_E5C0_ornamentPrecompDoubleCadenceLowerPrefix }, - { "ornamentPrecompCadenceUpperPrefix", SMUFL_E5C1_ornamentPrecompCadenceUpperPrefix }, - { "ornamentPrecompCadenceUpperPrefixTurn", SMUFL_E5C2_ornamentPrecompCadenceUpperPrefixTurn }, - { "ornamentPrecompDoubleCadenceUpperPrefix", SMUFL_E5C3_ornamentPrecompDoubleCadenceUpperPrefix }, - { "ornamentPrecompDoubleCadenceUpperPrefixTurn", SMUFL_E5C4_ornamentPrecompDoubleCadenceUpperPrefixTurn }, - { "ornamentPrecompMordentRelease", SMUFL_E5C5_ornamentPrecompMordentRelease }, - { "ornamentPrecompMordentUpperPrefix", SMUFL_E5C6_ornamentPrecompMordentUpperPrefix }, - { "ornamentPrecompInvertedMordentUpperPrefix", SMUFL_E5C7_ornamentPrecompInvertedMordentUpperPrefix }, - { "ornamentPrecompTrillLowerSuffix", SMUFL_E5C8_ornamentPrecompTrillLowerSuffix }, - { "brassMuteClosed", SMUFL_E5E5_brassMuteClosed }, - { "brassMuteHalfClosed", SMUFL_E5E6_brassMuteHalfClosed }, - { "brassMuteOpen", SMUFL_E5E7_brassMuteOpen }, - { "stringsDownBow", SMUFL_E610_stringsDownBow }, - { "stringsDownBowTurned", SMUFL_E611_stringsDownBowTurned }, - { "stringsUpBow", SMUFL_E612_stringsUpBow }, - { "stringsUpBowTurned", SMUFL_E613_stringsUpBowTurned }, - { "stringsHarmonic", SMUFL_E614_stringsHarmonic }, - { "pluckedSnapPizzicatoBelow", SMUFL_E630_pluckedSnapPizzicatoBelow }, - { "pluckedSnapPizzicatoAbove", SMUFL_E631_pluckedSnapPizzicatoAbove }, - { "pluckedBuzzPizzicato", SMUFL_E632_pluckedBuzzPizzicato }, - { "pluckedLeftHandPizzicato", SMUFL_E633_pluckedLeftHandPizzicato }, - { "pluckedDamp", SMUFL_E638_pluckedDamp }, - { "vocalSprechgesang", SMUFL_E645_vocalSprechgesang }, - { "keyboardPedalPed", SMUFL_E650_keyboardPedalPed }, - { "keyboardPedalP", SMUFL_E651_keyboardPedalP }, - { "keyboardPedalUp", SMUFL_E655_keyboardPedalUp }, - { "keyboardPedalSost", SMUFL_E659_keyboardPedalSost }, - { "keyboardPedalS", SMUFL_E65A_keyboardPedalS }, - { "tuplet0", SMUFL_E880_tuplet0 }, - { "tuplet1", SMUFL_E881_tuplet1 }, - { "tuplet2", SMUFL_E882_tuplet2 }, - { "tuplet3", SMUFL_E883_tuplet3 }, - { "tuplet4", SMUFL_E884_tuplet4 }, - { "tuplet5", SMUFL_E885_tuplet5 }, - { "tuplet6", SMUFL_E886_tuplet6 }, - { "tuplet7", SMUFL_E887_tuplet7 }, - { "tuplet8", SMUFL_E888_tuplet8 }, - { "tuplet9", SMUFL_E889_tuplet9 }, - { "tupletColon", SMUFL_E88A_tupletColon }, - { "mensuralGclefPetrucci", SMUFL_E901_mensuralGclefPetrucci }, - { "chantFclef", SMUFL_E902_chantFclef }, - { "mensuralFclefPetrucci", SMUFL_E904_mensuralFclefPetrucci }, - { "chantCclef", SMUFL_E906_chantCclef }, - { "mensuralCclefPetrucciPosLowest", SMUFL_E907_mensuralCclefPetrucciPosLowest }, - { "mensuralCclefPetrucciPosLow", SMUFL_E908_mensuralCclefPetrucciPosLow }, - { "mensuralCclefPetrucciPosMiddle", SMUFL_E909_mensuralCclefPetrucciPosMiddle }, - { "mensuralCclefPetrucciPosHigh", SMUFL_E90A_mensuralCclefPetrucciPosHigh }, - { "mensuralCclefPetrucciPosHighest", SMUFL_E90B_mensuralCclefPetrucciPosHighest }, - { "mensuralProlation1", SMUFL_E910_mensuralProlation1 }, - { "mensuralProlation2", SMUFL_E911_mensuralProlation2 }, - { "mensuralProlation3", SMUFL_E912_mensuralProlation3 }, - { "mensuralProlation4", SMUFL_E913_mensuralProlation4 }, - { "mensuralProlation5", SMUFL_E914_mensuralProlation5 }, - { "mensuralProlation6", SMUFL_E915_mensuralProlation6 }, - { "mensuralProlation7", SMUFL_E916_mensuralProlation7 }, - { "mensuralProlation8", SMUFL_E917_mensuralProlation8 }, - { "mensuralProlation9", SMUFL_E918_mensuralProlation9 }, - { "mensuralProlation10", SMUFL_E919_mensuralProlation10 }, - { "mensuralProlation11", SMUFL_E91A_mensuralProlation11 }, - { "mensuralProportionTempusPerfectum", SMUFL_E91B_mensuralProportionTempusPerfectum }, - { "mensuralProportionProportioDupla1", SMUFL_E91C_mensuralProportionProportioDupla1 }, - { "mensuralProportionProportioDupla2", SMUFL_E91D_mensuralProportionProportioDupla2 }, - { "mensuralProportionProportioTripla", SMUFL_E91E_mensuralProportionProportioTripla }, - { "mensuralProportionProportioQuadrupla", SMUFL_E91F_mensuralProportionProportioQuadrupla }, - { "mensuralProlationCombiningDot", SMUFL_E920_mensuralProlationCombiningDot }, - { "mensuralProlationCombiningTwoDots", SMUFL_E921_mensuralProlationCombiningTwoDots }, - { "mensuralProlationCombiningThreeDots", SMUFL_E922_mensuralProlationCombiningThreeDots }, - { "mensuralProlationCombiningThreeDotsTri", SMUFL_E923_mensuralProlationCombiningThreeDotsTri }, - { "mensuralProlationCombiningDotVoid", SMUFL_E924_mensuralProlationCombiningDotVoid }, - { "mensuralProlationCombiningStroke", SMUFL_E925_mensuralProlationCombiningStroke }, - { "mensuralNoteheadSemibrevisBlack", SMUFL_E938_mensuralNoteheadSemibrevisBlack }, - { "mensuralNoteheadSemibrevisVoid", SMUFL_E939_mensuralNoteheadSemibrevisVoid }, - { "mensuralNoteheadMinimaWhite", SMUFL_E93C_mensuralNoteheadMinimaWhite }, - { "mensuralNoteheadSemiminimaWhite", SMUFL_E93D_mensuralNoteheadSemiminimaWhite }, - { "mensuralCombStemUp", SMUFL_E93E_mensuralCombStemUp }, - { "mensuralCombStemDown", SMUFL_E93F_mensuralCombStemDown }, - { "mensuralCombStemUpFlagSemiminima", SMUFL_E949_mensuralCombStemUpFlagSemiminima }, - { "mensuralCombStemDownFlagSemiminima", SMUFL_E94A_mensuralCombStemDownFlagSemiminima }, - { "mensuralCombStemUpFlagFusa", SMUFL_E94B_mensuralCombStemUpFlagFusa }, - { "mensuralCombStemDownFlagFusa", SMUFL_E94C_mensuralCombStemDownFlagFusa }, - { "chantPunctum", SMUFL_E990_chantPunctum }, - { "chantPunctumInclinatum", SMUFL_E991_chantPunctumInclinatum }, - { "chantPunctumVirga", SMUFL_E996_chantPunctumVirga }, - { "chantQuilisma", SMUFL_E99B_chantQuilisma }, - { "chantOriscusLiquescens", SMUFL_E99E_chantOriscusLiquescens }, - { "chantStrophicus", SMUFL_E99F_chantStrophicus }, - { "chantEntryLineAsc2nd", SMUFL_E9B4_chantEntryLineAsc2nd }, - { "chantEntryLineAsc3rd", SMUFL_E9B5_chantEntryLineAsc3rd }, - { "chantEntryLineAsc4th", SMUFL_E9B6_chantEntryLineAsc4th }, - { "chantEntryLineAsc5th", SMUFL_E9B7_chantEntryLineAsc5th }, - { "chantLigaturaDesc2nd", SMUFL_E9B9_chantLigaturaDesc2nd }, - { "chantLigaturaDesc3rd", SMUFL_E9BA_chantLigaturaDesc3rd }, - { "chantLigaturaDesc4th", SMUFL_E9BB_chantLigaturaDesc4th }, - { "chantLigaturaDesc5th", SMUFL_E9BC_chantLigaturaDesc5th }, - { "medRenFlatSoftB", SMUFL_E9E0_medRenFlatSoftB }, - { "medRenFlatHardB", SMUFL_E9E1_medRenFlatHardB }, - { "medRenNatural", SMUFL_E9E2_medRenNatural }, - { "medRenSharpCroix", SMUFL_E9E3_medRenSharpCroix }, - { "mensuralRestMaxima", SMUFL_E9F0_mensuralRestMaxima }, - { "mensuralRestLongaPerfecta", SMUFL_E9F1_mensuralRestLongaPerfecta }, - { "mensuralRestLongaImperfecta", SMUFL_E9F2_mensuralRestLongaImperfecta }, - { "mensuralRestBrevis", SMUFL_E9F3_mensuralRestBrevis }, - { "mensuralRestSemibrevis", SMUFL_E9F4_mensuralRestSemibrevis }, - { "mensuralRestMinima", SMUFL_E9F5_mensuralRestMinima }, - { "mensuralRestSemiminima", SMUFL_E9F6_mensuralRestSemiminima }, - { "mensuralRestFusa", SMUFL_E9F7_mensuralRestFusa }, - { "mensuralRestSemifusa", SMUFL_E9F8_mensuralRestSemifusa }, - { "mensuralCustosUp", SMUFL_EA02_mensuralCustosUp }, - { "chantCustosStemUpPosMiddle", SMUFL_EA06_chantCustosStemUpPosMiddle }, - { "wiggleTrill", SMUFL_EAA4_wiggleTrill }, - { "wiggleArpeggiatoUp", SMUFL_EAA9_wiggleArpeggiatoUp }, - { "wiggleArpeggiatoDown", SMUFL_EAAA_wiggleArpeggiatoDown }, - { "wiggleArpeggiatoUpArrow", SMUFL_EAAD_wiggleArpeggiatoUpArrow }, - { "wiggleArpeggiatoDownArrow", SMUFL_EAAE_wiggleArpeggiatoDownArrow }, - { "wiggleGlissando", SMUFL_EAAF_wiggleGlissando }, - { "luteDurationWhole", SMUFL_EBA7_luteDurationWhole }, - { "luteDurationHalf", SMUFL_EBA8_luteDurationHalf }, - { "luteDurationQuarter", SMUFL_EBA9_luteDurationQuarter }, - { "luteDuration8th", SMUFL_EBAA_luteDuration8th }, - { "luteDuration16th", SMUFL_EBAB_luteDuration16th }, - { "luteDuration32nd", SMUFL_EBAC_luteDuration32nd }, - { "luteFrenchFretA", SMUFL_EBC0_luteFrenchFretA }, - { "luteFrenchFretB", SMUFL_EBC1_luteFrenchFretB }, - { "luteFrenchFretC", SMUFL_EBC2_luteFrenchFretC }, - { "luteFrenchFretD", SMUFL_EBC3_luteFrenchFretD }, - { "luteFrenchFretE", SMUFL_EBC4_luteFrenchFretE }, - { "luteFrenchFretF", SMUFL_EBC5_luteFrenchFretF }, - { "luteFrenchFretG", SMUFL_EBC6_luteFrenchFretG }, - { "luteFrenchFretH", SMUFL_EBC7_luteFrenchFretH }, - { "luteFrenchFretI", SMUFL_EBC8_luteFrenchFretI }, - { "luteFrenchFretK", SMUFL_EBC9_luteFrenchFretK }, - { "luteFrenchFretL", SMUFL_EBCA_luteFrenchFretL }, - { "luteFrenchFretM", SMUFL_EBCB_luteFrenchFretM }, - { "luteFrenchFretN", SMUFL_EBCC_luteFrenchFretN }, - { "luteItalianFret0", SMUFL_EBE0_luteItalianFret0 }, - { "luteItalianFret1", SMUFL_EBE1_luteItalianFret1 }, - { "luteItalianFret2", SMUFL_EBE2_luteItalianFret2 }, - { "luteItalianFret3", SMUFL_EBE3_luteItalianFret3 }, - { "luteItalianFret4", SMUFL_EBE4_luteItalianFret4 }, - { "luteItalianFret5", SMUFL_EBE5_luteItalianFret5 }, - { "luteItalianFret6", SMUFL_EBE6_luteItalianFret6 }, - { "luteItalianFret7", SMUFL_EBE7_luteItalianFret7 }, - { "luteItalianFret8", SMUFL_EBE8_luteItalianFret8 }, - { "luteItalianFret9", SMUFL_EBE9_luteItalianFret9 }, - { "articSoftAccentAbove", SMUFL_ED40_articSoftAccentAbove }, - { "articSoftAccentBelow", SMUFL_ED41_articSoftAccentBelow }, -}; - -/** The number of glyphs for verification **/ -// 417 - -} // namespace vrv diff --git a/src/vrv.cpp b/src/vrv.cpp index a9c6d7d6327..5361c160f6a 100644 --- a/src/vrv.cpp +++ b/src/vrv.cpp @@ -223,7 +223,6 @@ bool Resources::LoadFont(const std::string &fontName) const int unitsPerEm = atoi(root.attribute("units-per-em").value()); const std::map ranges = GetGlyphRanges(); - for (pugi::xml_node current = root.child("g"); current; current = current.next_sibling("g")) { pugi::xml_attribute c_attribute = current.attribute("c"); pugi::xml_attribute n_attribute = current.attribute("n"); @@ -242,12 +241,12 @@ bool Resources::LoadFont(const std::string &fontName) glyph.SetUnitsPerEm(unitsPerEm * 10); glyph.SetCodeStr(c_attribute.value()); float x = 0.0, y = 0.0, width = 0.0, height = 0.0; - if (current.attribute("x")) x = atof(current.attribute("x").value()); - if (current.attribute("y")) y = atof(current.attribute("y").value()); - if (current.attribute("w")) width = atof(current.attribute("w").value()); - if (current.attribute("h")) height = atof(current.attribute("h").value()); + if (current.attribute("x")) x = current.attribute("x").as_float(); + if (current.attribute("y")) y = current.attribute("y").as_float(); + if (current.attribute("w")) width = current.attribute("w").as_float(); + if (current.attribute("h")) height = current.attribute("h").as_float(); glyph.SetBoundingBox(x, y, width, height); - if (current.attribute("h-a-x")) glyph.SetHorizAdvX(atof(current.attribute("h-a-x").value())); + if (current.attribute("h-a-x")) glyph.SetHorizAdvX(current.attribute("h-a-x").as_float()); // load anchors pugi::xml_node anchor; @@ -256,7 +255,7 @@ bool Resources::LoadFont(const std::string &fontName) std::string name = std::string(anchor.attribute("n").value()); // No check for possible x and y missing attributes - not very safe. - glyph.SetAnchor(name, atof(anchor.attribute("x").value()), atof(anchor.attribute("y").value())); + glyph.SetAnchor(name, anchor.attribute("x").as_float(), anchor.attribute("y").as_float()); } } From b3620e3ca34c445a2f5daf4831eb95b0d2555aed Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 31 Jan 2022 17:21:02 +0200 Subject: [PATCH 228/403] Rename static variables and change log messages to errors --- include/vrv/vrv.h | 8 ++++---- src/vrv.cpp | 22 +++++++++++----------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/include/vrv/vrv.h b/include/vrv/vrv.h index f8a306ee836..19095dab146 100644 --- a/include/vrv/vrv.h +++ b/include/vrv/vrv.h @@ -152,7 +152,7 @@ class Resources { static std::string GetPath() { return s_path; } static void SetPath(const std::string &path) { s_path = path; } /** Font name */ - static std::string GetSmuflFontName() { return m_smuflFontName; } + static std::string GetSmuflFontName() { return s_smuflFontName; } /** Init the SMufL music and text fonts */ static bool InitFonts(); /** Init the text font (bounding boxes and ASCII only) */ @@ -186,9 +186,9 @@ class Resources { /** The path to the resources directory (e.g., for the svg/ subdirectory with fonts as XML */ static thread_local std::string s_path; /** Name of the font used for SMUFL glyphs*/ - static thread_local std::string m_smuflFontName; + static thread_local std::string s_smuflFontName; /** The loaded SMuFL font */ - static thread_local GlyphTable m_fontGlyphTable; + static thread_local GlyphTable s_fontGlyphTable; /** A text font used for bounding box calculations */ static thread_local GlyphTextMap s_textFont; static thread_local StyleAttributes s_currentStyle; @@ -196,7 +196,7 @@ class Resources { /** * A map of glyph name / code */ - static thread_local GlyphNameTable m_glyphNameTable; + static thread_local GlyphNameTable s_glyphNameTable; }; //---------------------------------------------------------------------------- diff --git a/src/vrv.cpp b/src/vrv.cpp index 5361c160f6a..0fb5a46f35e 100644 --- a/src/vrv.cpp +++ b/src/vrv.cpp @@ -68,10 +68,10 @@ namespace vrv { //---------------------------------------------------------------------------- thread_local std::string Resources::s_path = "/usr/local/share/verovio"; -thread_local std::string Resources::m_smuflFontName = ""; +thread_local std::string Resources::s_smuflFontName = ""; thread_local Resources::GlyphTextMap Resources::s_textFont; -thread_local Resources::GlyphTable Resources::m_fontGlyphTable; -thread_local Resources::GlyphNameTable Resources::m_glyphNameTable; +thread_local Resources::GlyphTable Resources::s_fontGlyphTable; +thread_local Resources::GlyphNameTable Resources::s_glyphNameTable; thread_local Resources::StyleAttributes Resources::s_currentStyle; const Resources::StyleAttributes Resources::k_defaultStyle{ data_FONTWEIGHT::FONTWEIGHT_normal, data_FONTSTYLE::FONTSTYLE_normal }; @@ -121,17 +121,17 @@ bool Resources::SetFont(const std::string &fontName) Glyph *Resources::GetGlyph(wchar_t smuflCode) { - return m_fontGlyphTable.count(smuflCode) ? &m_fontGlyphTable.at(smuflCode) : NULL; + return s_fontGlyphTable.count(smuflCode) ? &s_fontGlyphTable.at(smuflCode) : NULL; } Glyph *Resources::GetGlyph(const std::string &smuflName) { - return m_glyphNameTable.count(smuflName) ? &m_fontGlyphTable.at(m_glyphNameTable.at(smuflName)) : NULL; + return s_glyphNameTable.count(smuflName) ? &s_fontGlyphTable.at(s_glyphNameTable.at(smuflName)) : NULL; } wchar_t Resources::GetGlyphCode(const std::string &smuflName) { - return m_glyphNameTable.count(smuflName) ? m_glyphNameTable.at(smuflName) : 0; + return s_glyphNameTable.count(smuflName) ? s_glyphNameTable.at(smuflName) : 0; } std::map Resources::GetGlyphRanges() @@ -204,19 +204,19 @@ Glyph *Resources::GetTextGlyph(wchar_t code) bool Resources::LoadFont(const std::string &fontName) { // set font name - m_smuflFontName = fontName; + s_smuflFontName = fontName; pugi::xml_document doc; const std::string filename = Resources::GetPath() + "/" + fontName + ".xml"; pugi::xml_parse_result parseResult = doc.load_file(filename.c_str()); if (!parseResult) { // File not found, default bounding boxes will be used - LogMessage("Font loaded without bounding boxes"); + LogError("Failed to load font and glyph bounding boxes"); return false; } pugi::xml_node root = doc.first_child(); if (!root.attribute("units-per-em")) { - LogWarning("No units-per-em attribute in bouding box file"); + LogError("No units-per-em attribute in bouding box file"); return false; } @@ -259,8 +259,8 @@ bool Resources::LoadFont(const std::string &fontName) } } - m_fontGlyphTable[smuflCode] = glyph; - m_glyphNameTable[n_attribute.value()] = smuflCode; + s_fontGlyphTable[smuflCode] = glyph; + s_glyphNameTable[n_attribute.value()] = smuflCode; } return true; From 267fc78a8acd29b3fa449d4848a76f6aa1d51792 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Wed, 2 Feb 2022 17:37:42 +0100 Subject: [PATCH 229/403] turn turned clefs on --- fonts/supported.xsl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fonts/supported.xsl b/fonts/supported.xsl index 7c46e2f37c1..b61b7324995 100644 --- a/fonts/supported.xsl +++ b/fonts/supported.xsl @@ -117,11 +117,11 @@ - - - - - + + + + + From d36ec4dc4947ef73bbe22d73bc7bc53115485599 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 31 Jan 2022 08:02:00 +0100 Subject: [PATCH 230/403] Make TabDurSym inherit from StemmedDrawingInterface --- include/vrv/tabdursym.h | 38 +++++++++++++++++++++++++++++++++++++- src/tabdursym.cpp | 41 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/include/vrv/tabdursym.h b/include/vrv/tabdursym.h index 584fc01572a..eff657e8df4 100644 --- a/include/vrv/tabdursym.h +++ b/include/vrv/tabdursym.h @@ -9,6 +9,7 @@ #define __VRV_TABDURSYM_H__ #include "atts_shared.h" +#include "drawinginterface.h" #include "layerelement.h" namespace vrv { @@ -20,7 +21,7 @@ namespace vrv { /** * This class models the MEI element. */ -class TabDurSym : public LayerElement, public AttNNumberLike { +class TabDurSym : public LayerElement, public StemmedDrawingInterface, public AttNNumberLike { public: /** * @name Constructors, destructors, and other standard methods @@ -33,6 +34,16 @@ class TabDurSym : public LayerElement, public AttNNumberLike { std::string GetClassName() const override { return "TabDurSym"; } ///@} + /** + * @name Getter to interfaces + */ + ///@{ + StemmedDrawingInterface *GetStemmedDrawingInterface() override + { + return dynamic_cast(this); + } + ///@} + /** Override the method since alignment is required */ bool HasToBeAligned() const override { return true; } @@ -41,10 +52,35 @@ class TabDurSym : public LayerElement, public AttNNumberLike { */ bool IsSupportedChild(Object *object) override; + /** + * Overwritten method for note + */ + void AddChild(Object *object) override; + + /** + * Get the stem up / stem down attachment point. + * If necessary look at the glyph anchor (if any). + */ + ///@{ + Point GetStemUpSE(Doc *doc, int staffSize, bool isCueSize) override; + Point GetStemDownNW(Doc *doc, int staffSize, bool isCueSize) override; + int CalcStemLenInThirdUnits(Staff *staff, data_STEMDIRECTION stemDir) override; + ///@} + //----------// // Functors // //----------// + /** + * See Object::PrepareLayerElementParts + */ + int PrepareLayerElementParts(FunctorParams *functorParams) override; + + /** + * See Object::CalcStem + */ + int CalcStem(FunctorParams *functorParams) override; + protected: // private: diff --git a/src/tabdursym.cpp b/src/tabdursym.cpp index d4bdfabaf69..706fa7c8c3b 100644 --- a/src/tabdursym.cpp +++ b/src/tabdursym.cpp @@ -13,7 +13,10 @@ //---------------------------------------------------------------------------- +#include "elementpart.h" #include "functorparams.h" +#include "layer.h" +#include "staff.h" namespace vrv { @@ -23,7 +26,7 @@ namespace vrv { static const ClassRegistrar s_factory("tabDurSym", TABDURSYM); -TabDurSym::TabDurSym() : LayerElement(TABDURSYM, "tabdursym-"), AttNNumberLike() +TabDurSym::TabDurSym() : LayerElement(TABDURSYM, "tabdursym-"), StemmedDrawingInterface(), AttNNumberLike() { this->RegisterAttClass(ATT_NNUMBERLIKE); @@ -35,12 +38,48 @@ TabDurSym::~TabDurSym() {} void TabDurSym::Reset() { LayerElement::Reset(); + StemmedDrawingInterface::Reset(); this->ResetNNumberLike(); } bool TabDurSym::IsSupportedChild(Object *child) { return false; +Point TabDurSym::GetStemUpSE(Doc *doc, int staffSize, bool isCueSize) +{ + Point p(0, 0); + return p; +} + +Point TabDurSym::GetStemDownNW(Doc *doc, int staffSize, bool isCueSize) +{ + Point p(0, 0); + return p; +} + +int TabDurSym::CalcStemLenInThirdUnits(Staff *staff, data_STEMDIRECTION stemDir) +{ + assert(staff); + + if ((stemDir != STEMDIRECTION_down) && (stemDir != STEMDIRECTION_up)) { + return 0; + } + + int baseStem = STANDARD_STEMLENGTH * 3; + + return baseStem; +} + +//---------------------------------------------------------------------------- +// Functors methods +//---------------------------------------------------------------------------- + +int TabDurSym::PrepareLayerElementParts(FunctorParams *functorParams) +{ +} + +int TabDurSym::CalcStem(FunctorParams *functorParams) +{ } } // namespace vrv From 7cd1d6e018d77319214a37265f1ab9e31b787cbb Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 31 Jan 2022 08:03:19 +0100 Subject: [PATCH 231/403] Allow Stem as child of TabDurSym --- src/tabdursym.cpp | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/tabdursym.cpp b/src/tabdursym.cpp index 706fa7c8c3b..32b8716316f 100644 --- a/src/tabdursym.cpp +++ b/src/tabdursym.cpp @@ -44,7 +44,37 @@ void TabDurSym::Reset() bool TabDurSym::IsSupportedChild(Object *child) { - return false; + if (child->Is(STEM)) { + assert(dynamic_cast(child)); + } + else { + return false; + } + return true; +} + +void TabDurSym::AddChild(Object *child) +{ + if (!this->IsSupportedChild(child)) { + LogError("Adding '%s' to a '%s'", child->GetClassName().c_str(), this->GetClassName().c_str()); + return; + } + + child->SetParent(this); + + ArrayOfObjects *children = this->GetChildrenForModification(); + + // Stem are always added by PrepareLayerElementParts (for now) and we want them to be in the front + // for the drawing order in the SVG output + if (child->Is(STEM)) { + children->insert(children->begin(), child); + } + else { + children->push_back(child); + } + Modify(); +} + Point TabDurSym::GetStemUpSE(Doc *doc, int staffSize, bool isCueSize) { Point p(0, 0); From f40ddbd31cfb076da47b7d9b97f7a1fcd10130c2 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 31 Jan 2022 08:04:19 +0100 Subject: [PATCH 232/403] Implement TabDurSym::PrepareLayerElementParts to add Stem --- src/tabdursym.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/tabdursym.cpp b/src/tabdursym.cpp index 32b8716316f..1d737a3728f 100644 --- a/src/tabdursym.cpp +++ b/src/tabdursym.cpp @@ -106,6 +106,15 @@ int TabDurSym::CalcStemLenInThirdUnits(Staff *staff, data_STEMDIRECTION stemDir) int TabDurSym::PrepareLayerElementParts(FunctorParams *functorParams) { + Stem *currentStem = dynamic_cast(this->FindDescendantByType(STEM, 1)); + + if (!currentStem) { + currentStem = new Stem(); + this->AddChild(currentStem); + } + this->SetDrawingStem(currentStem); + + return FUNCTOR_SIBLINGS; } int TabDurSym::CalcStem(FunctorParams *functorParams) From 340e998ea6fd919eaf81d5a2a4fae8b276538181 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 31 Jan 2022 08:05:00 +0100 Subject: [PATCH 233/403] Add Layer::GetDrawingStemDirection to get global stem direction of the layer --- include/vrv/layer.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/vrv/layer.h b/include/vrv/layer.h index 29f23dd87a9..5fcea1178c1 100644 --- a/include/vrv/layer.h +++ b/include/vrv/layer.h @@ -100,6 +100,7 @@ class Layer : public Object, void SetDrawingStemDir(data_STEMDIRECTION stemDirection) { m_drawingStemDir = stemDirection; } data_STEMDIRECTION GetDrawingStemDir(LayerElement *element); data_STEMDIRECTION GetDrawingStemDir(const ArrayOfBeamElementCoords *coords); + data_STEMDIRECTION GetDrawingStemDir() const { return m_drawingStemDir; } ///@} /** From 9894b57e94a20230d42f412ef10a7faaec48e370 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 31 Jan 2022 08:05:46 +0100 Subject: [PATCH 234/403] Set the Beam position for Tab according to encoding or number of layers --- src/beam.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/beam.cpp b/src/beam.cpp index a1c313ffc03..cdb884ab13f 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -122,7 +122,16 @@ void BeamSegment::CalcTabBeam( beamInterface->m_beamWidth = beamInterface->m_beamWidthBlack + beamInterface->m_beamWidthWhite; - beamInterface->m_drawingPlace = (place == BEAMPLACE_below) ? BEAMPLACE_below : BEAMPLACE_above; + if (place != BEAMPLACE_NONE) { + beamInterface->m_drawingPlace = (place == BEAMPLACE_below) ? BEAMPLACE_below : BEAMPLACE_above; + } + // Do we have more that one layer? + else { + data_STEMDIRECTION layerStemDir = layer->GetDrawingStemDir(); + // The layerStemDir can be none (single layer), up (1st layer), or down (2n layer) + // Is is put above by default with tablature with a single layer + beamInterface->m_drawingPlace = (layerStemDir == STEMDIRECTION_down) ? BEAMPLACE_below : BEAMPLACE_above; + } for (auto coord : m_beamElementCoordRefs) { // All notes and chords get their stem value stored From 4ecbb657d02946d21f047b6b42e47dc255de3e2b Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 31 Jan 2022 08:06:35 +0100 Subject: [PATCH 235/403] Add TabGrp::CalcStem to pass the actual duration to TabDurSym --- include/vrv/tabgrp.h | 5 +++++ src/tabgrp.cpp | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/include/vrv/tabgrp.h b/include/vrv/tabgrp.h index ee4534d0d0a..0ab26013c8b 100644 --- a/include/vrv/tabgrp.h +++ b/include/vrv/tabgrp.h @@ -54,6 +54,11 @@ class TabGrp : public LayerElement, public DurationInterface { */ virtual int CalcOnsetOffsetEnd(FunctorParams *functorParams) override; + /** + * See Object::CalcStem + */ + int CalcStem(FunctorParams *functorParams) override; + protected: // private: diff --git a/src/tabgrp.cpp b/src/tabgrp.cpp index 16b4d32d365..0809ad7d483 100644 --- a/src/tabgrp.cpp +++ b/src/tabgrp.cpp @@ -80,4 +80,14 @@ int TabGrp::CalcOnsetOffsetEnd(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int TabGrp::CalcStem(FunctorParams *functorParams) +{ + CalcStemParams *params = vrv_params_cast(functorParams); + assert(params); + + params->m_dur = this->GetActualDur(); + + return FUNCTOR_CONTINUE; +} + } // namespace vrv From 9ba14e64ed62fe1e1da21d10bf5167087b07666a Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 31 Jan 2022 08:08:25 +0100 Subject: [PATCH 236/403] Implement TabDurSym::CalcStem (WIP) * Set the stem direction according to encoding or number of layers * Set and arbitrary stem length for now --- src/tabdursym.cpp | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/tabdursym.cpp b/src/tabdursym.cpp index 1d737a3728f..d617c361b2a 100644 --- a/src/tabdursym.cpp +++ b/src/tabdursym.cpp @@ -119,6 +119,54 @@ int TabDurSym::PrepareLayerElementParts(FunctorParams *functorParams) int TabDurSym::CalcStem(FunctorParams *functorParams) { + CalcStemParams *params = vrv_params_cast(functorParams); + assert(params); + + // Stems have been calculated previously in Beam + if (this->IsInBeam()) { + return FUNCTOR_SIBLINGS; + } + + // This now need should be NULL and the chord stem length will be 0 + params->m_interface = NULL; + params->m_chordStemLength = 0; + + Stem *stem = this->GetDrawingStem(); + assert(stem); + + // Cache the in params to avoid further lookup + params->m_staff = this->GetAncestorStaff(); + assert(params->m_staff); + params->m_layer = vrv_cast(this->GetFirstAncestor(LAYER)); + assert(params->m_layer); + params->m_interface = this; + // Grace an stem sameas not supported in tablature + params->m_isGraceNote = false; + params->m_stemSameas = false; + + int staffSize = params->m_staff->m_drawingStaffSize; + + /************ Set the direction ************/ + + data_STEMDIRECTION layerStemDir; + // Up by default with tablature + data_STEMDIRECTION stemDir = STEMDIRECTION_up; + + if (stem->HasStemDir()) { + stemDir = stem->GetStemDir(); + } + else if ((layerStemDir = params->m_layer->GetDrawingStemDir()) != STEMDIRECTION_NONE) { + stemDir = layerStemDir; + } + + this->SetDrawingStemDir(stemDir); + + // Make sure the relative position of the stem is the same + stem->SetDrawingYRel(0); + // WIP for now set a default stem length + stem->SetDrawingStemLen(4 * params->m_doc->GetDrawingUnit(staffSize)); + + return FUNCTOR_SIBLINGS; } } // namespace vrv From 7bda20d56a9d288c74834f4e38923cce5fc977f9 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 31 Jan 2022 08:09:13 +0100 Subject: [PATCH 237/403] Avoid adding a Stem to Note in tablature (Stem belongs to TabDurSym) --- src/note.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/note.cpp b/src/note.cpp index fe5cf10a7ed..2ccea3f317f 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -1263,7 +1263,7 @@ int Note::PrepareLayerElementParts(FunctorParams *functorParams) Chord *chord = this->IsChordTone(); if (currentStem) currentFlag = dynamic_cast(currentStem->GetFirst(FLAG)); - if (!this->IsChordTone() && !this->IsMensuralDur()) { + if (!this->IsChordTone() && !this->IsMensuralDur() && !this->IsTabGrpNote()) { if (!currentStem) { currentStem = new Stem(); this->AddChild(currentStem); @@ -1285,7 +1285,7 @@ int Note::PrepareLayerElementParts(FunctorParams *functorParams) } if ((this->GetActualDur() > DUR_4) && !this->IsInBeam() && !this->IsInFTrem() && !this->IsChordTone() - && !this->IsMensuralDur() && !this->HasStemSameasNote()) { + && !this->IsMensuralDur() && !this->HasStemSameasNote() && !this->IsTabGrpNote()) { // We should have a stem at this stage assert(currentStem); if (!currentFlag) { From 523f7591f9ff30bb5066b2d169e0599669234c24 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 31 Jan 2022 08:09:40 +0100 Subject: [PATCH 238/403] Adjust comment --- src/view_tab.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/view_tab.cpp b/src/view_tab.cpp index f74e3b2e774..998380e6000 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -207,7 +207,7 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, } } - // Draw children (nothing yet) + // Draw children (stems) this->DrawLayerChildren(dc, tabDurSym, layer, staff, measure); dc->EndGraphic(tabDurSym, this); From 51d65074b779cba9d83d83cb8092b8b03b8779c5 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 31 Jan 2022 08:10:25 +0100 Subject: [PATCH 239/403] Adjust tuplet number size for tablature --- src/view_tuplet.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/view_tuplet.cpp b/src/view_tuplet.cpp index 70e01788c41..b83cb5a330c 100644 --- a/src/view_tuplet.cpp +++ b/src/view_tuplet.cpp @@ -169,7 +169,8 @@ void View::DrawTupletNum(DeviceContext *dc, LayerElement *element, Layer *layer, std::wstring notes; const bool drawingCueSize = tuplet->GetDrawingCueSize(); - dc->SetFont(m_doc->GetDrawingSmuflFont(staff->m_drawingStaffSize, drawingCueSize)); + const int glyphSize = staff->GetDrawingStaffNotationSize(); + dc->SetFont(m_doc->GetDrawingSmuflFont(glyphSize, drawingCueSize)); notes = IntToTupletFigures((short int)tuplet->GetNum()); if (tuplet->GetNumFormat() == tupletVis_NUMFORMAT_ratio) { notes.push_back(SMUFL_E88A_tupletColon); @@ -183,11 +184,11 @@ void View::DrawTupletNum(DeviceContext *dc, LayerElement *element, Layer *layer, int y = tupletNum->GetDrawingYMid(); // adjust the baseline (to be improved with slanted brackets - y -= m_doc->GetGlyphHeight(notes.back(), staff->m_drawingStaffSize, drawingCueSize) / 2; + y -= m_doc->GetGlyphHeight(notes.back(), glyphSize, drawingCueSize) / 2; dc->ResumeGraphic(tupletNum, tupletNum->GetUuid()); - this->DrawSmuflString(dc, x, y, notes, HORIZONTALALIGNMENT_left, staff->m_drawingStaffSize, drawingCueSize); + this->DrawSmuflString(dc, x, y, notes, HORIZONTALALIGNMENT_left, glyphSize, drawingCueSize); dc->EndResumedGraphic(tupletNum, this); From b4af5f99b97aeef56b169fd1c2b004309ad230d9 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 1 Feb 2022 20:13:16 +0100 Subject: [PATCH 240/403] Avoid Note::CalcStem in tablature (single notes) and adjust comment --- src/note.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/note.cpp b/src/note.cpp index 2ccea3f317f..ba9aebe1de2 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -970,14 +970,15 @@ int Note::CalcStem(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - // Stems have been calculated previously in Beam or fTrem - siblings because flags do not need to - // be processed either - except when there is a stemSameasNote + // Stems have been calculated previously in Beam or fTrem + // Return to siblings because flags do not need to be processed either in that case if ((this->IsInBeam() || this->IsInFTrem())) { return FUNCTOR_SIBLINGS; } // We currently have no stem object with mensural notes - if (this->IsMensuralDur()) { + // We also have no stem with tab because it belongs to tabDurSym in this case + if (this->IsMensuralDur() || this->IsTabGrpNote()) { return FUNCTOR_SIBLINGS; } From aafa087bc4d08a74153a317abe00d87d4c8f3d75 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 1 Feb 2022 21:58:26 +0100 Subject: [PATCH 241/403] Make TabGrp inherit from ObjectListInterface * Add TabFretSort unary class * Implement TabGrp::FilterList --- include/vrv/note.h | 25 ++++++++++++++++++++++--- include/vrv/tabgrp.h | 8 ++++++-- src/tabgrp.cpp | 14 +++++++++++++- 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/include/vrv/note.h b/include/vrv/note.h index 7ac6704a632..f992441fff4 100644 --- a/include/vrv/note.h +++ b/include/vrv/note.h @@ -410,9 +410,7 @@ class Note : public LayerElement, //---------------------------------------------------------------------------- /** - * Unary predicate for comparing object types. - * This is used for example in std::find_if. - * See Object::GetFirst or Object::GetNext + * Unary predicate for sorting notes by diatonic pitch */ class DiatonicSort { @@ -428,6 +426,27 @@ class DiatonicSort { } }; +//---------------------------------------------------------------------------- +// TabFretSort +//---------------------------------------------------------------------------- + +/** + * Unary predicate for sorting notes by fret number + */ +class TabFretSort { + +public: + TabFretSort() {} + + bool operator()(const Object *first, const Object *second) const + { + const Note *n1 = dynamic_cast(first); + const Note *n2 = dynamic_cast(second); + assert(n1 && n2); + return (n1->GetTabFret() < n2->GetTabFret()); + } +}; + } // namespace vrv #endif diff --git a/include/vrv/tabgrp.h b/include/vrv/tabgrp.h index 0ab26013c8b..a341f06c03e 100644 --- a/include/vrv/tabgrp.h +++ b/include/vrv/tabgrp.h @@ -20,7 +20,7 @@ namespace vrv { /** * This class models the MEI element. */ -class TabGrp : public LayerElement, public DurationInterface { +class TabGrp : public LayerElement, public ObjectListInterface, public DurationInterface { public: /** * @name Constructors, destructors, and other standard methods @@ -60,7 +60,11 @@ class TabGrp : public LayerElement, public DurationInterface { int CalcStem(FunctorParams *functorParams) override; protected: - // + /** + * Filter the flat list and keep only Note elements. + */ + void FilterList(ArrayOfObjects *childList) override; + private: // public: diff --git a/src/tabgrp.cpp b/src/tabgrp.cpp index 0809ad7d483..1a8750e84d2 100644 --- a/src/tabgrp.cpp +++ b/src/tabgrp.cpp @@ -26,7 +26,7 @@ namespace vrv { static const ClassRegistrar s_factory("tabGrp", TABGRP); -TabGrp::TabGrp() : LayerElement(TABGRP, "tabgrp-"), DurationInterface() +TabGrp::TabGrp() : LayerElement(TABGRP, "tabgrp-"), ObjectListInterface(), DurationInterface() { this->RegisterInterface(DurationInterface::GetAttClasses(), DurationInterface::IsInterface()); @@ -58,6 +58,18 @@ bool TabGrp::IsSupportedChild(Object *child) return true; } +void TabGrp::FilterList(ArrayOfObjects *childList) +{ + // Retain only note children of chords + ArrayOfObjects::iterator iter = childList->begin(); + + while (iter != childList->end()) { + iter = ((*iter)->Is(NOTE)) ? iter + 1 : childList->erase(iter); + } + + std::sort(childList->begin(), childList->end(), TabFretSort()); +} + //---------------------------------------------------------------------------- // Functor methods //---------------------------------------------------------------------------- From 32c5f1807eaaf6339a95c36eea4624a708080090 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 1 Feb 2022 21:58:59 +0100 Subject: [PATCH 242/403] Add helper to get top and bottom note / y of a TabGrp --- include/vrv/tabgrp.h | 10 ++++++++++ src/tabgrp.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/include/vrv/tabgrp.h b/include/vrv/tabgrp.h index a341f06c03e..9b12407316b 100644 --- a/include/vrv/tabgrp.h +++ b/include/vrv/tabgrp.h @@ -45,6 +45,16 @@ class TabGrp : public LayerElement, public ObjectListInterface, public DurationI */ bool IsSupportedChild(Object *object) override; + /** + * Return the top or bottom note or their Y position + */ + ///@{ + Note *GetTopNote(); + Note *GetBottomNote(); + int GetYTop(); + int GetYBottom(); + ///@} + //----------// // Functors // //----------// diff --git a/src/tabgrp.cpp b/src/tabgrp.cpp index 1a8750e84d2..125a3861265 100644 --- a/src/tabgrp.cpp +++ b/src/tabgrp.cpp @@ -70,6 +70,45 @@ void TabGrp::FilterList(ArrayOfObjects *childList) std::sort(childList->begin(), childList->end(), TabFretSort()); } +int TabGrp::GetYTop() +{ + const ArrayOfObjects *childList = this->GetList(this); // make sure it's initialized + assert(childList->size() > 0); + + // The last note is the top + return childList->back()->GetDrawingY(); +} + +int TabGrp::GetYBottom() +{ + const ArrayOfObjects *childList = this->GetList(this); // make sure it's initialized + assert(childList->size() > 0); + + // The first note is the bottom + return childList->front()->GetDrawingY(); +} + +Note *TabGrp::GetTopNote() +{ + const ArrayOfObjects *childList = this->GetList(this); // make sure it's initialized + assert(childList->size() > 0); + + Note *topNote = vrv_cast(childList->back()); + assert(topNote); + return topNote; +} + +Note *TabGrp::GetBottomNote() +{ + const ArrayOfObjects *childList = this->GetList(this); // make sure it's initialized + assert(childList->size() > 0); + + // The first note is the bottom + Note *bottomNote = vrv_cast(childList->front()); + assert(bottomNote); + return bottomNote; +} + //---------------------------------------------------------------------------- // Functor methods //---------------------------------------------------------------------------- From b783ab3d78da1401384c9b083505092bc1fafc84 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 1 Feb 2022 22:00:09 +0100 Subject: [PATCH 243/403] Adjust BeamElementCoord::SetClosestNote to also consider tabGrp notes --- src/beam.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/beam.cpp b/src/beam.cpp index cdb884ab13f..c596c667c39 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -28,6 +28,7 @@ #include "smufl.h" #include "space.h" #include "staff.h" +#include "tabdursym.h" #include "tabgrp.h" #include "tuplet.h" #include "verticalaligner.h" @@ -1635,6 +1636,11 @@ void BeamElementCoord::SetClosestNote(data_STEMDIRECTION stemDir) assert(chord); m_closestNote = (STEMDIRECTION_up == stemDir) ? chord->GetTopNote() : chord->GetBottomNote(); } + else if (m_element->Is(TABGRP)) { + TabGrp *tabGrp = vrv_cast(m_element); + assert(tabGrp); + m_closestNote = (STEMDIRECTION_up == stemDir) ? tabGrp->GetTopNote() : tabGrp->GetBottomNote(); + } } int Beam::CalcLayerOverlap(Doc *doc, Object *beam, int directionBias, int y1, int y2) From ff9e719f1a8d3421d169752c7a10acf3288103d5 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 1 Feb 2022 22:01:10 +0100 Subject: [PATCH 244/403] Add calls to set stem length and calculate beam slope --- src/beam.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/beam.cpp b/src/beam.cpp index c596c667c39..60139dcfa77 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -134,6 +134,10 @@ void BeamSegment::CalcTabBeam( beamInterface->m_drawingPlace = (layerStemDir == STEMDIRECTION_down) ? BEAMPLACE_below : BEAMPLACE_above; } + bool horizontal = false; + CalcBeamStemLength(staff, beamInterface->m_drawingPlace, horizontal); + + CalcBeamPosition(doc, staff, layer, beamInterface, horizontal); for (auto coord : m_beamElementCoordRefs) { // All notes and chords get their stem value stored LayerElement *el = coord->m_element; From 98366cdc832f5b1e1042d14bdc61d6222523f357 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 1 Feb 2022 22:01:47 +0100 Subject: [PATCH 245/403] Set tabDurSym stem direction and length within beams --- src/beam.cpp | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/beam.cpp b/src/beam.cpp index 60139dcfa77..6cdeb914c8b 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -138,11 +138,46 @@ void BeamSegment::CalcTabBeam( CalcBeamStemLength(staff, beamInterface->m_drawingPlace, horizontal); CalcBeamPosition(doc, staff, layer, beamInterface, horizontal); + + data_STEMDIRECTION stemDir + = (beamInterface->m_drawingPlace == BEAMPLACE_above) ? STEMDIRECTION_up : STEMDIRECTION_down; for (auto coord : m_beamElementCoordRefs) { // All notes and chords get their stem value stored LayerElement *el = coord->m_element; if (el->Is(TABGRP)) { - coord->m_yBeam = y; + TabGrp *tabGrp = vrv_cast(el); + assert(tabGrp); + TabDurSym *tabDurSym = vrv_cast(tabGrp->FindDescendantByType(TABDURSYM)); + + if (!tabDurSym) continue; + + tabDurSym->CalcDrawingYRel(stemDir); + // coord->m_yBeam = y; + + StemmedDrawingInterface *stemmedInterface = tabDurSym->GetStemmedDrawingInterface(); + assert(beamInterface); + + assert(coord->m_closestNote); + + int y1 = coord->m_yBeam; + + int y2 = coord->m_closestNote->GetDrawingY(); + if (beamInterface->m_drawingPlace == BEAMPLACE_above) { + // Move down to ensure the stem is slightly shorter than the top-beam + y1 -= doc->GetDrawingStemWidth(staff->m_drawingStaffSize); + } + else { + y1 += doc->GetDrawingStemWidth(staff->m_drawingStaffSize); + } + + Stem *stem = stemmedInterface->GetDrawingStem(); + // This is the case with fTrem on whole notes + if (!stem) continue; + + stem->SetDrawingStemDir(stemDir); + stem->SetDrawingXRel(coord->m_x - el->GetDrawingX()); + stem->SetDrawingYRel(y2 - el->GetDrawingY()); + stem->SetDrawingStemLen(y2 - y1); } } } From 9d3ed0864cf31e63e7cbecc127284bfecb1f9233 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 08:44:07 +0100 Subject: [PATCH 246/403] Remove tab specific Beam::CalcTabBeam --- include/vrv/beam.h | 2 - src/beam.cpp | 98 ---------------------------------------------- src/view_beam.cpp | 5 +-- 3 files changed, 1 insertion(+), 104 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 3ffd24a57ef..1cbb89e19c3 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -46,8 +46,6 @@ class BeamSegment { void CalcBeam(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place = BEAMPLACE_NONE, bool init = true); - void CalcTabBeam(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place); - /** * */ diff --git a/src/beam.cpp b/src/beam.cpp index 6cdeb914c8b..d942691c30c 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -84,104 +84,6 @@ void BeamSegment::InitCoordRefs(const ArrayOfBeamElementCoords *beamElementCoord m_beamElementCoordRefs = *beamElementCoords; } -void BeamSegment::CalcTabBeam( - Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place) -{ - assert(layer); - assert(staff); - assert(doc); - - // Calculate the y position of the beam - this currently need to be inline with the code in View::DrawTabGrp that - // draws the stems. - int glyphSize = staff->GetDrawingStaffNotationSize(); - beamInterface->m_fractionSize = glyphSize * 2 / 3; - - assert(m_beamElementCoordRefs.size() > 0); - - int y = staff->GetDrawingY(); - - // Get the y position of the first tabDurSym - assert(m_beamElementCoordRefs.at(0)->m_element); - LayerElement *tabDurSym - = vrv_cast(m_beamElementCoordRefs.at(0)->m_element->FindDescendantByType(TABDURSYM)); - if (tabDurSym) y = tabDurSym->GetDrawingY(); - - const int height = doc->GetGlyphHeight(SMUFL_EBA8_luteDurationHalf, glyphSize, true); - y += height; - - this->CalcBeamInit(layer, staff, doc, beamInterface, place); - - // Adjust the height and spacing of the beams - beamInterface->m_beamWidthBlack /= 2; - beamInterface->m_beamWidthWhite /= 2; - - // Adjust it further for tab.lute.french and tab.lute.italian - if (staff->IsTabLuteFrench() || staff->IsTabLuteItalian()) { - beamInterface->m_beamWidthBlack = beamInterface->m_beamWidthBlack * 2 / 5; - beamInterface->m_beamWidthWhite = beamInterface->m_beamWidthWhite * 3 / 5; - } - - beamInterface->m_beamWidth = beamInterface->m_beamWidthBlack + beamInterface->m_beamWidthWhite; - - if (place != BEAMPLACE_NONE) { - beamInterface->m_drawingPlace = (place == BEAMPLACE_below) ? BEAMPLACE_below : BEAMPLACE_above; - } - // Do we have more that one layer? - else { - data_STEMDIRECTION layerStemDir = layer->GetDrawingStemDir(); - // The layerStemDir can be none (single layer), up (1st layer), or down (2n layer) - // Is is put above by default with tablature with a single layer - beamInterface->m_drawingPlace = (layerStemDir == STEMDIRECTION_down) ? BEAMPLACE_below : BEAMPLACE_above; - } - - bool horizontal = false; - CalcBeamStemLength(staff, beamInterface->m_drawingPlace, horizontal); - - CalcBeamPosition(doc, staff, layer, beamInterface, horizontal); - - data_STEMDIRECTION stemDir - = (beamInterface->m_drawingPlace == BEAMPLACE_above) ? STEMDIRECTION_up : STEMDIRECTION_down; - for (auto coord : m_beamElementCoordRefs) { - // All notes and chords get their stem value stored - LayerElement *el = coord->m_element; - if (el->Is(TABGRP)) { - TabGrp *tabGrp = vrv_cast(el); - assert(tabGrp); - TabDurSym *tabDurSym = vrv_cast(tabGrp->FindDescendantByType(TABDURSYM)); - - if (!tabDurSym) continue; - - tabDurSym->CalcDrawingYRel(stemDir); - // coord->m_yBeam = y; - - StemmedDrawingInterface *stemmedInterface = tabDurSym->GetStemmedDrawingInterface(); - assert(beamInterface); - - assert(coord->m_closestNote); - - int y1 = coord->m_yBeam; - - int y2 = coord->m_closestNote->GetDrawingY(); - if (beamInterface->m_drawingPlace == BEAMPLACE_above) { - // Move down to ensure the stem is slightly shorter than the top-beam - y1 -= doc->GetDrawingStemWidth(staff->m_drawingStaffSize); - } - else { - y1 += doc->GetDrawingStemWidth(staff->m_drawingStaffSize); - } - - Stem *stem = stemmedInterface->GetDrawingStem(); - // This is the case with fTrem on whole notes - if (!stem) continue; - - stem->SetDrawingStemDir(stemDir); - stem->SetDrawingXRel(coord->m_x - el->GetDrawingX()); - stem->SetDrawingYRel(y2 - el->GetDrawingY()); - stem->SetDrawingStemLen(y2 - y1); - } - } -} - void BeamSegment::CalcBeam( Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place, bool init) { diff --git a/src/view_beam.cpp b/src/view_beam.cpp index a008760a0b3..a1a40525446 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -61,10 +61,7 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf /******************************************************************/ // Calculate the beam slope and position - if (isTabBeam) { - beam->m_beamSegment.CalcTabBeam(layer, beam->m_beamStaff, m_doc, beam, initialPlace); - } - else if (!beam->m_beamSegment.StemSameasIsSecondary()) { + if (!beam->m_beamSegment.StemSameasIsSecondary()) { beam->m_beamSegment.CalcBeam(layer, beam->m_beamStaff, m_doc, beam, initialPlace); } From 343fa04fd7e9b1fb87d3b369576e03ff7c3e7a42 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 08:47:17 +0100 Subject: [PATCH 247/403] Add helper to BeamCoord to get the associated StemmedDrawingInterface --- include/vrv/beam.h | 8 ++++++++ src/beam.cpp | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 1cbb89e19c3..89313e47635 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -311,6 +311,14 @@ class BeamElementCoord { */ int CalculateStemModAdjustment(int stemLength, int directionBias); + /** + * Helper to get the StemmedDrawingInterface associated with the m_element (if any) + * Return the Chord or Note interface if the element if of that type. + * Return the TabDurSym interface if the element is TabDurGrp and has a TabDurSym descendant. + * Return NULL otherwise. + */ + StemmedDrawingInterface *GetStemHolderInterface(); + int m_x; int m_yBeam; // y value of stem top position int m_dur; // drawing duration diff --git a/src/beam.cpp b/src/beam.cpp index d942691c30c..1dcac24c3ea 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1566,6 +1566,20 @@ int BeamElementCoord::CalculateStemModAdjustment(int stemLength, int directionBi return 0; } +StemmedDrawingInterface *BeamElementCoord::GetStemHolderInterface() +{ + if (!m_element || !m_element->Is({ CHORD, NOTE, TABGRP })) return NULL; + + if (m_element->Is({ CHORD, NOTE })) return m_element->GetStemmedDrawingInterface(); + + TabGrp *tabGrp = vrv_cast(m_element); + assert(tabGrp); + TabDurSym *tabDurSym = vrv_cast(tabGrp->FindDescendantByType(TABDURSYM)); + if (tabDurSym) return tabDurSym->GetStemmedDrawingInterface(); + + return NULL; +} + void BeamElementCoord::SetClosestNote(data_STEMDIRECTION stemDir) { m_closestNote = NULL; From 5e77170e7ea9ac961cad93a9080be405ac7b8682 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 08:48:36 +0100 Subject: [PATCH 248/403] Add tab dedicated method for calculating beam place --- include/vrv/beam.h | 2 ++ src/beam.cpp | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 89313e47635..1cfcd00ca60 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -115,6 +115,8 @@ class BeamSegment { void CalcBeamPlace(Layer *layer, BeamDrawingInterface *beamInterface, data_BEAMPLACE place); + void CalcBeamPlaceTab(Layer *layer, BeamDrawingInterface *beamInterface, data_BEAMPLACE place); + // Helper to calculate the longest stem length of the beam (which will be used uniformely) void CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool isHorizontal); diff --git a/src/beam.cpp b/src/beam.cpp index 1dcac24c3ea..2c95bc194df 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1048,6 +1048,23 @@ void BeamSegment::CalcBeamPlace(Layer *layer, BeamDrawingInterface *beamInterfac // if (beamInterface->m_drawingPlace == BEAMPLACE_mixed) beamInterface->m_drawingPlace = BEAMPLACE_above; } +void BeamSegment::CalcBeamPlaceTab(Layer *layer, BeamDrawingInterface *beamInterface, data_BEAMPLACE place) +{ + assert(layer); + assert(beamInterface); + + if (place != BEAMPLACE_NONE) { + beamInterface->m_drawingPlace = (place == BEAMPLACE_below) ? BEAMPLACE_below : BEAMPLACE_above; + } + // Do we have more that one layer? + else { + data_STEMDIRECTION layerStemDir = layer->GetDrawingStemDir(); + // The layerStemDir can be none (single layer), up (1st layer), or down (2n layer) + // Is is put above by default with tablature with a single layer + beamInterface->m_drawingPlace = (layerStemDir == STEMDIRECTION_down) ? BEAMPLACE_below : BEAMPLACE_above; + } +} + void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool isHorizontal) { const data_STEMDIRECTION stemDir = (place == BEAMPLACE_below) ? STEMDIRECTION_down : STEMDIRECTION_up; From 3cf7a0588a1358ffe9637391077af5dc51fc5b61 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 08:52:47 +0100 Subject: [PATCH 249/403] Add distinct (staff notation / tab) helpers to set stem values --- include/vrv/beam.h | 6 ++++ src/beam.cpp | 71 +++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 70 insertions(+), 7 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 1cfcd00ca60..79955d4d436 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -120,6 +120,12 @@ class BeamSegment { // Helper to calculate the longest stem length of the beam (which will be used uniformely) void CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool isHorizontal); + // Helper to set the stem values + void CalcSetStemValues(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface); + + // Helper to set the stem values for tablature + void CalcSetStemValuesTab(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface); + // Helper to calculate relative position of the beam to for each of the coordinates void CalcMixedBeamPlace(Staff *staff); diff --git a/src/beam.cpp b/src/beam.cpp index 2c95bc194df..1d678880f58 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -91,7 +91,6 @@ void BeamSegment::CalcBeam( assert(staff); assert(doc); - int y1, y2; assert(m_beamElementCoordRefs.size() > 0); // For recursive calls, avoid to re-init values @@ -124,18 +123,34 @@ void BeamSegment::CalcBeam( } } - // ArrayOfBeamElementCoords stemUps; - // ArrayOfBeamElementCoords stemDowns; - /******************************************************************/ // Set the stem lengths to stem objects + if (staff->IsTablature()) { + this->CalcSetStemValuesTab(layer, staff, doc, beamInterface); + } + else { + this->CalcSetStemValues(layer, staff, doc, beamInterface); + } +} + +void BeamSegment::CalcSetStemValues(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface) +{ + assert(layer); + assert(staff); + assert(doc); + assert(beamInterface); + + int y1, y2; + for (auto coord : m_beamElementCoordRefs) { // All notes and chords get their stem value stored LayerElement *el = coord->m_element; - if ((el->Is(NOTE)) || (el->Is(CHORD))) { - StemmedDrawingInterface *stemmedInterface = el->GetStemmedDrawingInterface(); - assert(beamInterface); + if (el->Is({ CHORD, NOTE })) { + + // Get the interface for the chord or note + StemmedDrawingInterface *stemmedInterface = coord->GetStemHolderInterface(); + if (!stemmedInterface) continue; assert(coord->m_closestNote); @@ -215,6 +230,48 @@ void BeamSegment::CalcBeam( } } +void BeamSegment::CalcSetStemValuesTab(Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface) +{ + assert(layer); + assert(staff); + assert(doc); + assert(beamInterface); + + int y1, y2; + + for (auto coord : m_beamElementCoordRefs) { + // All notes and chords get their stem value stored + LayerElement *el = coord->m_element; + if (el->Is(TABGRP)) { + // Get the interface from child tabDurSym + StemmedDrawingInterface *stemmedInterface = coord->GetStemHolderInterface(); + if (!stemmedInterface) continue; + + assert(coord->m_closestNote); + + y1 = coord->m_yBeam; + + y2 = coord->m_closestNote->GetDrawingY(); + if (beamInterface->m_drawingPlace == BEAMPLACE_above) { + // Move down to ensure the stem is slightly shorter than the top-beam + y1 -= doc->GetDrawingStemWidth(staff->m_drawingStaffSize); + } + else { + y1 += doc->GetDrawingStemWidth(staff->m_drawingStaffSize); + } + + Stem *stem = stemmedInterface->GetDrawingStem(); + // This is the case with fTrem on whole notes + if (!stem) continue; + + // stem->SetDrawingStemDir(stemDir); + stem->SetDrawingXRel(coord->m_x - el->GetDrawingX()); + stem->SetDrawingYRel(y2 - el->GetDrawingY()); + stem->SetDrawingStemLen(y2 - y1); + } + } +} + bool BeamSegment::DoesBeamOverlap(int staffTop, int topOffset, int staffBottom, int bottomOffset) { // find if current beam fits within the staff From d469f9299e5bf04da25ccab3e99e7c5921aec708 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 08:54:21 +0100 Subject: [PATCH 250/403] Adjust Beam::CalcBeamInit to deal with tablature notation * We do this here because we removed Beam::CalcTabBeam --- src/beam.cpp | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/beam.cpp b/src/beam.cpp index 1d678880f58..9005a2583e6 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -441,13 +441,31 @@ void BeamSegment::CalcBeamInit( } beamInterface->m_beamWidth = beamInterface->m_beamWidthBlack + beamInterface->m_beamWidthWhite; - // x-offset values for stem bases, dx[y] where y = element->m_cueSize - beamInterface->m_stemXAbove[0] = doc->GetGlyphWidth(SMUFL_E0A4_noteheadBlack, staff->m_drawingStaffSize, false) - - (doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; - beamInterface->m_stemXAbove[1] = doc->GetGlyphWidth(SMUFL_E0A4_noteheadBlack, staff->m_drawingStaffSize, true) - - (doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; - beamInterface->m_stemXBelow[0] = (doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; - beamInterface->m_stemXBelow[1] = (doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; + if (staff->IsTablature()) { + // Adjust the height and spacing of the beams + beamInterface->m_beamWidthBlack /= 2; + beamInterface->m_beamWidthWhite /= 2; + + // Adjust it further for tab.lute.french and tab.lute.italian + if (staff->IsTabLuteFrench() || staff->IsTabLuteItalian()) { + beamInterface->m_beamWidthBlack = beamInterface->m_beamWidthBlack * 2 / 5; + beamInterface->m_beamWidthWhite = beamInterface->m_beamWidthWhite * 3 / 5; + } + + beamInterface->m_stemXAbove[0] = 0; + beamInterface->m_stemXAbove[1] = 0; + beamInterface->m_stemXBelow[0] = 0; + beamInterface->m_stemXBelow[1] = 0; + } + else { + // x-offset values for stem bases, dx[y] where y = element->m_cueSize + beamInterface->m_stemXAbove[0] = doc->GetGlyphWidth(SMUFL_E0A4_noteheadBlack, staff->m_drawingStaffSize, false) + - (doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; + beamInterface->m_stemXAbove[1] = doc->GetGlyphWidth(SMUFL_E0A4_noteheadBlack, staff->m_drawingStaffSize, true) + - (doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; + beamInterface->m_stemXBelow[0] = (doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; + beamInterface->m_stemXBelow[1] = (doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; + } /******************************************************************/ // Calculate the extreme values From 32d865726314b7db748d8a44b89124145e80ead1 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 08:54:34 +0100 Subject: [PATCH 251/403] Remove unused code --- src/beam.cpp | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/beam.cpp b/src/beam.cpp index 9005a2583e6..e0ee96eafc4 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1065,17 +1065,6 @@ void BeamSegment::CalcBeamPlace(Layer *layer, BeamDrawingInterface *beamInterfac assert(beamInterface); if (place != BEAMPLACE_NONE) { - /* - if (beamInterface->m_hasMultipleStemDir && (place != BEAMPLACE_mixed)) { - LogDebug("Stem directions (mixed) contradict beam placement (below or above)"); - } - else if ((beamInterface->m_notesStemDir == STEMDIRECTION_up) && (place == BEAMPLACE_below)) { - LogDebug("Stem directions (up) contradict beam placement (below)"); - } - else if ((beamInterface->m_notesStemDir == STEMDIRECTION_down) && (place == BEAMPLACE_above)) { - LogDebug("Stem directions (down) contradict beam placement (above)"); - } - */ beamInterface->m_drawingPlace = place; } // Default with cross-staff From 13ed93cc3512f4ab4ad1f9c521140664f12fc58a Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 08:55:11 +0100 Subject: [PATCH 252/403] Use the GetStemHolderInterface helper --- src/beam.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/beam.cpp b/src/beam.cpp index e0ee96eafc4..c8fb12abb27 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1540,10 +1540,11 @@ void BeamElementCoord::SetDrawingStemDir( return; } - if (!m_element->Is({ CHORD, NOTE })) return; + // Get the interface from the chord (if any) + StemmedDrawingInterface *stemInterface = this->GetStemHolderInterface(); + // Not a Chord or a Note or no TabDurSym in TabGrp + if (!stemInterface) return; - StemmedDrawingInterface *stemInterface = m_element->GetStemmedDrawingInterface(); - assert(stemInterface); m_stem = stemInterface->GetDrawingStem(); assert(m_stem); From 905ae20dd6ae481f58bfe5cf617a4ab6a993c357 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 09:05:28 +0100 Subject: [PATCH 253/403] Remove unused variable --- src/view_beam.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/view_beam.cpp b/src/view_beam.cpp index a1a40525446..2b74f9d8520 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -41,8 +41,6 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf Beam *beam = dynamic_cast(element); assert(beam); - const bool isTabBeam = beam->IsTabBeam(); - /******************************************************************/ // initialization From d43cd1cd3fa893670829ee342d71fb130edb1586 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 09:25:50 +0100 Subject: [PATCH 254/403] Set m_beamWidth only once m_beamWidthBlack and m_beamWidthWhite have been adjusted --- src/beam.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/beam.cpp b/src/beam.cpp index c8fb12abb27..1efc4aa64cb 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -439,7 +439,6 @@ void BeamSegment::CalcBeamInit( beamInterface->m_beamWidthWhite *= 4; beamInterface->m_beamWidthWhite /= 3; } - beamInterface->m_beamWidth = beamInterface->m_beamWidthBlack + beamInterface->m_beamWidthWhite; if (staff->IsTablature()) { // Adjust the height and spacing of the beams @@ -466,6 +465,8 @@ void BeamSegment::CalcBeamInit( beamInterface->m_stemXBelow[0] = (doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; beamInterface->m_stemXBelow[1] = (doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; } + + beamInterface->m_beamWidth = beamInterface->m_beamWidthBlack + beamInterface->m_beamWidthWhite; /******************************************************************/ // Calculate the extreme values From 848cd452dcc701564e58b456add1f27675f44d37 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 09:33:11 +0100 Subject: [PATCH 255/403] Filter TabGrp list by course (and not fret) --- include/vrv/note.h | 10 +++++----- src/tabgrp.cpp | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/vrv/note.h b/include/vrv/note.h index f992441fff4..6a1df110ace 100644 --- a/include/vrv/note.h +++ b/include/vrv/note.h @@ -427,23 +427,23 @@ class DiatonicSort { }; //---------------------------------------------------------------------------- -// TabFretSort +// TabCourseSort //---------------------------------------------------------------------------- /** - * Unary predicate for sorting notes by fret number + * Unary predicate for sorting notes by course number */ -class TabFretSort { +class TabCourseSort { public: - TabFretSort() {} + TabCourseSort() {} bool operator()(const Object *first, const Object *second) const { const Note *n1 = dynamic_cast(first); const Note *n2 = dynamic_cast(second); assert(n1 && n2); - return (n1->GetTabFret() < n2->GetTabFret()); + return (n1->GetTabCourse() > n2->GetTabCourse()); } }; diff --git a/src/tabgrp.cpp b/src/tabgrp.cpp index 125a3861265..f1d79fc759c 100644 --- a/src/tabgrp.cpp +++ b/src/tabgrp.cpp @@ -67,7 +67,7 @@ void TabGrp::FilterList(ArrayOfObjects *childList) iter = ((*iter)->Is(NOTE)) ? iter + 1 : childList->erase(iter); } - std::sort(childList->begin(), childList->end(), TabFretSort()); + std::sort(childList->begin(), childList->end(), TabCourseSort()); } int TabGrp::GetYTop() From 16a60f06ec84a64e20f24421f16f67524ec146be Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 14:29:23 +0100 Subject: [PATCH 256/403] Add a m_tabDurSym to BeamCoord * The member is used only for beam placed outside the staff --- include/vrv/beam.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 79955d4d436..4bc570fc3bc 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -16,6 +16,7 @@ namespace vrv { class BeamElementCoord; +class TabDurSym; class StaffAlignment; // the maximum allowed number of partials @@ -294,6 +295,7 @@ class BeamElementCoord { { m_element = NULL; m_closestNote = NULL; + m_tabDurSym = NULL; m_stem = NULL; m_overlapMargin = 0; m_maxShortening = -1; @@ -339,6 +341,7 @@ class BeamElementCoord { data_BEAMPLACE m_partialFlagPlace; LayerElement *m_element; Note *m_closestNote; + TabDurSym *m_tabDurSym; Stem *m_stem; // a pointer to the stem in order to avoid to have to re-cast it }; From 2934f3a80065915d3ef5917d2b91444fac336c56 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 14:30:19 +0100 Subject: [PATCH 257/403] Helper to calculate the stem length for tab beam outside the staff --- include/vrv/beam.h | 2 ++ src/beam.cpp | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 4bc570fc3bc..97ab3cef58b 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -316,6 +316,8 @@ class BeamElementCoord { int CalculateStemLength(Staff *staff, data_STEMDIRECTION stemDir, bool isHorizontal); + /** Helper for calculating the stem length for tablature beam placed outside the staff */ + int CalculateStemLengthTab(Staff *staff, data_STEMDIRECTION stemDir); /** * Return stem length adjustment in half units, depending on the @stem.mode attribute */ diff --git a/src/beam.cpp b/src/beam.cpp index 1efc4aa64cb..64cc5702b91 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1628,6 +1628,14 @@ int BeamElementCoord::CalculateStemLength(Staff *staff, data_STEMDIRECTION stemD return stemLen + CalculateStemModAdjustment(stemLen, directionBias); } +int BeamElementCoord::CalculateStemLengthTab(Staff *staff, data_STEMDIRECTION stemDir) +{ + if (!m_tabDurSym) return 0; + + const int directionBias = (stemDir == STEMDIRECTION_up) ? 1 : -1; + return m_tabDurSym->CalcStemLenInThirdUnits(staff, stemDir) * 2 / 3 * directionBias; +} + int BeamElementCoord::CalculateStemModAdjustment(int stemLength, int directionBias) { // handle @stem.mod attribute to properly draw beams with tremolos From 0f433d1aaa13e437839b28c053f7ac5ada36a536 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 14:32:06 +0100 Subject: [PATCH 258/403] Set the tabDurSym in BeamCoord for beam outside the staff --- include/vrv/beam.h | 3 ++- src/beam.cpp | 12 +++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 97ab3cef58b..9ce34a53b55 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -312,8 +312,9 @@ class BeamElementCoord { void SetDrawingStemDir( data_STEMDIRECTION stemDir, Staff *staff, Doc *doc, BeamSegment *segment, BeamDrawingInterface *interface); - void SetClosestNote(data_STEMDIRECTION stemDir); + /** Set the note or closest note for chord or tabdursym for tablature beams placed outside the staff */ + void SetClosestNoteOrTabDurSym(data_STEMDIRECTION stemDir, bool outsideStaff); int CalculateStemLength(Staff *staff, data_STEMDIRECTION stemDir, bool isHorizontal); /** Helper for calculating the stem length for tablature beam placed outside the staff */ diff --git a/src/beam.cpp b/src/beam.cpp index 64cc5702b91..f6e9cb509e9 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1135,7 +1135,8 @@ void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool is const data_STEMDIRECTION stemDir = (place == BEAMPLACE_below) ? STEMDIRECTION_down : STEMDIRECTION_up; int relevantNoteLoc = VRV_UNSET; for (auto coord : m_beamElementCoordRefs) { - coord->SetClosestNote(stemDir); + coord->SetClosestNoteOrTabDurSym(stemDir, staff->IsTabWithBeamOutside()); + // Nothing else to do if we have no closest note (that includes tab beams outside the staff) if (!coord->m_closestNote) continue; if (relevantNoteLoc == VRV_UNSET) { relevantNoteLoc = coord->m_closestNote->GetDrawingLoc(); @@ -1671,7 +1672,7 @@ StemmedDrawingInterface *BeamElementCoord::GetStemHolderInterface() return NULL; } -void BeamElementCoord::SetClosestNote(data_STEMDIRECTION stemDir) +void BeamElementCoord::SetClosestNoteOrTabDurSym(data_STEMDIRECTION stemDir, bool outsideStaff) { m_closestNote = NULL; if (m_element->Is(NOTE)) { @@ -1685,7 +1686,12 @@ void BeamElementCoord::SetClosestNote(data_STEMDIRECTION stemDir) else if (m_element->Is(TABGRP)) { TabGrp *tabGrp = vrv_cast(m_element); assert(tabGrp); - m_closestNote = (STEMDIRECTION_up == stemDir) ? tabGrp->GetTopNote() : tabGrp->GetBottomNote(); + if (outsideStaff) { + m_tabDurSym = vrv_cast(tabGrp->FindDescendantByType(TABDURSYM)); + } + else { + m_closestNote = (STEMDIRECTION_up == stemDir) ? tabGrp->GetTopNote() : tabGrp->GetBottomNote(); + } } } From c865bd1dea90e83772b88f082deadbdb2a796341 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 14:33:57 +0100 Subject: [PATCH 259/403] Add a distinct helper Beam::CalcBeamPlaceTab * Also ajdust the TabDurSym drawingYRel for beam placed outside the staff --- include/vrv/beam.h | 7 ++++++- src/beam.cpp | 34 ++++++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 9ce34a53b55..89e55f49575 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -116,7 +116,12 @@ class BeamSegment { void CalcBeamPlace(Layer *layer, BeamDrawingInterface *beamInterface, data_BEAMPLACE place); - void CalcBeamPlaceTab(Layer *layer, BeamDrawingInterface *beamInterface, data_BEAMPLACE place); + /** + * Helper to calculate the beam position for a beam in tablature. + * Also adjust the drawingYRel of the TabDurSym if necessary. + */ + void CalcBeamPlaceTab( + Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place); // Helper to calculate the longest stem length of the beam (which will be used uniformely) void CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool isHorizontal); diff --git a/src/beam.cpp b/src/beam.cpp index f6e9cb509e9..be3d748f103 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -100,11 +100,20 @@ void BeamSegment::CalcBeam( beamInterface->m_fractionSize = staff->m_drawingStaffSize; - bool horizontal = beamInterface->IsHorizontal(); - - // Beam@place has precedence - however, in some cases, CalcBeam is called recursively because we need to change the - // place This occurs when mixed makes no sense and the beam is placed above or below instead. - this->CalcBeamPlace(layer, beamInterface, place); + // Always horizontal when placed outside a tablature staff + bool horizontal = true; + if (staff->IsTablature()) { + // Alwyas not horizontal when inside the staff + // Eventually we will need to look at the content to pre-determine if horizontal + horizontal = staff->IsTabWithBeamOutside(); + this->CalcBeamPlaceTab(layer, staff, doc, beamInterface, place); + } + else { + horizontal = beamInterface->IsHorizontal(); + // Beam@place has precedence - however, in some cases, CalcBeam is called recursively because we need to change + // the place This occurs when mixed makes no sense and the beam is placed above or below instead. + this->CalcBeamPlace(layer, beamInterface, place); + } CalcBeamStemLength(staff, beamInterface->m_drawingPlace, horizontal); @@ -1113,9 +1122,12 @@ void BeamSegment::CalcBeamPlace(Layer *layer, BeamDrawingInterface *beamInterfac // if (beamInterface->m_drawingPlace == BEAMPLACE_mixed) beamInterface->m_drawingPlace = BEAMPLACE_above; } -void BeamSegment::CalcBeamPlaceTab(Layer *layer, BeamDrawingInterface *beamInterface, data_BEAMPLACE place) +void BeamSegment::CalcBeamPlaceTab( + Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place) { assert(layer); + assert(staff); + assert(doc); assert(beamInterface); if (place != BEAMPLACE_NONE) { @@ -1128,6 +1140,16 @@ void BeamSegment::CalcBeamPlaceTab(Layer *layer, BeamDrawingInterface *beamInter // Is is put above by default with tablature with a single layer beamInterface->m_drawingPlace = (layerStemDir == STEMDIRECTION_down) ? BEAMPLACE_below : BEAMPLACE_above; } + + if (beamInterface->m_drawingPlace == BEAMPLACE_below && staff->IsTabWithBeamOutside()) { + for (auto coord : m_beamElementCoordRefs) { + if (!coord->m_element || !coord->m_element->Is(TABGRP)) continue; + TabGrp *tabGrp = vrv_cast(coord->m_element); + assert(tabGrp); + TabDurSym *tabDurSym = vrv_cast(tabGrp->FindDescendantByType(TABDURSYM)); + if (tabDurSym) tabDurSym->AdjustDrawingYRel(staff, doc); + } + } } void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool isHorizontal) From 62afe41f9fdd98bd7e856a62a3b729a75b476837 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 14:35:46 +0100 Subject: [PATCH 260/403] Add define for default stem length for tablature --- include/vrv/beam.h | 3 +++ include/vrv/vrvdef.h | 1 + src/beam.cpp | 14 ++++++++------ src/note.cpp | 3 ++- src/tabdursym.cpp | 2 +- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 89e55f49575..934d2bdbf0c 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -320,10 +320,13 @@ class BeamElementCoord { /** Set the note or closest note for chord or tabdursym for tablature beams placed outside the staff */ void SetClosestNoteOrTabDurSym(data_STEMDIRECTION stemDir, bool outsideStaff); + + /** Heleper for calculating the stem length for staff notation and tablature beams within the staff */ int CalculateStemLength(Staff *staff, data_STEMDIRECTION stemDir, bool isHorizontal); /** Helper for calculating the stem length for tablature beam placed outside the staff */ int CalculateStemLengthTab(Staff *staff, data_STEMDIRECTION stemDir); + /** * Return stem length adjustment in half units, depending on the @stem.mode attribute */ diff --git a/include/vrv/vrvdef.h b/include/vrv/vrvdef.h index 3a2499ab921..599092f3c4b 100644 --- a/include/vrv/vrvdef.h +++ b/include/vrv/vrvdef.h @@ -617,6 +617,7 @@ enum StemSameasDrawingRole { SAMEAS_NONE = 0, SAMEAS_UNSET, SAMEAS_PRIMARY, SAME // in half staff spaces (but should be 6 in two-voice notation) #define STANDARD_STEMLENGTH 7 +#define STANDARD_STEMLENGTH_TAB 5 //---------------------------------------------------------------------------- // Temporary - to be made an option? diff --git a/src/beam.cpp b/src/beam.cpp index be3d748f103..4e4d600da70 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -149,7 +149,7 @@ void BeamSegment::CalcSetStemValues(Layer *layer, Staff *staff, Doc *doc, BeamDr assert(staff); assert(doc); assert(beamInterface); - + int y1, y2; for (auto coord : m_beamElementCoordRefs) { @@ -245,22 +245,24 @@ void BeamSegment::CalcSetStemValuesTab(Layer *layer, Staff *staff, Doc *doc, Bea assert(staff); assert(doc); assert(beamInterface); - + int y1, y2; for (auto coord : m_beamElementCoordRefs) { // All notes and chords get their stem value stored LayerElement *el = coord->m_element; if (el->Is(TABGRP)) { + // Just in case + if (!coord->m_closestNote && !coord->m_tabDurSym) continue; + // Get the interface from child tabDurSym StemmedDrawingInterface *stemmedInterface = coord->GetStemHolderInterface(); if (!stemmedInterface) continue; - assert(coord->m_closestNote); - y1 = coord->m_yBeam; - y2 = coord->m_closestNote->GetDrawingY(); + y2 = (coord->m_closestNote) ? coord->m_closestNote->GetDrawingY() : coord->m_tabDurSym->GetDrawingY(); + if (beamInterface->m_drawingPlace == BEAMPLACE_above) { // Move down to ensure the stem is slightly shorter than the top-beam y1 -= doc->GetDrawingStemWidth(staff->m_drawingStaffSize); @@ -1654,7 +1656,7 @@ int BeamElementCoord::CalculateStemLength(Staff *staff, data_STEMDIRECTION stemD int BeamElementCoord::CalculateStemLengthTab(Staff *staff, data_STEMDIRECTION stemDir) { if (!m_tabDurSym) return 0; - + const int directionBias = (stemDir == STEMDIRECTION_up) ? 1 : -1; return m_tabDurSym->CalcStemLenInThirdUnits(staff, stemDir) * 2 / 3 * directionBias; } diff --git a/src/note.cpp b/src/note.cpp index ba9aebe1de2..a1b9af61bd5 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -409,7 +409,8 @@ int Note::CalcStemLenInThirdUnits(Staff *staff, data_STEMDIRECTION stemDir) return 0; } - int baseStem = STANDARD_STEMLENGTH * 3; + int baseStem = (staff->IsTablature()) ? STANDARD_STEMLENGTH_TAB : STANDARD_STEMLENGTH; + baseStem *= 3; int shortening = 0; diff --git a/src/tabdursym.cpp b/src/tabdursym.cpp index d617c361b2a..738045413c9 100644 --- a/src/tabdursym.cpp +++ b/src/tabdursym.cpp @@ -95,7 +95,7 @@ int TabDurSym::CalcStemLenInThirdUnits(Staff *staff, data_STEMDIRECTION stemDir) return 0; } - int baseStem = STANDARD_STEMLENGTH * 3; + int baseStem = STANDARD_STEMLENGTH_TAB * 3; return baseStem; } From ba284fe87cf1a4bffd24a3b443d1c6548bd5875b Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 14:37:13 +0100 Subject: [PATCH 261/403] Helper for checking if the tab beams have to be put inside or outside the staff * Eventually this could come from a staffDef attribute --- include/vrv/staff.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/vrv/staff.h b/include/vrv/staff.h index 54929b42275..4ed8bbab713 100644 --- a/include/vrv/staff.h +++ b/include/vrv/staff.h @@ -112,6 +112,7 @@ class Staff : public Object, bool IsTabLuteFrench() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_french; } bool IsTabLuteGerman() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_german; } bool IsTabLuteItalian() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_italian; } + bool IsTabWithBeamOutside() { return false; } ///@} /** From 42abc621e4e2b864bb1800de35b4622b739f9096 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 14:37:45 +0100 Subject: [PATCH 262/403] Implement method to adjust the TabDurSym drawingYRel for beam placed below the staff --- include/vrv/tabdursym.h | 9 +++++++++ src/tabdursym.cpp | 13 +++++++++++++ 2 files changed, 22 insertions(+) diff --git a/include/vrv/tabdursym.h b/include/vrv/tabdursym.h index eff657e8df4..1fde69315e9 100644 --- a/include/vrv/tabdursym.h +++ b/include/vrv/tabdursym.h @@ -67,6 +67,15 @@ class TabDurSym : public LayerElement, public StemmedDrawingInterface, public At int CalcStemLenInThirdUnits(Staff *staff, data_STEMDIRECTION stemDir) override; ///@} + /** + * Adjust the drawing y relative value for TabDurSym placed below the staff. + * The value is originally set in LayerElement::SetAlignmentPosPitch. + * However, setting it below the staff for a TabDurSym can be done only once the stem + * direction has been determined. This is why we have this method called from + * Beam::CalcTabBeamPlace + */ + void AdjustDrawingYRel(Staff *staff, Doc *doc); + //----------// // Functors // //----------// diff --git a/src/tabdursym.cpp b/src/tabdursym.cpp index 738045413c9..a6726df5319 100644 --- a/src/tabdursym.cpp +++ b/src/tabdursym.cpp @@ -75,6 +75,19 @@ void TabDurSym::AddChild(Object *child) Modify(); } +void TabDurSym::AdjustDrawingYRel(Staff *staff, Doc *doc) +{ + assert(staff); + assert(doc); + + int yRel = (staff->m_drawingLines - 1) * doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); + + double spacingRatio = (staff->IsTabLuteFrench()) ? 2.0 : 1.0; + yRel += doc->GetDrawingUnit(staff->m_drawingStaffSize) * spacingRatio; + + this->SetDrawingYRel(-yRel); +} + Point TabDurSym::GetStemUpSE(Doc *doc, int staffSize, bool isCueSize) { Point p(0, 0); From 9c8d8b5165bd05f3323abd79474baf38dae20521 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 14:38:14 +0100 Subject: [PATCH 263/403] Adjustments for beams placed outside the staff --- src/beam.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/beam.cpp b/src/beam.cpp index 4e4d600da70..1f46d873922 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -277,7 +277,7 @@ void BeamSegment::CalcSetStemValuesTab(Layer *layer, Staff *staff, Doc *doc, Bea // stem->SetDrawingStemDir(stemDir); stem->SetDrawingXRel(coord->m_x - el->GetDrawingX()); - stem->SetDrawingYRel(y2 - el->GetDrawingY()); + if (coord->m_closestNote) stem->SetDrawingYRel(y2 - el->GetDrawingY()); stem->SetDrawingStemLen(y2 - y1); } } @@ -476,7 +476,7 @@ void BeamSegment::CalcBeamInit( beamInterface->m_stemXBelow[0] = (doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; beamInterface->m_stemXBelow[1] = (doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; } - + beamInterface->m_beamWidth = beamInterface->m_beamWidthBlack + beamInterface->m_beamWidthWhite; /******************************************************************/ @@ -829,6 +829,9 @@ void BeamSegment::CalcBeamPosition( } } + // Nothing else to do with tab beams outside the staff + if (staff->IsTabWithBeamOutside()) return; + /******************************************************************/ // Calculate the slope is necessary @@ -1174,7 +1177,11 @@ void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool is int minDuration = DUR_4; for (auto coord : m_beamElementCoordRefs) { - if (!coord->m_closestNote) continue; + // Get the tabDurSym stem length (if any) + if (!coord->m_closestNote) { + m_uniformStemLength = coord->CalculateStemLengthTab(staff, stemDir); + continue; + } // if location matches, or if current elements duration is shorter than 8th. This ensures that beams with // partial beams will not be shorted when lowest/highest note is 8th and can be shortened if ((coord->m_dur > minDuration) @@ -1578,6 +1585,13 @@ void BeamElementCoord::SetDrawingStemDir( m_yBeam = m_element->GetDrawingY(); m_x += (STEMDIRECTION_up == stemDir) ? interface->m_stemXAbove[interface->m_cueSize] : interface->m_stemXBelow[interface->m_cueSize]; + + if (m_tabDurSym) { + m_yBeam = m_tabDurSym->GetDrawingY(); + m_yBeam += (stemLen * doc->GetDrawingUnit(staff->m_drawingStaffSize) / 2); + return; + } + if (!m_closestNote) return; if (!interface->m_cueSize && (m_element->IsGraceNote() || m_element->GetDrawingCueSize()) From 4fbafede930ecfab48856fc800da991d280f3ba0 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 14:38:56 +0100 Subject: [PATCH 264/403] Avoid changing the TabDurSym drawingYRel when beams are inside the staff --- src/layerelement.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 1772df52755..f6fc9a3df6b 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -1436,11 +1436,10 @@ int LayerElement::SetAlignmentPitchPos(FunctorParams *functorParams) } else if (this->Is(TABDURSYM)) { int yRel = 0; - double spacingRatio = 1.0; - if (staffY->IsTabLuteFrench()) { - spacingRatio = 2.0; + if (staffY->IsTabWithBeamOutside()) { + double spacingRatio = (staffY->IsTabLuteFrench()) ? 2.0 : 1.0; + yRel += params->m_doc->GetDrawingUnit(staffY->m_drawingStaffSize) * spacingRatio; } - yRel += params->m_doc->GetDrawingUnit(staffY->m_drawingStaffSize) * spacingRatio; this->SetDrawingYRel(yRel); } From 4feb862a467fd0928acc0a79b403dfd265d98e70 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 15:19:39 +0100 Subject: [PATCH 265/403] Do not overwrite uniformStemLength with 0 with rests --- src/beam.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/beam.cpp b/src/beam.cpp index 1f46d873922..1a85b920f44 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1178,10 +1178,11 @@ void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool is int minDuration = DUR_4; for (auto coord : m_beamElementCoordRefs) { // Get the tabDurSym stem length (if any) - if (!coord->m_closestNote) { + if (coord->m_tabDurSym) { m_uniformStemLength = coord->CalculateStemLengthTab(staff, stemDir); continue; } + if (!coord->m_closestNote) continue; // if location matches, or if current elements duration is shorter than 8th. This ensures that beams with // partial beams will not be shorted when lowest/highest note is 8th and can be shortened if ((coord->m_dur > minDuration) From 5ddfb5ab0c274ccbd755496092bf49fa39e52b02 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 17:04:52 +0100 Subject: [PATCH 266/403] Change default stem length for tablature --- include/vrv/vrvdef.h | 2 +- src/tabdursym.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/include/vrv/vrvdef.h b/include/vrv/vrvdef.h index 599092f3c4b..67d2590e072 100644 --- a/include/vrv/vrvdef.h +++ b/include/vrv/vrvdef.h @@ -617,7 +617,7 @@ enum StemSameasDrawingRole { SAMEAS_NONE = 0, SAMEAS_UNSET, SAMEAS_PRIMARY, SAME // in half staff spaces (but should be 6 in two-voice notation) #define STANDARD_STEMLENGTH 7 -#define STANDARD_STEMLENGTH_TAB 5 +#define STANDARD_STEMLENGTH_TAB 3 //---------------------------------------------------------------------------- // Temporary - to be made an option? diff --git a/src/tabdursym.cpp b/src/tabdursym.cpp index a6726df5319..7ca3731536f 100644 --- a/src/tabdursym.cpp +++ b/src/tabdursym.cpp @@ -110,6 +110,8 @@ int TabDurSym::CalcStemLenInThirdUnits(Staff *staff, data_STEMDIRECTION stemDir) int baseStem = STANDARD_STEMLENGTH_TAB * 3; + if (!staff->IsTabWithBeamOutside()) baseStem += 6; + return baseStem; } From 0f42869e8eaf2b3cb0fca52797d920f1a27c340d Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 17:06:11 +0100 Subject: [PATCH 267/403] Skip adjustment only for staves in tablature --- src/beam.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/beam.cpp b/src/beam.cpp index 1a85b920f44..7202c8a486e 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -830,7 +830,7 @@ void BeamSegment::CalcBeamPosition( } // Nothing else to do with tab beams outside the staff - if (staff->IsTabWithBeamOutside()) return; + if (staff->IsTablature() && staff->IsTabWithBeamOutside()) return; /******************************************************************/ // Calculate the slope is necessary From 8d5f43463b6ca77c9bb15534e9485b3f1451af2e Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 17:07:06 +0100 Subject: [PATCH 268/403] Always set m_tabDurSym for tablature beam and drawing adjustments --- src/beam.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/beam.cpp b/src/beam.cpp index 7202c8a486e..583fb46bb51 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -266,9 +266,11 @@ void BeamSegment::CalcSetStemValuesTab(Layer *layer, Staff *staff, Doc *doc, Bea if (beamInterface->m_drawingPlace == BEAMPLACE_above) { // Move down to ensure the stem is slightly shorter than the top-beam y1 -= doc->GetDrawingStemWidth(staff->m_drawingStaffSize); + if (coord->m_closestNote) y2 += doc->GetDrawingUnit(staff->m_drawingStaffSize); } else { y1 += doc->GetDrawingStemWidth(staff->m_drawingStaffSize); + if (coord->m_closestNote) y2 -= doc->GetDrawingUnit(staff->m_drawingStaffSize); } Stem *stem = stemmedInterface->GetDrawingStem(); @@ -277,7 +279,9 @@ void BeamSegment::CalcSetStemValuesTab(Layer *layer, Staff *staff, Doc *doc, Bea // stem->SetDrawingStemDir(stemDir); stem->SetDrawingXRel(coord->m_x - el->GetDrawingX()); - if (coord->m_closestNote) stem->SetDrawingYRel(y2 - el->GetDrawingY()); + if (coord->m_closestNote) { + stem->SetDrawingYRel(y2 - el->GetDrawingY()); + } stem->SetDrawingStemLen(y2 - y1); } } @@ -1587,7 +1591,7 @@ void BeamElementCoord::SetDrawingStemDir( m_x += (STEMDIRECTION_up == stemDir) ? interface->m_stemXAbove[interface->m_cueSize] : interface->m_stemXBelow[interface->m_cueSize]; - if (m_tabDurSym) { + if (m_tabDurSym && !m_closestNote) { m_yBeam = m_tabDurSym->GetDrawingY(); m_yBeam += (stemLen * doc->GetDrawingUnit(staff->m_drawingStaffSize) / 2); return; @@ -1725,10 +1729,8 @@ void BeamElementCoord::SetClosestNoteOrTabDurSym(data_STEMDIRECTION stemDir, boo else if (m_element->Is(TABGRP)) { TabGrp *tabGrp = vrv_cast(m_element); assert(tabGrp); - if (outsideStaff) { - m_tabDurSym = vrv_cast(tabGrp->FindDescendantByType(TABDURSYM)); - } - else { + m_tabDurSym = vrv_cast(tabGrp->FindDescendantByType(TABDURSYM)); + if (!outsideStaff) { m_closestNote = (STEMDIRECTION_up == stemDir) ? tabGrp->GetTopNote() : tabGrp->GetBottomNote(); } } From f81c068a7eece8007daecd8b0016f43040e00601 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 22:27:55 +0100 Subject: [PATCH 269/403] Add member to CalcStemParams to flag tabGrp with no notes --- include/vrv/functorparams.h | 11 +++++++---- src/tabgrp.cpp | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 5bdf7922a0a..66211eb4a32 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1058,10 +1058,11 @@ class CalcOnsetOffsetParams : public FunctorParams { * member 2: the actual duration of the chord / note * member 3: the flag for grace notes (stem is not extended) * member 4: the flag for stem.sameas notes - * member 5: the current staff (to avoid additional lookup) - * member 6: the current layer (ditto) - * member 7: the chord or note to which the stem belongs - * member 8: the doc + * member 5: the flag indicating that we have no note in tabGrp + * member 6: the current staff (to avoid additional lookup) + * member 7: the current layer (ditto) + * member 8: the chord or note to which the stem belongs + * member 9: the doc **/ class CalcStemParams : public FunctorParams { @@ -1073,6 +1074,7 @@ class CalcStemParams : public FunctorParams { m_dur = DUR_1; m_isGraceNote = false; m_stemSameas = false; + m_tabGrpWithNoNote = false; m_staff = NULL; m_layer = NULL; m_interface = NULL; @@ -1083,6 +1085,7 @@ class CalcStemParams : public FunctorParams { int m_dur; bool m_isGraceNote; bool m_stemSameas; + bool m_tabGrpWithNoNote; Staff *m_staff; Layer *m_layer; StemmedDrawingInterface *m_interface; diff --git a/src/tabgrp.cpp b/src/tabgrp.cpp index f1d79fc759c..c972b0d833d 100644 --- a/src/tabgrp.cpp +++ b/src/tabgrp.cpp @@ -137,6 +137,7 @@ int TabGrp::CalcStem(FunctorParams *functorParams) assert(params); params->m_dur = this->GetActualDur(); + params->m_tabGrpWithNoNote = (!this->FindDescendantByType(NOTE)); return FUNCTOR_CONTINUE; } From eadcadc1e3e6cdaf92ef65f44ee7b8d1ff4828ce Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 22:28:38 +0100 Subject: [PATCH 270/403] Skip tabDurSym with no stem (empty or no notes) and set stem length --- src/tabdursym.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/tabdursym.cpp b/src/tabdursym.cpp index 7ca3731536f..ee627cfa658 100644 --- a/src/tabdursym.cpp +++ b/src/tabdursym.cpp @@ -149,6 +149,12 @@ int TabDurSym::CalcStem(FunctorParams *functorParams) Stem *stem = this->GetDrawingStem(); assert(stem); + // Do not draw virtual (e.g., whole note) stems + if (params->m_dur < DUR_2 || params->m_tabGrpWithNoNote) { + stem->IsVirtual(true); + return FUNCTOR_SIBLINGS; + } + // Cache the in params to avoid further lookup params->m_staff = this->GetAncestorStaff(); assert(params->m_staff); @@ -176,10 +182,22 @@ int TabDurSym::CalcStem(FunctorParams *functorParams) this->SetDrawingStemDir(stemDir); + int stemDirFactor = -1; + if (stemDir == STEMDIRECTION_down) { + this->AdjustDrawingYRel(params->m_staff, params->m_doc); + stemDirFactor = 1; + } + // Make sure the relative position of the stem is the same stem->SetDrawingYRel(0); - // WIP for now set a default stem length - stem->SetDrawingStemLen(4 * params->m_doc->GetDrawingUnit(staffSize)); + int stemSize = this->CalcStemLenInThirdUnits(params->m_staff, stemDir) * params->m_doc->GetDrawingUnit(staffSize); + stemSize /= (3 * stemDirFactor); + + if (params->m_dur == DUR_2) { + stemSize /= 2; + } + + stem->SetDrawingStemLen(stemSize); return FUNCTOR_SIBLINGS; } From 4c8f2a2c094ae62ab3e6ae2de990d8258a8ba945 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 22:29:07 +0100 Subject: [PATCH 271/403] Helper adjustments --- include/vrv/staff.h | 3 ++- src/layerelement.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/include/vrv/staff.h b/include/vrv/staff.h index 4ed8bbab713..23e189d5623 100644 --- a/include/vrv/staff.h +++ b/include/vrv/staff.h @@ -109,10 +109,11 @@ class Staff : public Object, bool IsMensural(); bool IsNeume(); bool IsTablature(); + bool IsTabGuitar() { return m_drawingNotationType == NOTATIONTYPE_tab_guitar; } bool IsTabLuteFrench() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_french; } bool IsTabLuteGerman() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_german; } bool IsTabLuteItalian() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_italian; } - bool IsTabWithBeamOutside() { return false; } + bool IsTabWithBeamOutside() { return true; } ///@} /** diff --git a/src/layerelement.cpp b/src/layerelement.cpp index f6fc9a3df6b..eb1a6b4571b 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -213,7 +213,7 @@ FTrem *LayerElement::IsInFTrem() Beam *LayerElement::IsInBeam() { - if (!this->Is({ CHORD, NOTE, TABGRP, STEM })) return NULL; + if (!this->Is({ CHORD, NOTE, TABGRP, TABDURSYM, STEM })) return NULL; Beam *beamParent = vrv_cast(this->GetFirstAncestor(BEAM)); if (beamParent != NULL) { if (!this->IsGraceNote()) return beamParent; From 40a5c426e59bb59a9efbeb2e7a060402b440d63a Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 22:29:22 +0100 Subject: [PATCH 272/403] Adjust beam fractions for tab beam --- src/beam.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/beam.cpp b/src/beam.cpp index 583fb46bb51..5a31cc70f06 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -98,17 +98,19 @@ void BeamSegment::CalcBeam( this->CalcBeamInit(layer, staff, doc, beamInterface, place); } - beamInterface->m_fractionSize = staff->m_drawingStaffSize; - - // Always horizontal when placed outside a tablature staff bool horizontal = true; if (staff->IsTablature()) { - // Alwyas not horizontal when inside the staff - // Eventually we will need to look at the content to pre-determine if horizontal + int glyphSize = staff->GetDrawingStaffNotationSize(); + beamInterface->m_fractionSize = glyphSize * 2 / 3; + + // Alwyas horizontal when outside the staff and not when inside the staff + // Eventually we will need to look at the content to pre-determine if horizontal for inside beams horizontal = staff->IsTabWithBeamOutside(); this->CalcBeamPlaceTab(layer, staff, doc, beamInterface, place); } else { + beamInterface->m_fractionSize = staff->m_drawingStaffSize; + horizontal = beamInterface->IsHorizontal(); // Beam@place has precedence - however, in some cases, CalcBeam is called recursively because we need to change // the place This occurs when mixed makes no sense and the beam is placed above or below instead. From e10ded0e8080cee89d3bbe06c62e3f5ea67678a5 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 2 Feb 2022 22:30:12 +0100 Subject: [PATCH 273/403] Adjust drawing of tabDurSym * Stem (except for lute) are drawn in child stem --- src/view_tab.cpp | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/src/view_tab.cpp b/src/view_tab.cpp index 998380e6000..4fae4ad8e42 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -171,19 +171,13 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, int x = element->GetDrawingX(); int y = element->GetDrawingY(); - const int drawingDur = (tabGrp->GetDurGes() != DURATION_NONE) ? tabGrp->GetActualDurGes() : tabGrp->GetActualDur(); const int glyphSize = staff->GetDrawingStaffNotationSize(); - const int halfStemWidth = m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize) / 2; - // We only need to draw the stems - // Do we also need to draw the dots? - if (tabGrp->IsInBeam()) { - const int height = m_doc->GetGlyphHeight(SMUFL_EBA8_luteDurationHalf, glyphSize, true); - this->DrawFilledRectangle(dc, x - halfStemWidth, y, x + halfStemWidth, y + height); - } - else if (staff->m_drawingNotationType == NOTATIONTYPE_tab_guitar) { - } - else { + // For beam and guitar notation, stem are drawn through the child Stem + if (!tabGrp->IsInBeam() && !staff->IsTabGuitar()) { + const int drawingDur + = (tabGrp->GetDurGes() != DURATION_NONE) ? tabGrp->GetActualDurGes() : tabGrp->GetActualDur(); + int symc = 0; switch (drawingDur) { case DUR_2: symc = SMUFL_EBA7_luteDurationWhole; break; @@ -195,15 +189,15 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, } this->DrawSmuflCode(dc, x, y, symc, glyphSize, true); + } - if (tabGrp->HasDots()) { - y += m_doc->GetDrawingUnit(glyphSize) * 0.5; - x += m_doc->GetDrawingUnit(glyphSize); - for (int i = 0; i < tabGrp->GetDots(); ++i) { - this->DrawDot(dc, x, y, glyphSize * 2 / 3); - // HARDCODED - x += m_doc->GetDrawingUnit(glyphSize) * 0.75; - } + if (tabGrp->HasDots()) { + y += m_doc->GetDrawingUnit(glyphSize) * 0.5; + x += m_doc->GetDrawingUnit(glyphSize); + for (int i = 0; i < tabGrp->GetDots(); ++i) { + this->DrawDot(dc, x, y, glyphSize * 2 / 3); + // HARDCODED + x += m_doc->GetDrawingUnit(glyphSize) * 0.75; } } From e3cbf6b3f8de25d23b0e0933c972d2adf01fb36b Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 3 Feb 2022 10:31:08 +0100 Subject: [PATCH 274/403] Store cast off system widths --- include/vrv/functorparams.h | 5 ++++- include/vrv/system.h | 9 +++++++++ src/doc.cpp | 8 ++++++++ src/system.cpp | 12 ++++++++++-- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 5bdf7922a0a..fb662d3a329 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -809,7 +809,8 @@ class AlignHorizontallyParams : public FunctorParams { * member 0: the cumulated shift * member 1: the cumulated justifiable width * member 2: shift next measure due to section restart - * member 3: the doc + * member 3: store castoff system widths if true + * member 4: the doc **/ class AlignMeasuresParams : public FunctorParams { @@ -819,12 +820,14 @@ class AlignMeasuresParams : public FunctorParams { m_shift = 0; m_justifiableWidth = 0; m_applySectionRestartShift = false; + m_storeCastOffSystemWidths = false; m_doc = doc; } int m_shift; int m_justifiableWidth; bool m_applySectionRestartShift; + bool m_storeCastOffSystemWidths; Doc *m_doc; }; diff --git a/include/vrv/system.h b/include/vrv/system.h index e965c0d4006..b52146f881e 100644 --- a/include/vrv/system.h +++ b/include/vrv/system.h @@ -334,6 +334,15 @@ class System : public Object, public DrawingListInterface, public AttTyped { int m_drawingTotalWidth; int m_drawingJustifiableWidth; ///@} + /** + * @name The cast off width of the system. + * It is computed during castoff and used for adjusting the horizontal spacing for a given duration. + * This technique prevents large justification ratios and improves the horizontal layout. + */ + ///@{ + int m_castOffTotalWidth; + int m_castOffJustifiableWidth; + ///@} protected: /** diff --git a/src/doc.cpp b/src/doc.cpp index 97c4b24e8bc..03ee4caa8bf 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -907,6 +907,14 @@ void Doc::CastOffDocBase(bool useSb, bool usePb, bool smart) delete unCastOffPage; unCastOffPage = NULL; + // Store the cast off system widths => these are used to adjust the horizontal spacing + // for a given duration during page layout + AlignMeasuresParams alignMeasuresParams(this); + alignMeasuresParams.m_storeCastOffSystemWidths = true; + Functor alignMeasures(&Object::AlignMeasures); + Functor alignMeasuresEnd(&Object::AlignMeasuresEnd); + castOffSinglePage->Process(&alignMeasures, &alignMeasuresParams, &alignMeasuresEnd); + // Replace it with the castOffSinglePage pages->AddChild(castOffSinglePage); this->ResetDrawingPage(); diff --git a/src/system.cpp b/src/system.cpp index 79f417b36b3..bb1c77482a4 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -78,6 +78,8 @@ void System::Reset() m_drawingYRel = 0; m_drawingTotalWidth = 0; m_drawingJustifiableWidth = 0; + m_castOffTotalWidth = 0; + m_castOffJustifiableWidth = 0; m_drawingAbbrLabelsWidth = 0; m_drawingIsOptimized = false; } @@ -741,8 +743,14 @@ int System::AlignMeasuresEnd(FunctorParams *functorParams) AlignMeasuresParams *params = vrv_params_cast(functorParams); assert(params); - m_drawingTotalWidth = params->m_shift + this->GetDrawingLabelsWidth(); - m_drawingJustifiableWidth = params->m_justifiableWidth; + if (params->m_storeCastOffSystemWidths) { + m_castOffTotalWidth = params->m_shift + this->GetDrawingLabelsWidth(); + m_castOffJustifiableWidth = params->m_justifiableWidth; + } + else { + m_drawingTotalWidth = params->m_shift + this->GetDrawingLabelsWidth(); + m_drawingJustifiableWidth = params->m_justifiableWidth; + } return FUNCTOR_CONTINUE; } From 4b654f2d840783da45f4e09155a528916fac7f7e Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 3 Feb 2022 11:40:40 +0100 Subject: [PATCH 275/403] Estimate justification ratio and use it to adjust the alignment X position --- include/vrv/functorparams.h | 13 ++++++++----- include/vrv/system.h | 10 ++++++++++ src/horizontalaligner.cpp | 2 +- src/system.cpp | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 6 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index fb662d3a329..fe59d73d535 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -2271,11 +2271,12 @@ class SetAlignmentPitchPosParams : public FunctorParams { * member 0: the previous time position * member 1: the previous x rel position * member 2: duration of the longest note - * member 3: the last alignment that was not timestamp-only - * member 4: the list of timestamp-only alignment that needs to be adjusted - * member 5: the MeasureAligner - * member 6: the Doc - * member 7: the functor to be redirected to Aligner + * member 3: the estimated justification ratio of the system + * member 4: the last alignment that was not timestamp-only + * member 5: the list of timestamp-only alignment that needs to be adjusted + * member 6: the MeasureAligner + * member 7: the Doc + * member 8: the functor to be redirected to Aligner **/ class SetAlignmentXPosParams : public FunctorParams { @@ -2285,6 +2286,7 @@ class SetAlignmentXPosParams : public FunctorParams { m_previousTime = 0.0; m_previousXRel = 0; m_longestActualDur = 0; + m_estimatedJustificationRatio = 1.0; m_lastNonTimestamp = NULL; m_measureAligner = NULL; m_doc = doc; @@ -2293,6 +2295,7 @@ class SetAlignmentXPosParams : public FunctorParams { double m_previousTime; int m_previousXRel; int m_longestActualDur; + double m_estimatedJustificationRatio; Alignment *m_lastNonTimestamp; std::list m_timestamps; MeasureAligner *m_measureAligner; diff --git a/include/vrv/system.h b/include/vrv/system.h index b52146f881e..d212144871a 100644 --- a/include/vrv/system.h +++ b/include/vrv/system.h @@ -142,6 +142,11 @@ class System : public Object, public DrawingListInterface, public AttTyped { bool IsLastOfMdiv(); ///@} + /** + * Estimate the justification ratio from the castoff system widths and the desired page width + */ + double EstimateJustificationRatio(Doc *doc); + /** * Convert mensural MEI into cast-off (measure) segments looking at the barLine objects. * Segment positions occur where a barLine is set on all staves. @@ -195,6 +200,11 @@ class System : public Object, public DrawingListInterface, public AttTyped { */ int AlignHorizontally(FunctorParams *functorParams) override; + /** + * See Object::SetAlignmentXPos + */ + int SetAlignmentXPos(FunctorParams *functorParams) override; + /** * @name See Object::AdjustXOverflow */ diff --git a/src/horizontalaligner.cpp b/src/horizontalaligner.cpp index b9b7847dfb1..97b48b2f1c4 100644 --- a/src/horizontalaligner.cpp +++ b/src/horizontalaligner.cpp @@ -1252,7 +1252,7 @@ int Alignment::SetAlignmentXPos(FunctorParams *functorParams) iter->second->SetGraceAligmentXPos(params->m_doc); } - this->SetXRel(params->m_previousXRel + intervalXRel * DEFINITION_FACTOR); + this->SetXRel(params->m_previousXRel + intervalXRel * DEFINITION_FACTOR * params->m_estimatedJustificationRatio); params->m_previousTime = m_time; params->m_previousXRel = m_xRel; diff --git a/src/system.cpp b/src/system.cpp index bb1c77482a4..ab93ab43717 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -371,6 +371,26 @@ bool System::IsLastOfMdiv() return (nextSibling && nextSibling->IsPageElement()); } +double System::EstimateJustificationRatio(Doc *doc) +{ + assert(doc); + + // We can only estimate if cast off system widths are available + if ((m_castOffTotalWidth == 0) || (m_castOffJustifiableWidth == 0)) { + return 1.0; + } + + const double nonJustifiableWidth + = m_systemLeftMar + m_systemRightMar + m_castOffTotalWidth - m_castOffJustifiableWidth; + double estimatedRatio + = (double)(doc->m_drawingPageContentWidth - nonJustifiableWidth) / ((double)m_castOffJustifiableWidth); + + // Bounded compression + estimatedRatio = std::max(estimatedRatio, 0.8); + + return estimatedRatio; +} + void System::ConvertToCastOffMensuralSystem(Doc *doc, System *targetSystem) { assert(doc); @@ -553,6 +573,19 @@ int System::AlignVerticallyEnd(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } +int System::SetAlignmentXPos(FunctorParams *functorParams) +{ + SetAlignmentXPosParams *params = vrv_params_cast(functorParams); + assert(params); + + const double ratio = this->EstimateJustificationRatio(params->m_doc); + if (!this->IsLastOfMdiv() || (ratio < params->m_estimatedJustificationRatio)) { + params->m_estimatedJustificationRatio = ratio; + } + + return FUNCTOR_CONTINUE; +} + int System::AdjustXOverflow(FunctorParams *functorParams) { AdjustXOverflowParams *params = vrv_params_cast(functorParams); From 2f4fbd62e9ae9368f3e4b1e1727c0ba0dd384fbc Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 3 Feb 2022 13:16:17 +0200 Subject: [PATCH 276/403] Minor fix - set pointer to null after adding them to layer - clean up pointers at exit, if they were not nulled --- src/ioabc.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 50caf3b0662..d079e8117a0 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -335,12 +335,14 @@ void ABCInput::AddLayerElement() if (m_containerElement.m_element && (ElementType::Tuplet == m_containerElement.m_type)) { element = m_containerElement.m_element; element->AddChild(beam); + m_containerElement.m_element = NULL; } // otherwise default to it being beam else { element = beam; } m_layer->AddChild(element); + beam = NULL; } else { for (auto iter = m_noteStack.begin(); iter != m_noteStack.end(); ++iter) { @@ -348,9 +350,8 @@ void ABCInput::AddLayerElement() } } // clean-up leftover data, if any - if (beam && !beam->GetChildCount()) delete beam; - if (m_containerElement.m_element && !m_containerElement.m_element->GetChildCount()) - delete m_containerElement.m_element; + if (beam) delete beam; + if (m_containerElement.m_element) delete m_containerElement.m_element; m_containerElement = {}; m_noteStack.clear(); From 217710ffe08a958f0d2f386a424a2c30fb6a0c91 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 3 Feb 2022 12:40:55 +0100 Subject: [PATCH 277/403] Add dampening --- src/system.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/system.cpp b/src/system.cpp index ab93ab43717..c3f81c844a0 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -385,7 +385,8 @@ double System::EstimateJustificationRatio(Doc *doc) double estimatedRatio = (double)(doc->m_drawingPageContentWidth - nonJustifiableWidth) / ((double)m_castOffJustifiableWidth); - // Bounded compression + // Apply dampening and bound compression + estimatedRatio *= 0.95; estimatedRatio = std::max(estimatedRatio, 0.8); return estimatedRatio; From 45a29005cc8259eb147833538c3cc3e41b7b9d39 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Thu, 3 Feb 2022 14:51:32 +0100 Subject: [PATCH 278/403] Update changelog [skip-ci] --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fdd8b33a82b..63f706f0510 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,10 +5,13 @@ * Support for `scoreDef` and `staffDef` `@dur.default` (@eNote-GmBH) * Support for MIDI output of grace notes and multi-measure rests (@eNote-GmBH) * Support for `@stem.sameas` on notes for orchestra scores +* Support for MIDI output of arpeggios (@eNote-GmBH) +* Support for tuplets in ABC importer (@eNote-GmBH) * Improved tablature MIDI output (@paul-bayleaf) * Additional parameters to the redoLayout method for faster cached layout redoing * Additional parameters to the renderToTimemap method for including rests and measure * Additional ids for rests and measure added to the getElementsAtTime methods +* Preliminary support for stems and beam for guitar tablature * Preliminary support for tablature MusicXML import (@paul-bayleaf) ## [3.8.1] - 2022-01-10 From 4bbe2b7062e66cc87d2b36382b99a1e12f89d38a Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 3 Feb 2022 15:55:43 +0200 Subject: [PATCH 279/403] Minor fix - add section to the score only if it already doesn't have a parent --- src/ioabc.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 264065de85c..4bfd2a1e269 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -131,7 +131,7 @@ void ABCInput::ParseABC(std::istream &infile) // if m_div is not initialized - we didn't read X element, so continue until we do continue; } - if (std::string(abcLine).find_first_not_of(' ') == std::string::npos) { + if (abcLine.empty() || (abcLine.find_first_not_of(' ') == std::string::npos)) { // abc tunes are separated from each other by empty lines this->FlushControlElements(score, section); continue; @@ -152,6 +152,10 @@ void ABCInput::ParseABC(std::istream &infile) } } + if (!section->GetParent()) { + score->AddChild(section); + } + m_controlElements.clear(); m_composer.clear(); m_info.clear(); @@ -891,8 +895,10 @@ void ABCInput::FlushControlElements(Score *score, Section *section) assert(measure); measure->AddChild(iter->second); } + if (!section->GetParent()) { + score->AddChild(section); + } - score->AddChild(section); m_controlElements.clear(); } From 98798fcbdb40bd3fd64fe3e17493ae60cee2de11 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Fri, 4 Feb 2022 08:10:12 +0100 Subject: [PATCH 280/403] Fix conversion warning and disable debug message --- src/doc.cpp | 2 +- src/ioabc.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/doc.cpp b/src/doc.cpp index 97c4b24e8bc..1eaff835253 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -876,7 +876,7 @@ void Doc::CastOffDocBase(bool useSb, bool usePb, bool smart) // The cache is not set the first time, or can be reset by Doc::UnCastOffDoc Measure *firstMeasure = vrv_cast(unCastOffPage->FindDescendantByType(MEASURE)); if (!firstMeasure || !firstMeasure->HasCachedHorizontalLayout()) { - LogDebug("Performing the horizontal layout"); + // LogDebug("Performing the horizontal layout"); unCastOffPage->LayOutHorizontally(); unCastOffPage->HorizontalLayoutCachePage(); } diff --git a/src/ioabc.cpp b/src/ioabc.cpp index d079e8117a0..ea172ada4de 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -404,7 +404,7 @@ int ABCInput::ParseTuplet(const std::string &musicCode, int index) m_containerElement = { ElementType::Tuplet, tuplet, tupletNum }; // return index of the last element in tuplet, so that we point to the actual notes when incrementing 'i' - return tupletEnd - 1; + return static_cast(tupletEnd) - 1; } void ABCInput::AddAnnot(const std::string &remark) From 8f9e9454bee0a091dbad7fe45bf0fc9ea7e3316c Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 09:13:16 +0100 Subject: [PATCH 281/403] Use staffDef@type for determining beam placement in guitar tablature --- include/vrv/staff.h | 2 +- src/staff.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/include/vrv/staff.h b/include/vrv/staff.h index 23e189d5623..97cc7edcc33 100644 --- a/include/vrv/staff.h +++ b/include/vrv/staff.h @@ -113,7 +113,7 @@ class Staff : public Object, bool IsTabLuteFrench() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_french; } bool IsTabLuteGerman() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_german; } bool IsTabLuteItalian() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_italian; } - bool IsTabWithBeamOutside() { return true; } + bool IsTabWithBeamOutside(); ///@} /** diff --git a/src/staff.cpp b/src/staff.cpp index 8aad8981e79..3210cad6cdb 100644 --- a/src/staff.cpp +++ b/src/staff.cpp @@ -226,6 +226,13 @@ bool Staff::IsTablature() return isTablature; } +bool Staff::IsTabWithBeamOutside() +{ + if (!m_drawingStaffDef) return false; + // Temporary implementation looking at staffDef@type + return (!this->IsTabGuitar() || !m_drawingStaffDef->HasType() || m_drawingStaffDef->GetType() != "within"); +} + int Staff::CalcPitchPosYRel(Doc *doc, int loc) { assert(doc); From 8636264adbf87eb658244c19dff3d485cdf66de1 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 10:26:13 +0100 Subject: [PATCH 282/403] Adjust dots position for stems below --- src/view_tab.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/view_tab.cpp b/src/view_tab.cpp index 4fae4ad8e42..dd79a68d7f2 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -192,7 +192,8 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, } if (tabGrp->HasDots()) { - y += m_doc->GetDrawingUnit(glyphSize) * 0.5; + const int stemDirFactor = (tabDurSym->GetDrawingStemDir() == STEMDIRECTION_down) ? -1 : 1; + y += m_doc->GetDrawingUnit(glyphSize) * 0.5 * stemDirFactor; x += m_doc->GetDrawingUnit(glyphSize); for (int i = 0; i < tabGrp->GetDots(); ++i) { this->DrawDot(dc, x, y, glyphSize * 2 / 3); From 846d29d361472610c84ec05b10122619c284c477 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 10:26:56 +0100 Subject: [PATCH 283/403] Properly position stems (not beamed) when within the staff --- src/tabdursym.cpp | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/src/tabdursym.cpp b/src/tabdursym.cpp index ee627cfa658..0cc5a754bf6 100644 --- a/src/tabdursym.cpp +++ b/src/tabdursym.cpp @@ -16,7 +16,9 @@ #include "elementpart.h" #include "functorparams.h" #include "layer.h" +#include "note.h" #include "staff.h" +#include "tabgrp.h" namespace vrv { @@ -82,8 +84,11 @@ void TabDurSym::AdjustDrawingYRel(Staff *staff, Doc *doc) int yRel = (staff->m_drawingLines - 1) * doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); - double spacingRatio = (staff->IsTabLuteFrench()) ? 2.0 : 1.0; - yRel += doc->GetDrawingUnit(staff->m_drawingStaffSize) * spacingRatio; + // For stems outside add a margin to the tabDurSym - otherwise attached to the staff line + if (staff->IsTabWithBeamOutside()) { + double spacingRatio = (staff->IsTabLuteFrench()) ? 2.0 : 1.0; + yRel += doc->GetDrawingUnit(staff->m_drawingStaffSize) * spacingRatio; + } this->SetDrawingYRel(-yRel); } @@ -110,7 +115,11 @@ int TabDurSym::CalcStemLenInThirdUnits(Staff *staff, data_STEMDIRECTION stemDir) int baseStem = STANDARD_STEMLENGTH_TAB * 3; - if (!staff->IsTabWithBeamOutside()) baseStem += 6; + // One unit longer for guitar tablature + if (staff->IsTabGuitar()) baseStem += 3; + + // One unit longer for stems inside the staff + if (!staff->IsTabWithBeamOutside()) baseStem += 3; return baseStem; } @@ -188,17 +197,34 @@ int TabDurSym::CalcStem(FunctorParams *functorParams) stemDirFactor = 1; } - // Make sure the relative position of the stem is the same - stem->SetDrawingYRel(0); + if (params->m_staff->IsTabWithBeamOutside()) { + // Make sure the relative position of the stem is the same + stem->SetDrawingYRel(0); + } + else { + // Other wise attach it to the closest note + TabGrp *tabGrp = vrv_cast(this->GetFirstAncestor(TABGRP)); + assert(tabGrp); + Note *note = (stemDir == STEMDIRECTION_down) ? tabGrp->GetBottomNote() : tabGrp->GetTopNote(); + int yRel = (note) ? note->GetDrawingY() : 0; + // Because the tabDurSym is relative to the top or bottom staff line, remove its relative value + yRel -= this->GetDrawingYRel(); + // Remove a unit for the stem not to go to the center of the note + yRel -= params->m_doc->GetDrawingUnit(params->m_staff->m_drawingStaffSize) * stemDirFactor; + stem->SetDrawingYRel(yRel); + } + int stemSize = this->CalcStemLenInThirdUnits(params->m_staff, stemDir) * params->m_doc->GetDrawingUnit(staffSize); stemSize /= (3 * stemDirFactor); if (params->m_dur == DUR_2) { + // Stems for half notes twice shorter stemSize /= 2; } stem->SetDrawingStemLen(stemSize); + // Do not call Stem::CalcStem with TabDurSym because everything is done here return FUNCTOR_SIBLINGS; } From 59ab77e18f529a66c069ee92d71c2a00014628e6 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 10:28:11 +0100 Subject: [PATCH 284/403] Rename Staff::IsTabWithBeamOutside to IsTabWithStemsOutside --- include/vrv/staff.h | 2 +- src/beam.cpp | 8 ++++---- src/layerelement.cpp | 2 +- src/staff.cpp | 2 +- src/tabdursym.cpp | 6 +++--- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/include/vrv/staff.h b/include/vrv/staff.h index 97cc7edcc33..9f99c8c980d 100644 --- a/include/vrv/staff.h +++ b/include/vrv/staff.h @@ -113,7 +113,7 @@ class Staff : public Object, bool IsTabLuteFrench() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_french; } bool IsTabLuteGerman() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_german; } bool IsTabLuteItalian() { return m_drawingNotationType == NOTATIONTYPE_tab_lute_italian; } - bool IsTabWithBeamOutside(); + bool IsTabWithStemsOutside(); ///@} /** diff --git a/src/beam.cpp b/src/beam.cpp index 5a31cc70f06..01d2ca5ff60 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -105,7 +105,7 @@ void BeamSegment::CalcBeam( // Alwyas horizontal when outside the staff and not when inside the staff // Eventually we will need to look at the content to pre-determine if horizontal for inside beams - horizontal = staff->IsTabWithBeamOutside(); + horizontal = staff->IsTabWithStemsOutside(); this->CalcBeamPlaceTab(layer, staff, doc, beamInterface, place); } else { @@ -836,7 +836,7 @@ void BeamSegment::CalcBeamPosition( } // Nothing else to do with tab beams outside the staff - if (staff->IsTablature() && staff->IsTabWithBeamOutside()) return; + if (staff->IsTablature() && staff->IsTabWithStemsOutside()) return; /******************************************************************/ // Calculate the slope is necessary @@ -1152,7 +1152,7 @@ void BeamSegment::CalcBeamPlaceTab( beamInterface->m_drawingPlace = (layerStemDir == STEMDIRECTION_down) ? BEAMPLACE_below : BEAMPLACE_above; } - if (beamInterface->m_drawingPlace == BEAMPLACE_below && staff->IsTabWithBeamOutside()) { + if (beamInterface->m_drawingPlace == BEAMPLACE_below && staff->IsTabWithStemsOutside()) { for (auto coord : m_beamElementCoordRefs) { if (!coord->m_element || !coord->m_element->Is(TABGRP)) continue; TabGrp *tabGrp = vrv_cast(coord->m_element); @@ -1168,7 +1168,7 @@ void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool is const data_STEMDIRECTION stemDir = (place == BEAMPLACE_below) ? STEMDIRECTION_down : STEMDIRECTION_up; int relevantNoteLoc = VRV_UNSET; for (auto coord : m_beamElementCoordRefs) { - coord->SetClosestNoteOrTabDurSym(stemDir, staff->IsTabWithBeamOutside()); + coord->SetClosestNoteOrTabDurSym(stemDir, staff->IsTabWithStemsOutside()); // Nothing else to do if we have no closest note (that includes tab beams outside the staff) if (!coord->m_closestNote) continue; if (relevantNoteLoc == VRV_UNSET) { diff --git a/src/layerelement.cpp b/src/layerelement.cpp index eb1a6b4571b..4ec6b3f0e1a 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -1436,7 +1436,7 @@ int LayerElement::SetAlignmentPitchPos(FunctorParams *functorParams) } else if (this->Is(TABDURSYM)) { int yRel = 0; - if (staffY->IsTabWithBeamOutside()) { + if (staffY->IsTabWithStemsOutside()) { double spacingRatio = (staffY->IsTabLuteFrench()) ? 2.0 : 1.0; yRel += params->m_doc->GetDrawingUnit(staffY->m_drawingStaffSize) * spacingRatio; } diff --git a/src/staff.cpp b/src/staff.cpp index 3210cad6cdb..0dda004e327 100644 --- a/src/staff.cpp +++ b/src/staff.cpp @@ -226,7 +226,7 @@ bool Staff::IsTablature() return isTablature; } -bool Staff::IsTabWithBeamOutside() +bool Staff::IsTabWithStemsOutside() { if (!m_drawingStaffDef) return false; // Temporary implementation looking at staffDef@type diff --git a/src/tabdursym.cpp b/src/tabdursym.cpp index 0cc5a754bf6..7187e1700e5 100644 --- a/src/tabdursym.cpp +++ b/src/tabdursym.cpp @@ -85,7 +85,7 @@ void TabDurSym::AdjustDrawingYRel(Staff *staff, Doc *doc) int yRel = (staff->m_drawingLines - 1) * doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); // For stems outside add a margin to the tabDurSym - otherwise attached to the staff line - if (staff->IsTabWithBeamOutside()) { + if (staff->IsTabWithStemsOutside()) { double spacingRatio = (staff->IsTabLuteFrench()) ? 2.0 : 1.0; yRel += doc->GetDrawingUnit(staff->m_drawingStaffSize) * spacingRatio; } @@ -119,7 +119,7 @@ int TabDurSym::CalcStemLenInThirdUnits(Staff *staff, data_STEMDIRECTION stemDir) if (staff->IsTabGuitar()) baseStem += 3; // One unit longer for stems inside the staff - if (!staff->IsTabWithBeamOutside()) baseStem += 3; + if (!staff->IsTabWithStemsOutside()) baseStem += 3; return baseStem; } @@ -197,7 +197,7 @@ int TabDurSym::CalcStem(FunctorParams *functorParams) stemDirFactor = 1; } - if (params->m_staff->IsTabWithBeamOutside()) { + if (params->m_staff->IsTabWithStemsOutside()) { // Make sure the relative position of the stem is the same stem->SetDrawingYRel(0); } From 251e60ea740e486bd0c64dcb5c9914c5e9f17c52 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 10:31:50 +0100 Subject: [PATCH 285/403] Rename temporary implementation of staffDef@type content from "within" to "stems.within" --- src/staff.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/staff.cpp b/src/staff.cpp index 0dda004e327..bd259c4f08f 100644 --- a/src/staff.cpp +++ b/src/staff.cpp @@ -230,7 +230,7 @@ bool Staff::IsTabWithStemsOutside() { if (!m_drawingStaffDef) return false; // Temporary implementation looking at staffDef@type - return (!this->IsTabGuitar() || !m_drawingStaffDef->HasType() || m_drawingStaffDef->GetType() != "within"); + return (!this->IsTabGuitar() || !m_drawingStaffDef->HasType() || m_drawingStaffDef->GetType() != "stems.within"); } int Staff::CalcPitchPosYRel(Doc *doc, int loc) From 2859c01de299e73dd37ce03a2abfd4b6365cb1f9 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 11:19:17 +0100 Subject: [PATCH 286/403] Add flag to guitar tablature tabDurSym --- src/tabdursym.cpp | 31 +++++++++++++++++++++++++++++++ src/view_element.cpp | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/tabdursym.cpp b/src/tabdursym.cpp index 7187e1700e5..ba7e8ce2316 100644 --- a/src/tabdursym.cpp +++ b/src/tabdursym.cpp @@ -131,12 +131,34 @@ int TabDurSym::CalcStemLenInThirdUnits(Staff *staff, data_STEMDIRECTION stemDir) int TabDurSym::PrepareLayerElementParts(FunctorParams *functorParams) { Stem *currentStem = dynamic_cast(this->FindDescendantByType(STEM, 1)); + Flag *currentFlag = NULL; + if (currentStem) currentFlag = dynamic_cast(currentStem->GetFirst(FLAG)); if (!currentStem) { currentStem = new Stem(); this->AddChild(currentStem); } this->SetDrawingStem(currentStem); + + /************ flags ***********/ + + TabGrp *tabGrp = vrv_cast(this->GetFirstAncestor(TABGRP)); + assert(tabGrp); + + // No flag within beam of for durations longer than 8th notes + if (!this->IsInBeam() && tabGrp->GetActualDur() > DUR_4) { + // We must have a stem at this stage + assert(currentStem); + if (!currentFlag) { + currentFlag = new Flag(); + currentStem->AddChild(currentFlag); + } + } + // This will happen only if the duration has changed (no flag required anymore) + else if (currentFlag) { + assert(currentStem); + if (currentStem->DeleteChild(currentFlag)) currentFlag = NULL; + } return FUNCTOR_SIBLINGS; } @@ -224,6 +246,15 @@ int TabDurSym::CalcStem(FunctorParams *functorParams) stem->SetDrawingStemLen(stemSize); + // Flag currently used only for gitar tablature because it is included in the glyphs for lute tab + if (params->m_staff->IsTabGuitar()) { + Flag *flag = vrv_cast(stem->GetFirst(FLAG)); + if (flag) { + flag->m_drawingNbFlags = params->m_dur - DUR_4; + flag->SetDrawingYRel(-stemSize); + } + } + // Do not call Stem::CalcStem with TabDurSym because everything is done here return FUNCTOR_SIBLINGS; } diff --git a/src/view_element.cpp b/src/view_element.cpp index 22b1b382328..f8e35a9ca38 100644 --- a/src/view_element.cpp +++ b/src/view_element.cpp @@ -890,7 +890,7 @@ void View::DrawFlag(DeviceContext *dc, LayerElement *element, Layer *layer, Staf dc->StartGraphic(element, "", element->GetUuid()); wchar_t code = flag->GetFlagGlyph(stem->GetDrawingStemDir()); - this->DrawSmuflCode(dc, x, y, code, staff->m_drawingStaffSize, flag->GetDrawingCueSize()); + this->DrawSmuflCode(dc, x, y, code, staff->GetDrawingStaffNotationSize(), flag->GetDrawingCueSize()); dc->EndGraphic(element, this); } From 33ec6f9eb3967c2475e6bfeef22d0b02b17d3490 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 12:12:26 +0100 Subject: [PATCH 287/403] Adjust dots position relatively to stem (if any) --- src/tabdursym.cpp | 4 ++-- src/view_tab.cpp | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/tabdursym.cpp b/src/tabdursym.cpp index ba7e8ce2316..311fc599ccf 100644 --- a/src/tabdursym.cpp +++ b/src/tabdursym.cpp @@ -139,7 +139,7 @@ int TabDurSym::PrepareLayerElementParts(FunctorParams *functorParams) this->AddChild(currentStem); } this->SetDrawingStem(currentStem); - + /************ flags ***********/ TabGrp *tabGrp = vrv_cast(this->GetFirstAncestor(TABGRP)); @@ -228,7 +228,7 @@ int TabDurSym::CalcStem(FunctorParams *functorParams) TabGrp *tabGrp = vrv_cast(this->GetFirstAncestor(TABGRP)); assert(tabGrp); Note *note = (stemDir == STEMDIRECTION_down) ? tabGrp->GetBottomNote() : tabGrp->GetTopNote(); - int yRel = (note) ? note->GetDrawingY() : 0; + int yRel = (note) ? note->GetDrawingYRel() : 0; // Because the tabDurSym is relative to the top or bottom staff line, remove its relative value yRel -= this->GetDrawingYRel(); // Remove a unit for the stem not to go to the center of the note diff --git a/src/view_tab.cpp b/src/view_tab.cpp index dd79a68d7f2..0fa638de630 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -17,6 +17,7 @@ #include "devicecontext.h" #include "doc.h" +#include "elementpart.h" #include "note.h" #include "options.h" #include "rend.h" @@ -193,6 +194,9 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, if (tabGrp->HasDots()) { const int stemDirFactor = (tabDurSym->GetDrawingStemDir() == STEMDIRECTION_down) ? -1 : 1; + if (tabDurSym->GetDrawingStem()) { + y = tabDurSym->GetDrawingStem()->GetDrawingY(); + } y += m_doc->GetDrawingUnit(glyphSize) * 0.5 * stemDirFactor; x += m_doc->GetDrawingUnit(glyphSize); for (int i = 0; i < tabGrp->GetDots(); ++i) { From b5d60cf5db56899aefa5839cf0a4af125ffaeec8 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 13:20:20 +0100 Subject: [PATCH 288/403] Changing dynamic_cast to vrv_cast --- src/tabdursym.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tabdursym.cpp b/src/tabdursym.cpp index 311fc599ccf..a9df42f779b 100644 --- a/src/tabdursym.cpp +++ b/src/tabdursym.cpp @@ -130,9 +130,9 @@ int TabDurSym::CalcStemLenInThirdUnits(Staff *staff, data_STEMDIRECTION stemDir) int TabDurSym::PrepareLayerElementParts(FunctorParams *functorParams) { - Stem *currentStem = dynamic_cast(this->FindDescendantByType(STEM, 1)); + Stem *currentStem = vrv_cast(this->FindDescendantByType(STEM, 1)); Flag *currentFlag = NULL; - if (currentStem) currentFlag = dynamic_cast(currentStem->GetFirst(FLAG)); + if (currentStem) currentFlag = vrv_cast(currentStem->GetFirst(FLAG)); if (!currentStem) { currentStem = new Stem(); From 82a3b1151b94e67ddaf619dcf7ed349b6f9362cf Mon Sep 17 00:00:00 2001 From: Monceber Date: Fri, 4 Feb 2022 16:35:56 +0200 Subject: [PATCH 289/403] Remove option to exclude ranges of SMUFL glyphs based on the JSON file --- data/fontmetadata.json.template | 209 -------------------------------- src/vrv.cpp | 51 +------- 2 files changed, 1 insertion(+), 259 deletions(-) delete mode 100644 data/fontmetadata.json.template diff --git a/data/fontmetadata.json.template b/data/fontmetadata.json.template deleted file mode 100644 index 5fc29d1920d..00000000000 --- a/data/fontmetadata.json.template +++ /dev/null @@ -1,209 +0,0 @@ -{ - "glyphRanges" : [ - { - "rangeName" : "Staff brackets and dividers", - "rangeStart" : "E000", - "rangeEnd" : "E004" - }, - { - "rangeName" : "Repeats", - "rangeStart" : "E043", - "rangeEnd" : "E04B" - }, - { - "rangeName" : "Clefs", - "rangeStart" : "E050", - "rangeEnd" : "E077" - }, - { - "rangeName" : "Time signatures", - "rangeStart" : "E080", - "rangeEnd" : "E095" - }, - { - "rangeName" : "Noteheads", - "rangeStart" : "E0A0", - "rangeEnd" : "E0FA" - }, - { - "rangeName" : "Slash noteheads", - "rangeStart" : "E101", - "rangeEnd" : "E103" - }, - { - "rangeName" : "Tremolos", - "rangeStart" : "E220", - "rangeEnd" : "E22A" - }, - { - "rangeName" : "Flags", - "rangeStart" : "E240", - "rangeEnd" : "E24F" - }, - { - "rangeName" : "Standard accidentals (12-EDO)", - "rangeStart" : "E260", - "rangeEnd" : "E26D" - }, - { - "rangeName" : "Gould arrow quartertone accidentals (24-EDO)", - "rangeStart" : "E270", - "rangeEnd" : "E275" - }, - { - "rangeName" : "Stein-Zimmermann accidentals (24-EDO)", - "rangeStart" : "E280", - "rangeEnd" : "E283" - }, - { - "rangeName" : "Arel-Ezgi-Uzdilek (AEU) accidentals", - "rangeStart" : "E440", - "rangeEnd" : "E447" - }, - { - "rangeName" : "Articulation", - "rangeStart" : "E4A0", - "rangeEnd" : "E4BD" - }, - { - "rangeName" : "Holds and pauses", - "rangeStart" : "E4C0", - "rangeEnd" : "E4CE" - }, - { - "rangeName" : "Rests", - "rangeStart" : "E4E0", - "rangeEnd" : "E4F6" - }, - { - "rangeName" : "Bar repeats", - "rangeStart" : "E500", - "rangeEnd" : "E505" - }, - { - "rangeName" : "Octaves", - "rangeStart" : "E510", - "rangeEnd" : "E51E" - }, - { - "rangeName" : "Dynamics", - "rangeStart" : "E520", - "rangeEnd" : "E53D" - }, - { - "rangeName" : "Common ornaments", - "rangeStart" : "E566", - "rangeEnd" : "E56F" - }, - { - "rangeName" : "Other baroque ornaments", - "rangeStart" : "E583", - "rangeEnd" : "E587" - }, - { - "rangeName" : "Combining strokes for trills and mordents", - "rangeStart" : "E59D", - "rangeEnd" : "E59E" - }, - { - "rangeName" : "Precomposed trills and mordents", - "rangeStart" : "E5B0", - "rangeEnd" : "E5C8" - }, - { - "rangeName" : "Brass techniques", - "rangeStart" : "E5E5", - "rangeEnd" : "E5E7" - }, - { - "rangeName" : "String techniques", - "rangeStart" : "E610", - "rangeEnd" : "E614" - }, - { - "rangeName" : "Plucked techniques", - "rangeStart" : "E630", - "rangeEnd" : "E638" - }, - { - "rangeName" : "Vocal techniques", - "rangeStart" : "E645", - "rangeEnd" : "E645" - }, - { - "rangeName" : "Keyboard techniques", - "rangeStart" : "E650", - "rangeEnd" : "E65A" - }, - { - "rangeName" : "Tuplets", - "rangeStart" : "E880", - "rangeEnd" : "E88A" - }, - { - "rangeName" : "Medieval and Renaissance clefs", - "rangeStart" : "E901", - "rangeEnd" : "E909" - }, - { - "rangeName" : "Medieval and Renaissance prolations", - "rangeStart" : "E910", - "rangeEnd" : "E925" - }, - { - "rangeName" : "Medieval and Renaissance noteheads and stems", - "rangeStart" : "E938", - "rangeEnd" : "E94C" - }, - { - "rangeName" : "Medieval and Renaissance plainchant single-note forms", - "rangeStart" : "E990", - "rangeEnd" : "E99F" - }, - { - "rangeName" : "Medieval and Renaissance plainchant multiple-note forms", - "rangeStart" : "E9B4", - "rangeEnd" : "E9BC" - }, - { - "rangeName" : "Medieval and Renaissance accidentals", - "rangeStart" : "E9E0", - "rangeEnd" : "E9E3" - }, - { - "rangeName" : "Medieval and Renaissance rests", - "rangeStart" : "E9F0", - "rangeEnd" : "E9F8" - }, - { - "rangeName" : "Medieval and Renaissance miscellany", - "rangeStart" : "EA02", - "rangeEnd" : "EA06" - }, - { - "rangeName" : "Multi-segment lines", - "rangeStart" : "EAA4", - "rangeEnd" : "EAAF" - }, - { - "rangeName" : "Renaissance lute tablature", - "rangeStart" : "EBA7", - "rangeEnd" : "EBAC" - }, - { - "rangeName" : "French and English Renaissance lute tablature", - "rangeStart" : "EBC0", - "rangeEnd" : "EBCC" - }, - { - "rangeName" : "Italian and Spanish Renaissance lute tablature", - "rangeStart" : "EBE0", - "rangeEnd" : "EBE9" - }, - { - "rangeName" : "Articulation supplement", - "rangeStart" : "ED40", - "rangeEnd" : "ED41" - } - ] -} \ No newline at end of file diff --git a/src/vrv.cpp b/src/vrv.cpp index 0fb5a46f35e..ac08f47a969 100644 --- a/src/vrv.cpp +++ b/src/vrv.cpp @@ -46,7 +46,6 @@ //---------------------------------------------------------------------------- #include "checked.h" -#include "jsonxx.h" #include "pugixml.hpp" #include "unchecked.h" @@ -134,45 +133,6 @@ wchar_t Resources::GetGlyphCode(const std::string &smuflName) return s_glyphNameTable.count(smuflName) ? s_glyphNameTable.at(smuflName) : 0; } -std::map Resources::GetGlyphRanges() -{ - constexpr std::string_view input = "fontmetadata.json"; - constexpr std::string_view glyphRanges = "glyphRanges"; - constexpr std::string_view rangeStart = "rangeStart"; - constexpr std::string_view rangeEnd = "rangeEnd"; - - jsonxx::Object content; - // Input is file path - std::ifstream in(Resources::GetPath() + "/" + input.data()); - if (!in.is_open()) { - return {}; - } - const bool parseResult = content.parse(in); - in.close(); - if (!parseResult) return {}; - - if (content.kv_map().empty() || !content.kv_map().count(glyphRanges.data()) - || !content.kv_map().at(glyphRanges.data())->is()) - return {}; - - const jsonxx::Array jsonRanges = content.kv_map().at(glyphRanges.data())->get(); - std::map result; - for (const auto element : jsonRanges.values()) { - if (!element->is()) continue; - - auto range = element->get().kv_map(); - if (!range.count(rangeStart.data()) || !range.at(rangeStart.data())->is()) continue; - if (!range.count(rangeEnd.data()) || !range.at(rangeEnd.data())->is()) continue; - - const wchar_t start = (wchar_t)strtol(range.at(rangeStart.data())->get().c_str(), NULL, 16); - const wchar_t end = (wchar_t)strtol(range.at(rangeEnd.data())->get().c_str(), NULL, 16); - - result[start] = end; - } - - return result; -} - void Resources::SelectTextFont(data_FONTWEIGHT fontWeight, data_FONTSTYLE fontStyle) { if (fontWeight == FONTWEIGHT_NONE) { @@ -222,21 +182,11 @@ bool Resources::LoadFont(const std::string &fontName) const int unitsPerEm = atoi(root.attribute("units-per-em").value()); - const std::map ranges = GetGlyphRanges(); for (pugi::xml_node current = root.child("g"); current; current = current.next_sibling("g")) { pugi::xml_attribute c_attribute = current.attribute("c"); pugi::xml_attribute n_attribute = current.attribute("n"); if (!c_attribute || !n_attribute) continue; - const wchar_t smuflCode = (wchar_t)strtol(c_attribute.value(), NULL, 16); - if (!ranges.empty()) { - const auto it - = std::find_if(ranges.begin(), ranges.end(), [smuflCode](const std::pair &keyValue) { - return (smuflCode >= keyValue.first) && (smuflCode <= keyValue.second); - }); - if (it == ranges.end()) continue; - } - Glyph glyph; glyph.SetUnitsPerEm(unitsPerEm * 10); glyph.SetCodeStr(c_attribute.value()); @@ -259,6 +209,7 @@ bool Resources::LoadFont(const std::string &fontName) } } + const wchar_t smuflCode = (wchar_t)strtol(c_attribute.value(), NULL, 16); s_fontGlyphTable[smuflCode] = glyph; s_glyphNameTable[n_attribute.value()] = smuflCode; } From 980e2a4c2d011cb6495160689935149d2859571b Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 16:04:54 +0100 Subject: [PATCH 290/403] Adjust meter sig rendering for tablature to use staff notation size (smaller) --- src/view_element.cpp | 26 +++++++++++++++----------- src/view_page.cpp | 9 ++++++--- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/view_element.cpp b/src/view_element.cpp index f8e35a9ca38..9590344d0fb 100644 --- a/src/view_element.cpp +++ b/src/view_element.cpp @@ -1073,16 +1073,18 @@ void View::DrawMeterSig(DeviceContext *dc, MeterSig *meterSig, Staff *staff, int int y = staff->GetDrawingY() - m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * (staff->m_drawingLines - 1); int x = meterSig->GetDrawingX() + horizOffset; + + const int glyphSize = staff->GetDrawingStaffNotationSize(); if (enclosingFront) { - this->DrawSmuflCode(dc, x, y, enclosingFront, staff->m_drawingStaffSize, false); - x += m_doc->GetGlyphWidth(enclosingFront, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, x, y, enclosingFront, glyphSize, false); + x += m_doc->GetGlyphWidth(enclosingFront, glyphSize, false); } if (meterSig->HasSym()) { const wchar_t code = meterSig->GetSymbolGlyph(); - this->DrawSmuflCode(dc, x, y, code, staff->m_drawingStaffSize, false); - x += m_doc->GetGlyphWidth(code, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, x, y, code, glyphSize, false); + x += m_doc->GetGlyphWidth(code, glyphSize, false); } else if (meterSig->GetForm() == METERFORM_num) { x += this->DrawMeterSigFigures(dc, x, y, meterSig->GetCount(), 0, staff); @@ -1092,7 +1094,7 @@ void View::DrawMeterSig(DeviceContext *dc, MeterSig *meterSig, Staff *staff, int } if (enclosingBack) { - this->DrawSmuflCode(dc, x, y, enclosingBack, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, x, y, enclosingBack, glyphSize, false); } dc->EndGraphic(meterSig, this); @@ -1773,8 +1775,10 @@ int View::DrawMeterSigFigures( timeSigCombNumerator += IntToTimeSigFigures(summand); } if (den) timeSigCombDenominator = IntToTimeSigFigures(den); + + const int glyphSize = staff->GetDrawingStaffNotationSize(); - dc->SetFont(m_doc->GetDrawingSmuflFont(staff->m_drawingStaffSize, false)); + dc->SetFont(m_doc->GetDrawingSmuflFont(glyphSize, false)); std::wstring widthText = (timeSigCombNumerator.length() > timeSigCombDenominator.length()) ? timeSigCombNumerator : timeSigCombDenominator; @@ -1785,8 +1789,8 @@ int View::DrawMeterSigFigures( x += width / 2; if (den) { - int yNum = y + m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); - int yDen = y - m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); + int yNum = y + m_doc->GetDrawingDoubleUnit(glyphSize); + int yDen = y - m_doc->GetDrawingDoubleUnit(glyphSize); // In case when one of the handwritten fonts is used, we need to make sure that meterSig is displayed properly // for it, based on the height of corresponding glyphs FontInfo *fontInfo = dc->GetFont(); @@ -1801,12 +1805,12 @@ int View::DrawMeterSigFigures( dc->GetSmuflTextExtent(timeSigCombDenominator, &denExtend); yDen = y - denExtend.m_height / 2; } - this->DrawSmuflString(dc, x, yNum, timeSigCombNumerator, HORIZONTALALIGNMENT_center, staff->m_drawingStaffSize); + this->DrawSmuflString(dc, x, yNum, timeSigCombNumerator, HORIZONTALALIGNMENT_center, glyphSize); this->DrawSmuflString( - dc, x, yDen, timeSigCombDenominator, HORIZONTALALIGNMENT_center, staff->m_drawingStaffSize); + dc, x, yDen, timeSigCombDenominator, HORIZONTALALIGNMENT_center, glyphSize); } else { - this->DrawSmuflString(dc, x, y, timeSigCombNumerator, HORIZONTALALIGNMENT_center, staff->m_drawingStaffSize); + this->DrawSmuflString(dc, x, y, timeSigCombNumerator, HORIZONTALALIGNMENT_center, glyphSize); } dc->ResetFont(); diff --git a/src/view_page.cpp b/src/view_page.cpp index 11092f6d229..e31e1c8c8f8 100644 --- a/src/view_page.cpp +++ b/src/view_page.cpp @@ -1052,7 +1052,10 @@ void View::DrawMeterSigGrp(DeviceContext *dc, Layer *layer, Staff *staff) MeterSigGrp *meterSigGrp = layer->GetStaffDefMeterSigGrp(); const ArrayOfObjects *childList = meterSigGrp->GetList(meterSigGrp); - const int unit = m_doc->GetDrawingUnit(staff->m_drawingStaffSize); + + const int glyphSize = staff->GetDrawingStaffNotationSize(); + + const int unit = m_doc->GetDrawingUnit(glyphSize); int offset = 0; dc->StartGraphic(meterSigGrp, "", meterSigGrp->GetUuid()); // Draw meterSigGrp by alternating meterSig and plus sign (when required) @@ -1070,8 +1073,8 @@ void View::DrawMeterSigGrp(DeviceContext *dc, Layer *layer, Staff *staff) if ((meterSigGrp->GetFunc() == meterSigGrpLog_FUNC_mixed) && (iter != std::prev(childList->end()))) { // draw plus sign here const int plusX = x + width + unit / 2; - this->DrawSmuflCode(dc, plusX, y, SMUFL_E08C_timeSigPlus, staff->m_drawingStaffSize, false); - offset += width + unit + m_doc->GetGlyphWidth(SMUFL_E08C_timeSigPlus, staff->m_drawingStaffSize, false); + this->DrawSmuflCode(dc, plusX, y, SMUFL_E08C_timeSigPlus, glyphSize, false); + offset += width + unit + m_doc->GetGlyphWidth(SMUFL_E08C_timeSigPlus, glyphSize, false); } else { offset += width + unit; From 4d4c44e4640f13f28446fd505c9d90bff29e4dfa Mon Sep 17 00:00:00 2001 From: Monceber Date: Fri, 4 Feb 2022 17:14:24 +0200 Subject: [PATCH 291/403] Minor fixes - added missed call to CreateHeader() - move creation of phHead element before scoreDef gets populated - add F: element as annot to work list --- src/ioabc.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 4bfd2a1e269..327e5a94587 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -99,7 +99,7 @@ bool ABCInput::Import(const std::string &abc) // parseABC -- // -void ABCInput::ParseABC(std::istream &infile) +void ABCInput::ParseABC(std::istream &infile) { // initialize doc m_doc->Reset(); @@ -107,6 +107,7 @@ void ABCInput::ParseABC(std::istream &infile) Score *score = NULL; Section *section = NULL; + CreateHeader(); while (!infile.eof()) { std::getline(infile, abcLine); ++m_lineNum; @@ -902,7 +903,6 @@ void ABCInput::FlushControlElements(Score *score, Section *section) m_controlElements.clear(); } - void ABCInput::InitScoreAndSection(Score *&score, Section *§ion) { // create score @@ -925,13 +925,13 @@ void ABCInput::InitScoreAndSection(Score *&score, Section *§ion) m_meter = NULL; } staffGrp->AddChild(staffDef); + // create page head + this->PrintInformationFields(score); score->GetScoreDef()->AddChild(staffGrp); if (m_key) { score->GetScoreDef()->AddChild(m_key); m_key = NULL; } - // create page head - this->PrintInformationFields(score); // create section section = new Section(); @@ -982,7 +982,7 @@ void ABCInput::readInformationField(const char &dataKey, std::string value) case 'B': m_info.push_back(std::make_pair(std::make_pair(value, m_lineNum), dataKey)); break; case 'C': m_composer.push_back(std::make_pair(value, m_lineNum)); break; case 'D': m_info.push_back(std::make_pair(std::make_pair(value, m_lineNum), dataKey)); break; - case 'F': m_filename = value; break; + case 'F': m_info.push_back(std::make_pair(std::make_pair(value, m_lineNum), dataKey)); break; case 'H': m_history.push_back(std::make_pair(value, m_lineNum)); break; case 'I': parseInstruction(value); break; case 'K': parseKey(value); break; From b0508de907a02b03a9ca4f853cd8c78116985851 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 16:38:36 +0100 Subject: [PATCH 292/403] Rename method for clarification --- include/vrv/drawinginterface.h | 2 +- src/drawinginterface.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/vrv/drawinginterface.h b/include/vrv/drawinginterface.h index ee2bb913d06..c47eaf991df 100644 --- a/include/vrv/drawinginterface.h +++ b/include/vrv/drawinginterface.h @@ -155,7 +155,7 @@ class BeamDrawingInterface : public ObjectListInterface { * Determines whether beam should be horizontal based on item positions and relative beam place. Should be used with * mixed beams, where beam place can be different for separate elements */ - bool IsHorizontal(const std::vector &items, const std::vector &directions) const; + bool IsHorizontalMixedBeam(const std::vector &items, const std::vector &directions) const; public: // values to be set before calling CalcBeam diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index abbde4c5cd5..253d29c722c 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -299,7 +299,7 @@ bool BeamDrawingInterface::IsHorizontal() if (first == last) return true; // If drawing place is mixed and is should be drawn horizontal based on mixed rules - if ((m_drawingPlace == BEAMPLACE_mixed) && (IsHorizontal(items, directions))) return true; + if ((m_drawingPlace == BEAMPLACE_mixed) && (this->IsHorizontalMixedBeam(items, directions))) return true; // Detect beam with two pitches only and as step at the beginning or at the end const bool firstStep = (first != items.at(1)); @@ -335,7 +335,7 @@ bool BeamDrawingInterface::IsHorizontal() return false; } -bool BeamDrawingInterface::IsHorizontal( +bool BeamDrawingInterface::IsHorizontalMixedBeam( const std::vector &items, const std::vector &directions) const { // items and directions should be of the same size, otherwise something is wrong From bd0190c1068ee00a773ceb1b5350d43f093f9627 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 16:39:07 +0100 Subject: [PATCH 293/403] Remove enum and use data_STEMDIRECTION instead --- src/drawinginterface.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index 253d29c722c..5bc3c1bf8ff 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -21,13 +21,11 @@ namespace vrv { -enum class NoteDirection { none, upward, downward }; - // helper for determining note direction -NoteDirection GetNoteDirection(int leftNoteX, int rightNoteX) +data_STEMDIRECTION GetNoteDirection(int leftNoteY, int rightNoteY) { - if (leftNoteX == rightNoteX) return NoteDirection::none; - return (leftNoteX < rightNoteX) ? NoteDirection::upward : NoteDirection::downward; + if (leftNoteY == rightNoteY) return STEMDIRECTION_NONE; + return (leftNoteY < rightNoteY) ? STEMDIRECTION_up : STEMDIRECTION_down; } //---------------------------------------------------------------------------- @@ -359,10 +357,10 @@ bool BeamDrawingInterface::IsHorizontalMixedBeam( int previousTop = VRV_UNSET; int previousBottom = VRV_UNSET; - NoteDirection outsidePitchDirection = GetNoteDirection(items.front(), items.back()); - std::map beamDirections{ { NoteDirection::none, 0 }, { NoteDirection::upward, 0 }, - { NoteDirection::downward, 0 } }; - for (int i = 0; i < items.size(); ++i) { + data_STEMDIRECTION outsidePitchDirection = GetNoteDirection(items.front(), items.back()); + std::map beamDirections{ { STEMDIRECTION_NONE, 0 }, { STEMDIRECTION_up, 0 }, + { STEMDIRECTION_down, 0 } }; + for (int i = 0; i < (int)items.size(); ++i) { if (directions[i] == BEAMPLACE_above) { if (previousTop == VRV_UNSET) { previousTop = items[i]; From bf00a933b6fcf73b795eadd241f21a47236ce291 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 16:39:24 +0100 Subject: [PATCH 294/403] Use unused variable --- src/beam.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/beam.cpp b/src/beam.cpp index 270de29f02f..140e6d585a8 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1172,7 +1172,7 @@ void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool is if ((coord->m_dur > minDuration) && ((coord->m_closestNote->GetDrawingLoc() == relevantNoteLoc) || (!isHorizontal && (std::abs(m_uniformStemLength) < 13)))) { - m_uniformStemLength = coord->CalculateStemLength(staff, stemDir, isHorizontal); + m_uniformStemLength = coordStemLength; minDuration = coord->m_dur; } } From 4c296eaef772305b1f4c532007e924f96bb1da7b Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 16:39:50 +0100 Subject: [PATCH 295/403] Formatting --- include/vrv/beam.h | 3 +-- src/verticalaligner.cpp | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index b9cd5515e03..d3b37f224b5 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -227,13 +227,12 @@ class Beam : public LayerElement, Beam *GetStemSameasBeam() const { return m_stemSameas; } void SetStemSameasBeam(Beam *stemSameas) { m_stemSameas = stemSameas; } ///@} - + /** * See DrawingInterface::GetAdditionalBeamCount */ std::pair GetAdditionalBeamCount() const override; - //----------// // Functors // //----------// diff --git a/src/verticalaligner.cpp b/src/verticalaligner.cpp index 8fd9596c49f..776c9d962dd 100644 --- a/src/verticalaligner.cpp +++ b/src/verticalaligner.cpp @@ -510,7 +510,6 @@ int StaffAlignment::CalcMinimumRequiredSpacing(const Doc *doc) const overflowSum += adjust; } - BoundingBox *previous = prevAlignment->GetOverflowBBoxBelow(); BoundingBox *current = this->GetOverflowBBoxAbove(); if (previous && current) { From 57bfee0e5cc3f5d07f0fbfac1c2f9408caa6e6d2 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 17:46:56 +0100 Subject: [PATCH 296/403] Add missing getter for the BeamDrawingInterface --- include/vrv/beam.h | 7 +++++++ include/vrv/ftrem.h | 7 +++++++ include/vrv/object.h | 1 + 3 files changed, 15 insertions(+) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index d3b37f224b5..8d7414466c5 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -199,6 +199,13 @@ class Beam : public LayerElement, std::string GetClassName() const override { return "Beam"; } ///@} + /** + * @name Getter to interfaces + */ + ///@{ + BeamDrawingInterface *GetBeamDrawingInterface() override { return dynamic_cast(this); } + ///@} + int GetNoteCount() const { return this->GetChildCount(NOTE); } /** diff --git a/include/vrv/ftrem.h b/include/vrv/ftrem.h index 09afc584362..262b11b637a 100644 --- a/include/vrv/ftrem.h +++ b/include/vrv/ftrem.h @@ -36,6 +36,13 @@ class FTrem : public LayerElement, public BeamDrawingInterface, public AttFTremV std::string GetClassName() const override { return "FTrem"; } ///@} + /** + * @name Getter to interfaces + */ + ///@{ + BeamDrawingInterface *GetBeamDrawingInterface() override { return dynamic_cast(this); } + ///@} + /** * Add an element (a note or a chord) to a fTrem. * Only Note or Chord elements will be actually added to the fTrem. diff --git a/include/vrv/object.h b/include/vrv/object.h index eb4c6a656b1..54df51fbb22 100644 --- a/include/vrv/object.h +++ b/include/vrv/object.h @@ -120,6 +120,7 @@ class Object : public BoundingBox { } ///@} + virtual BeamDrawingInterface *GetBeamDrawingInterface() { return NULL; } virtual DurationInterface *GetDurationInterface() { return NULL; } virtual LinkingInterface *GetLinkingInterface() { return NULL; } virtual FacsimileInterface *GetFacsimileInterface() { return NULL; } From ecd0336c6f2c6a92de54d046167b427717403068 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 17:52:35 +0100 Subject: [PATCH 297/403] Move LayerElement::GetBeamChildOverflow to BeamInterface --- include/vrv/drawinginterface.h | 6 ++++++ include/vrv/layerelement.h | 6 ------ src/drawinginterface.cpp | 15 +++++++++++++++ src/layerelement.cpp | 18 ++---------------- 4 files changed, 23 insertions(+), 22 deletions(-) diff --git a/include/vrv/drawinginterface.h b/include/vrv/drawinginterface.h index c47eaf991df..5d90372c423 100644 --- a/include/vrv/drawinginterface.h +++ b/include/vrv/drawinginterface.h @@ -141,6 +141,11 @@ class BeamDrawingInterface : public ObjectListInterface { * Helper to get number of beams represented by attributes @beam and @beam.float */ virtual std::pair GetFloatingBeamCount() const { return { 0, 0 }; } + + /** + * Get above/below overflow for the children + */ + void GetBeamChildOverflow(StaffAlignment *&above, StaffAlignment *&below); protected: /** @@ -149,6 +154,7 @@ class BeamDrawingInterface : public ObjectListInterface { */ int GetPosition(Object *object, LayerElement *element); + // private: /** diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index adb2065151c..3f3dddf7318 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -472,12 +472,6 @@ class LayerElement : public Object, */ template void GetBeamOverflow(StaffAlignment *&above, StaffAlignment *&below); - /** - * Template for getting above/below overflow for children of BeamType elements (BEAM or FTREM) - */ - template - void GetBeamChildOverflow(StaffAlignment *&above, StaffAlignment *&below, BeamType *parent); - /** * Get above/below overflow for the chord elements */ diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index 5bc3c1bf8ff..dbdce16c27a 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -18,6 +18,7 @@ #include "layerelement.h" #include "note.h" #include "object.h" +#include "staff.h" namespace vrv { @@ -500,6 +501,20 @@ int BeamDrawingInterface::GetPosition(Object *object, LayerElement *element) return position; } +void BeamDrawingInterface::GetBeamChildOverflow(StaffAlignment *&above, StaffAlignment *&below) +{ + if (m_beamStaff && m_crossStaffContent) { + if (m_crossStaffRel == STAFFREL_basic_above) { + above = m_crossStaffContent->GetAlignment(); + below = m_beamStaff->GetAlignment(); + } + else { + above = m_beamStaff->GetAlignment(); + below = m_crossStaffContent->GetAlignment(); + } + } +} + //---------------------------------------------------------------------------- // StaffDefDrawingInterface //---------------------------------------------------------------------------- diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 2efeddcb82a..44e852e8113 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -297,11 +297,11 @@ void LayerElement::GetOverflowStaffAlignments(StaffAlignment *&above, StaffAlign if (this->Is({ ARTIC, STEM })) { if (this->GetFirstAncestor(BEAM)) { Beam *beam = vrv_cast(this->GetFirstAncestor(BEAM)); - this->GetBeamChildOverflow(above, below, beam); + if (!beam->m_crossStaff) beam->GetBeamChildOverflow(above, below); } else if (this->GetFirstAncestor(FTREM)) { FTrem *fTrem = vrv_cast(this->GetFirstAncestor(FTREM)); - this->GetBeamChildOverflow(above, below, fTrem); + if (!fTrem->m_crossStaff) fTrem->GetBeamChildOverflow(above, below); } } // Beams in cross-staff situation need special treatment @@ -348,20 +348,6 @@ template void LayerElement::GetBeamOverflow(StaffAlignment *&ab } } } - -template -void LayerElement::GetBeamChildOverflow(StaffAlignment *&above, StaffAlignment *&below, BeamType *parent) -{ - if (parent && parent->m_crossStaffContent && !parent->m_crossStaff) { - data_STAFFREL_basic direction = parent->m_crossStaffRel; - if (direction == STAFFREL_basic_above) { - above = parent->m_crossStaffContent->GetAlignment(); - below = parent->m_beamStaff->GetAlignment(); - } - else { - above = parent->m_beamStaff->GetAlignment(); - below = parent->m_crossStaffContent->GetAlignment(); - } } } From e70670fc1a17da99f5e148fec9c75f1154e5d841 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 17:53:10 +0100 Subject: [PATCH 298/403] Move LayerElement::GetBeamOverflow to BeamDrawingInterface --- include/vrv/drawinginterface.h | 5 ++++ include/vrv/layerelement.h | 5 ---- src/drawinginterface.cpp | 31 ++++++++++++++++++++++ src/layerelement.cpp | 47 +++------------------------------- 4 files changed, 40 insertions(+), 48 deletions(-) diff --git a/include/vrv/drawinginterface.h b/include/vrv/drawinginterface.h index 5d90372c423..7693e5a7a9c 100644 --- a/include/vrv/drawinginterface.h +++ b/include/vrv/drawinginterface.h @@ -142,6 +142,11 @@ class BeamDrawingInterface : public ObjectListInterface { */ virtual std::pair GetFloatingBeamCount() const { return { 0, 0 }; } + /** + * Get above/below overflow + */ + void GetBeamOverflow(StaffAlignment *&above, StaffAlignment *&below); + /** * Get above/below overflow for the children */ diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index 3f3dddf7318..a25ac42d67e 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -467,11 +467,6 @@ class LayerElement : public Object, private: int GetDrawingArticulationTopOrBottom(data_STAFFREL place, ArticType type); - /** - * Template for getting above/below overflow for BeamType elements (BEAM or FTREM) - */ - template void GetBeamOverflow(StaffAlignment *&above, StaffAlignment *&below); - /** * Get above/below overflow for the chord elements */ diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index dbdce16c27a..12e4029ee34 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -501,6 +501,37 @@ int BeamDrawingInterface::GetPosition(Object *object, LayerElement *element) return position; } +void BeamDrawingInterface::GetBeamOverflow(StaffAlignment *&above, StaffAlignment *&below) +{ + + if (!m_beamStaff || !m_crossStaffContent) return; + + if (m_drawingPlace == BEAMPLACE_mixed) { + above = NULL; + below = NULL; + } + // Beam below - ignore above and find the appropriate below staff + else if (m_drawingPlace == BEAMPLACE_below) { + above = NULL; + if (m_crossStaffRel == STAFFREL_basic_above) { + below = m_beamStaff->GetAlignment(); + } + else { + below = m_crossStaffContent->GetAlignment(); + } + } + // Beam above - ignore below and find the appropriate above staff + else if (m_drawingPlace == BEAMPLACE_above) { + below = NULL; + if (m_crossStaffRel == STAFFREL_basic_below) { + above = m_beamStaff->GetAlignment(); + } + else { + above = m_crossStaffContent->GetAlignment(); + } + } +} + void BeamDrawingInterface::GetBeamChildOverflow(StaffAlignment *&above, StaffAlignment *&below) { if (m_beamStaff && m_crossStaffContent) { diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 44e852e8113..2b990f54fd2 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -305,49 +305,10 @@ void LayerElement::GetOverflowStaffAlignments(StaffAlignment *&above, StaffAlign } } // Beams in cross-staff situation need special treatment - else if (this->Is(BEAM)) { - this->GetBeamOverflow(above, below); - } - else if (this->Is(FTREM)) { - this->GetBeamOverflow(above, below); - } -} - -template void LayerElement::GetBeamOverflow(StaffAlignment *&above, StaffAlignment *&below) -{ - if (!this->Is({ BEAM, FTREM })) return; - - BeamType *beam = vrv_cast(this); - assert(beam); - // Beam between the staves - ignore both above and below - if (!beam->m_crossStaffContent || beam->m_crossStaff) return; - - data_STAFFREL_basic direction = beam->m_crossStaffRel; - if (beam->m_drawingPlace == BEAMPLACE_mixed) { - above = NULL; - below = NULL; - } - // Beam below - ignore above and find the appropriate below staff - else if (beam->m_drawingPlace == BEAMPLACE_below) { - above = NULL; - if (direction == STAFFREL_basic_above) { - below = beam->m_beamStaff->GetAlignment(); - } - else { - below = beam->m_crossStaffContent->GetAlignment(); - } - } - // Beam above - ignore below and find the appropriate above staff - else if (beam->m_drawingPlace == BEAMPLACE_above) { - below = NULL; - if (direction == STAFFREL_basic_below) { - above = beam->m_beamStaff->GetAlignment(); - } - else { - above = beam->m_crossStaffContent->GetAlignment(); - } - } -} + else if (this->Is({ BEAM, FTREM }) && !m_crossStaff) { + BeamDrawingInterface *interface = this->GetBeamDrawingInterface(); + assert(interface); + interface->GetBeamOverflow(above, below); } } From f6219986102824a4871ee7bc8d88ee309bdc0d34 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 17:53:51 +0100 Subject: [PATCH 299/403] Formatting --- include/vrv/drawinginterface.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/include/vrv/drawinginterface.h b/include/vrv/drawinginterface.h index 7693e5a7a9c..b591f65e725 100644 --- a/include/vrv/drawinginterface.h +++ b/include/vrv/drawinginterface.h @@ -141,12 +141,12 @@ class BeamDrawingInterface : public ObjectListInterface { * Helper to get number of beams represented by attributes @beam and @beam.float */ virtual std::pair GetFloatingBeamCount() const { return { 0, 0 }; } - + /** * Get above/below overflow */ void GetBeamOverflow(StaffAlignment *&above, StaffAlignment *&below); - + /** * Get above/below overflow for the children */ @@ -159,7 +159,6 @@ class BeamDrawingInterface : public ObjectListInterface { */ int GetPosition(Object *object, LayerElement *element); - // private: /** From f945c71c9c2e66fb696e111b0cf306f6f3d4476c Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 4 Feb 2022 17:56:02 +0100 Subject: [PATCH 300/403] Remove empty line --- src/drawinginterface.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index 12e4029ee34..e3e1108117c 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -503,7 +503,6 @@ int BeamDrawingInterface::GetPosition(Object *object, LayerElement *element) void BeamDrawingInterface::GetBeamOverflow(StaffAlignment *&above, StaffAlignment *&below) { - if (!m_beamStaff || !m_crossStaffContent) return; if (m_drawingPlace == BEAMPLACE_mixed) { From 654fb5fa74d6652bae2bd30f36a7b1e98cb4082c Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 7 Feb 2022 15:40:27 +0100 Subject: [PATCH 301/403] Update changelog [skip-ci] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 63f706f0510..17afede4864 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,9 @@ * Support for `@stem.sameas` on notes for orchestra scores * Support for MIDI output of arpeggios (@eNote-GmBH) * Support for tuplets in ABC importer (@eNote-GmBH) +* Improved double stemmed beams (@eNote-GmBH) * Improved tablature MIDI output (@paul-bayleaf) +* Improved PAE importer (nested beams, mensural dots, stemless notes) * Additional parameters to the redoLayout method for faster cached layout redoing * Additional parameters to the renderToTimemap method for including rests and measure * Additional ids for rests and measure added to the getElementsAtTime methods From da709db6f5fad4d40d179d942658501ff803a3a9 Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 7 Feb 2022 16:47:16 +0200 Subject: [PATCH 302/403] Fix regression for the fTrem stem length - cleaned up code a bit - fixed a problem with fTrems having zero stem length --- src/beam.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/beam.cpp b/src/beam.cpp index 140e6d585a8..60e7fc863cb 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1167,11 +1167,11 @@ void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool is : STEMDIRECTION_up; const int coordStemLength = coord->CalculateStemLength(staff, stemDir, isHorizontal); if (!coord->m_closestNote) continue; - // if location matches, or if current elements duration is shorter than 8th. This ensures that beams with - // partial beams will not be shorted when lowest/highest note is 8th and can be shortened - if ((coord->m_dur > minDuration) - && ((coord->m_closestNote->GetDrawingLoc() == relevantNoteLoc) - || (!isHorizontal && (std::abs(m_uniformStemLength) < 13)))) { + // skip current element if it's longer that minDuration and is not a part of fTrem + if ((coord->m_dur <= minDuration) && !(coord->m_element && coord->m_element->GetFirstAncestor(FTREM))) continue; + // if location matches or if current stem length is too short - adjust stem length + if ((coord->m_closestNote->GetDrawingLoc() == relevantNoteLoc) + || (!isHorizontal && (std::abs(m_uniformStemLength) < 13))) { m_uniformStemLength = coordStemLength; minDuration = coord->m_dur; } From 470935786e0a4289ab968ed03d50e393b9392d9c Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 7 Feb 2022 16:49:39 +0200 Subject: [PATCH 303/403] Calculate stemLength only when needed --- src/beam.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/beam.cpp b/src/beam.cpp index 60e7fc863cb..01ed1333f85 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1165,11 +1165,11 @@ void BeamSegment::CalcBeamStemLength(Staff *staff, data_BEAMPLACE place, bool is const data_STEMDIRECTION stemDir = (place != BEAMPLACE_mixed) ? globalStemDir : (coord->m_beamRelativePlace == BEAMPLACE_below) ? STEMDIRECTION_down : STEMDIRECTION_up; - const int coordStemLength = coord->CalculateStemLength(staff, stemDir, isHorizontal); if (!coord->m_closestNote) continue; // skip current element if it's longer that minDuration and is not a part of fTrem if ((coord->m_dur <= minDuration) && !(coord->m_element && coord->m_element->GetFirstAncestor(FTREM))) continue; - // if location matches or if current stem length is too short - adjust stem length + // if location matches or if current stem length is too short - adjust stem length + const int coordStemLength = coord->CalculateStemLength(staff, stemDir, isHorizontal); if ((coord->m_closestNote->GetDrawingLoc() == relevantNoteLoc) || (!isHorizontal && (std::abs(m_uniformStemLength) < 13))) { m_uniformStemLength = coordStemLength; From 99d40596b2b7987ec9f5d9f2205b5b0373440165 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 8 Feb 2022 12:15:44 +0200 Subject: [PATCH 304/403] Add several checks for the parsed line in ABC improter - added empty() and length() checks to the ParseABC() method to make sure there is no out-of-bounds indexing - changed usage of indexing operator[] to method .at() where applicable --- src/ioabc.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 327e5a94587..fdbcaa719a7 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -111,12 +111,14 @@ void ABCInput::ParseABC(std::istream &infile) while (!infile.eof()) { std::getline(infile, abcLine); ++m_lineNum; - if (abcLine[0] == 'X') { - this->readInformationField('X', &abcLine[2]); - while (abcLine[0] != 'K' && !infile.eof()) { + if (!abcLine.empty() && (abcLine.at(0) == 'X')) { + while (!infile.eof()) { + if (abcLine.length() >= 3) { + this->readInformationField(abcLine.at(0), &abcLine.at(2)); + if (abcLine.at(0) == 'K') break; + } std::getline(infile, abcLine); ++m_lineNum; - this->readInformationField(abcLine[0], &abcLine[2]); } if (infile.eof()) break; if (m_title.empty()) { @@ -127,6 +129,8 @@ void ABCInput::ParseABC(std::istream &infile) this->CreateWorkEntry(); this->InitScoreAndSection(score, section); + + continue; } else if (!m_mdiv || !score || !section) { // if m_div is not initialized - we didn't read X element, so continue until we do @@ -137,15 +141,15 @@ void ABCInput::ParseABC(std::istream &infile) this->FlushControlElements(score, section); continue; } - else if (abcLine[0] == '%') + else if (abcLine.at(0) == '%') // skipping comments and stylesheet directives continue; - else if (abcLine[1] == ':' && abcLine[0] != '|') { - if (abcLine[0] != 'K') { - this->readInformationField(abcLine[0], &abcLine[2]); + else if ((abcLine.length() >= 3) && (abcLine.at(1) == ':') && (abcLine.at(0) != '|')) { + if (abcLine.at(0) != 'K') { + this->readInformationField(abcLine.at(0), &abcLine.at(2)); } else { - LogWarning("ABC import: Key changes not supported", abcLine[0]); + LogWarning("ABC import: Key changes not supported"); } } else { @@ -153,7 +157,7 @@ void ABCInput::ParseABC(std::istream &infile) } } - if (!section->GetParent()) { + if (section && score && !section->GetParent()) { score->AddChild(section); } @@ -890,6 +894,7 @@ void ABCInput::FlushControlElements(Score *score, Section *section) LogWarning("ABC import: Element '%s' could not be assigned to layer '%s'", iter->second->GetClassName().c_str(), iter->first.c_str()); delete iter->second; + iter->second = NULL; continue; } measure = vrv_cast(layer->GetFirstAncestor(MEASURE)); From e46634af626b5130a913e863ae173ba9f030839b Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 8 Feb 2022 12:30:11 +0200 Subject: [PATCH 305/403] Remove redundant method --- include/vrv/vrv.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/include/vrv/vrv.h b/include/vrv/vrv.h index 19095dab146..5e508a54309 100644 --- a/include/vrv/vrv.h +++ b/include/vrv/vrv.h @@ -173,10 +173,6 @@ class Resources { private: static bool LoadFont(const std::string &fontName); - /** - * Returns ranges of the glyphs to be parsed - */ - static std::map GetGlyphRanges(); private: //----------------// From 5d575cab4752c8659977dec4cf131af0e4098a02 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 8 Feb 2022 12:33:31 +0200 Subject: [PATCH 306/403] Remove redundant include --- src/vrv.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/vrv.cpp b/src/vrv.cpp index ac08f47a969..55c164af14a 100644 --- a/src/vrv.cpp +++ b/src/vrv.cpp @@ -16,7 +16,6 @@ #include #include #include -#include #include #ifndef _WIN32 From 421957bc965ad06f581742f43000423df08bb7f5 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 8 Feb 2022 12:39:16 +0200 Subject: [PATCH 307/403] Formatting --- src/ioabc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ioabc.cpp b/src/ioabc.cpp index fdbcaa719a7..bce5f214328 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -141,7 +141,7 @@ void ABCInput::ParseABC(std::istream &infile) this->FlushControlElements(score, section); continue; } - else if (abcLine.at(0) == '%') + else if (abcLine.at(0) == '%') // skipping comments and stylesheet directives continue; else if ((abcLine.length() >= 3) && (abcLine.at(1) == ':') && (abcLine.at(0) != '|')) { From 60eef4162a236664449d3b76371f93c4dc5f2805 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 8 Feb 2022 14:51:03 +0200 Subject: [PATCH 308/403] Use substr() --- src/ioabc.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ioabc.cpp b/src/ioabc.cpp index bce5f214328..bbdd313fb10 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -114,7 +114,7 @@ void ABCInput::ParseABC(std::istream &infile) if (!abcLine.empty() && (abcLine.at(0) == 'X')) { while (!infile.eof()) { if (abcLine.length() >= 3) { - this->readInformationField(abcLine.at(0), &abcLine.at(2)); + this->readInformationField(abcLine.at(0), abcLine.substr(2)); if (abcLine.at(0) == 'K') break; } std::getline(infile, abcLine); @@ -146,7 +146,7 @@ void ABCInput::ParseABC(std::istream &infile) continue; else if ((abcLine.length() >= 3) && (abcLine.at(1) == ':') && (abcLine.at(0) != '|')) { if (abcLine.at(0) != 'K') { - this->readInformationField(abcLine.at(0), &abcLine.at(2)); + this->readInformationField(abcLine.at(0), abcLine.substr(2)); } else { LogWarning("ABC import: Key changes not supported"); From cc6722fbe84acc0c15a0f829cf7b5361cb96ea38 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 8 Feb 2022 15:00:26 +0200 Subject: [PATCH 309/403] Revert removal of check for SMUFL_COUNT --- src/vrv.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/vrv.cpp b/src/vrv.cpp index 55c164af14a..7de46456acd 100644 --- a/src/vrv.cpp +++ b/src/vrv.cpp @@ -85,6 +85,11 @@ bool Resources::InitFonts() if (!LoadFont("Bravura")) LogError("Bravura font could not be loaded."); // The Leipzig as the default font if (!LoadFont("Leipzig")) LogError("Leipzig font could not be loaded."); + + if (s_fontGlyphTable.size() < SMUFL_COUNT) { + LogError("Expected %d default SMuFL glyphs but could load only %d.", SMUFL_COUNT, s_fontGlyphTable.size()); + return false; + } struct TextFontInfo_type { const StyleAttributes m_style; From 2c5f6e1b622b95b36fa5ba2633abd2b919eeeec3 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 8 Feb 2022 15:08:45 +0200 Subject: [PATCH 310/403] Formatting --- src/vrv.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vrv.cpp b/src/vrv.cpp index 7de46456acd..9cdf187b800 100644 --- a/src/vrv.cpp +++ b/src/vrv.cpp @@ -85,7 +85,7 @@ bool Resources::InitFonts() if (!LoadFont("Bravura")) LogError("Bravura font could not be loaded."); // The Leipzig as the default font if (!LoadFont("Leipzig")) LogError("Leipzig font could not be loaded."); - + if (s_fontGlyphTable.size() < SMUFL_COUNT) { LogError("Expected %d default SMuFL glyphs but could load only %d.", SMUFL_COUNT, s_fontGlyphTable.size()); return false; From e78b49ce684953bd844e5e80f661e481af90aade Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 07:34:55 +0100 Subject: [PATCH 311/403] Add clef overflow members to StatfAlignment --- include/vrv/verticalaligner.h | 2 ++ src/verticalaligner.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/include/vrv/verticalaligner.h b/include/vrv/verticalaligner.h index 8f4481938b8..f51d2158206 100644 --- a/include/vrv/verticalaligner.h +++ b/include/vrv/verticalaligner.h @@ -380,6 +380,8 @@ class StaffAlignment : public Object { int m_staffHeight; BoundingBox *m_overflowBBoxAbove; BoundingBox *m_overflowBBoxBelow; + int m_scoreDefClefOverflowAbove; + int m_scoreDefClefOverflowBelow; ///@} // Value to store required beam adjustment for cross-staff beams diff --git a/src/verticalaligner.cpp b/src/verticalaligner.cpp index 776c9d962dd..59d8f8eb06c 100644 --- a/src/verticalaligner.cpp +++ b/src/verticalaligner.cpp @@ -258,6 +258,8 @@ StaffAlignment::StaffAlignment() : Object(STAFF_ALIGNMENT) m_overlap = 0; m_overflowBBoxAbove = NULL; m_overflowBBoxBelow = NULL; + m_scoreDefClefOverflowAbove = 0; + m_scoreDefClefOverflowBelow = 0; } StaffAlignment::~StaffAlignment() From 4c8d01400c5e25bd2e88774c5ee858ff98c2ba53 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 07:36:00 +0100 Subject: [PATCH 312/403] Set the clef overflow values in Object::SetOverflowBBoxes --- src/object.cpp | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/object.cpp b/src/object.cpp index 15876428792..3f0b17054d3 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -1892,10 +1892,8 @@ int Object::SetOverflowBBoxes(FunctorParams *functorParams) assert(currentLayer); // set scoreDef attr if (currentLayer->GetStaffDefClef()) { - // Ignore system scoreDef clefs - clefs changes withing a staff are still taken into account - if (currentLayer->GetStaffDefClef()->GetScoreDefRole() != SCOREDEF_SYSTEM) { - currentLayer->GetStaffDefClef()->SetOverflowBBoxes(params); - } + // System scoreDef clefs are taken into account but treated separately (see below) + currentLayer->GetStaffDefClef()->SetOverflowBBoxes(params); } if (currentLayer->GetStaffDefKeySig()) { currentLayer->GetStaffDefKeySig()->SetOverflowBBoxes(params); @@ -1944,14 +1942,26 @@ int Object::SetOverflowBBoxes(FunctorParams *functorParams) StaffAlignment *below = NULL; current->GetOverflowStaffAlignments(above, below); + bool isScoreDefClef = false; + // Exception for the scoreDef clef where we do not want to take into account the general overflow + // We have instead distinct members in StaffAlignment to store them + if (current->Is(CLEF) && current->GetScoreDefRole() == SCOREDEF_SYSTEM) { + isScoreDefClef = true; + } + if (above) { int overflowAbove = above->CalcOverflowAbove(current); int staffSize = above->GetStaffSize(); if (overflowAbove > params->m_doc->GetDrawingStaffLineWidth(staffSize) / 2) { // LogMessage("%s top overflow: %d", current->GetUuid().c_str(), overflowAbove); - above->SetOverflowBBoxAbove(current, overflowAbove); - above->SetOverflowAbove(overflowAbove); - above->AddBBoxAbove(current); + if (isScoreDefClef) { + above->SetScoreDefClefOverflowAbove(overflowAbove); + } + else { + above->SetOverflowBBoxAbove(current, overflowAbove); + above->SetOverflowAbove(overflowAbove); + above->AddBBoxAbove(current); + } } } @@ -1960,9 +1970,14 @@ int Object::SetOverflowBBoxes(FunctorParams *functorParams) int staffSize = below->GetStaffSize(); if (overflowBelow > params->m_doc->GetDrawingStaffLineWidth(staffSize) / 2) { // LogMessage("%s bottom overflow: %d", current->GetUuid().c_str(), overflowBelow); - below->SetOverflowBBoxBelow(current, overflowBelow); - below->SetOverflowBelow(overflowBelow); - below->AddBBoxBelow(current); + if (isScoreDefClef) { + below->SetScoreDefClefOverflowBelow(overflowBelow); + } + else { + below->SetOverflowBBoxBelow(current, overflowBelow); + below->SetOverflowBelow(overflowBelow); + below->AddBBoxBelow(current); + } } } From 49be6dc7e150dd824726f21746c4536a901a8a19 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 08:18:40 +0100 Subject: [PATCH 313/403] Add methods to set clef overflows --- include/vrv/verticalaligner.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/include/vrv/verticalaligner.h b/include/vrv/verticalaligner.h index f51d2158206..b5c1c69ac1c 100644 --- a/include/vrv/verticalaligner.h +++ b/include/vrv/verticalaligner.h @@ -90,8 +90,8 @@ class SystemAligner : public Object { /** * Get System Overflows */ - int GetOverflowAbove(const Doc *doc) const; - int GetOverflowBelow(const Doc *doc) const; + int GetOverflowAbove(const Doc *doc, bool scoreDefClef = false) const; + int GetOverflowBelow(const Doc *doc, bool scoreDefClef = false) const; /** * Get justification sum @@ -250,6 +250,10 @@ class StaffAlignment : public Object { BoundingBox *GetOverflowBBoxAbove() const { return m_overflowBBoxAbove; } void SetOverflowBBoxBelow(BoundingBox *bboxBelow, int overflowBottom); BoundingBox *GetOverflowBBoxBelow() const { return m_overflowBBoxBelow; } + void SetScoreDefClefOverflowAbove(int overflowAbove) { m_scoreDefClefOverflowAbove = overflowAbove; } + int GetScoreDefClefOverflowAbove() const { return m_scoreDefClefOverflowAbove; } + void SetScoreDefClefOverflowBelow(int overflowBelow) { m_scoreDefClefOverflowBelow = overflowBelow; } + int GetScoreDefClefOverflowBelow() const { return m_scoreDefClefOverflowBelow; } ///@} /** From 5d9396955d6936ba4e19e939db973cf2340072fc Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 08:19:56 +0100 Subject: [PATCH 314/403] Adjust the overlap calculation for taking into account clef, including for the bottom alignment --- src/verticalaligner.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/verticalaligner.cpp b/src/verticalaligner.cpp index 59d8f8eb06c..6cfe2e28991 100644 --- a/src/verticalaligner.cpp +++ b/src/verticalaligner.cpp @@ -982,14 +982,26 @@ int StaffAlignment::AdjustStaffOverlap(FunctorParams *functorParams) AdjustStaffOverlapParams *params = vrv_params_cast(functorParams); assert(params); - // This is the bottom alignment (or something is wrong) - if (!m_staff) return FUNCTOR_STOP; - + // This is the first alignment if (params->m_previous == NULL) { params->m_previous = this; return FUNCTOR_SIBLINGS; } + const int spacing = std::max(params->m_previous->m_overflowBelow, m_overflowAbove); + + // Calculate the overlap for scoreDef clefs + int overflowBelow = params->m_previous->GetScoreDefClefOverflowBelow(); + int overflowAbove = this->GetScoreDefClefOverflowAbove(); + if (spacing < (overflowBelow + overflowAbove)) { + this->SetOverlap((overflowBelow + overflowAbove) - spacing); + } + + // This is the bottom alignment (or something is wrong) - this is all we need to do + if (!m_staff) { + return FUNCTOR_STOP; + } + const int staffSize = this->GetStaffSize(); const int drawingUnit = params->m_doc->GetDrawingUnit(staffSize); @@ -1015,7 +1027,6 @@ int StaffAlignment::AdjustStaffOverlap(FunctorParams *functorParams) // calculate the vertical overlap and see if this is more than the expected space int overflowBelow = params->m_previous->CalcOverflowBelow(*iter); int overflowAbove = this->CalcOverflowAbove(*i); - int spacing = std::max(params->m_previous->m_overflowBelow, m_overflowAbove); if (spacing < (overflowBelow + overflowAbove)) { // LogDebug("Overlap %d", (overflowBelow + overflowAbove) - spacing); this->SetOverlap((overflowBelow + overflowAbove) - spacing); From fbd8b746d0d3b99a72e7456e6987c33f38fe3d67 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 09:08:23 +0100 Subject: [PATCH 315/403] Revert changes to GetOverflowAbove/Below --- include/vrv/verticalaligner.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/vrv/verticalaligner.h b/include/vrv/verticalaligner.h index b5c1c69ac1c..912c91c84d7 100644 --- a/include/vrv/verticalaligner.h +++ b/include/vrv/verticalaligner.h @@ -90,8 +90,8 @@ class SystemAligner : public Object { /** * Get System Overflows */ - int GetOverflowAbove(const Doc *doc, bool scoreDefClef = false) const; - int GetOverflowBelow(const Doc *doc, bool scoreDefClef = false) const; + int GetOverflowAbove(const Doc *doc) const; + int GetOverflowBelow(const Doc *doc) const; /** * Get justification sum From bcc42f3ce9963eb8bc217797a211d72f0dc9b219 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 09:29:34 +0100 Subject: [PATCH 316/403] Add option to control the first system spacing and adjust pgHead default bottom margin --- include/vrv/options.h | 1 + src/options.cpp | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/include/vrv/options.h b/include/vrv/options.h index b0f004a5d95..930dc8d0572 100644 --- a/include/vrv/options.h +++ b/include/vrv/options.h @@ -686,6 +686,7 @@ class Options { OptionDbl m_spacingNonLinear; OptionInt m_spacingStaff; OptionInt m_spacingSystem; + OptionInt m_spacingSystemFirst; OptionDbl m_staffLineWidth; OptionDbl m_stemWidth; OptionDbl m_subBracketThickness; diff --git a/src/options.cpp b/src/options.cpp index 12b8d16d2c7..a1bbfb417e3 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -1343,6 +1343,10 @@ Options::Options() m_spacingSystem.SetInfo("Spacing system", "The system minimal spacing in MEI units"); m_spacingSystem.Init(12, 0, 48); this->Register(&m_spacingSystem, "spacingSystem", &m_generalLayout); + + m_spacingSystemFirst.SetInfo("Spacing system first", "The first system minimal spacing in MEI units"); + m_spacingSystemFirst.Init(6, 0, 48); + this->Register(&m_spacingSystemFirst, "spacingSystemFirst", &m_generalLayout); m_staffLineWidth.SetInfo("Staff line width", "The staff line width in unit"); m_staffLineWidth.Init(0.15, 0.10, 0.30); @@ -1466,7 +1470,7 @@ Options::Options() this->Register(&m_bottomMarginHarm, "bottomMarginHarm", &m_elementMargins); m_bottomMarginPgHead.SetInfo("Bottom margin header", "The margin for header in MEI units"); - m_bottomMarginPgHead.Init(8.0, 0.0, 24.0); + m_bottomMarginPgHead.Init(2.0, 0.0, 24.0); this->Register(&m_bottomMarginPgHead, "bottomMarginHeader", &m_elementMargins); /// custom left From 8e4c6eab73ab64fc431dd0b8f817450617bb9797 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 09:30:13 +0100 Subject: [PATCH 317/403] Add member to functor for storing previous clef bottom overflow --- include/vrv/functorparams.h | 2 ++ src/system.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 5bdf7922a0a..8a9686c9d18 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -847,12 +847,14 @@ class AlignSystemsParams : public FunctorParams { m_shift = 0; m_systemMargin = 0; m_prevBottomOverflow = 0; + m_prevBottomClefOverflow = 0; m_justificationSum = 0.; m_doc = doc; } int m_shift; int m_systemMargin; int m_prevBottomOverflow; + int m_prevBottomClefOverflow; double m_justificationSum; Doc *m_doc; }; diff --git a/src/system.cpp b/src/system.cpp index 79f417b36b3..b69c463d119 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -773,6 +773,7 @@ int System::AlignSystems(FunctorParams *functorParams) } params->m_prevBottomOverflow = m_systemAligner.GetOverflowBelow(params->m_doc); + params->m_prevBottomClefOverflow = m_systemAligner.GetOverflowBelow(params->m_doc, true); return FUNCTOR_SIBLINGS; } From 7d48a12dd93dcc46cab1770803948d6c39fa1b41 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 09:30:58 +0100 Subject: [PATCH 318/403] Adjust method for getting system overflows (WIP) --- include/vrv/verticalaligner.h | 4 ++-- src/verticalaligner.cpp | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/include/vrv/verticalaligner.h b/include/vrv/verticalaligner.h index 912c91c84d7..b5c1c69ac1c 100644 --- a/include/vrv/verticalaligner.h +++ b/include/vrv/verticalaligner.h @@ -90,8 +90,8 @@ class SystemAligner : public Object { /** * Get System Overflows */ - int GetOverflowAbove(const Doc *doc) const; - int GetOverflowBelow(const Doc *doc) const; + int GetOverflowAbove(const Doc *doc, bool scoreDefClef = false) const; + int GetOverflowBelow(const Doc *doc, bool scoreDefClef = false) const; /** * Get justification sum diff --git a/src/verticalaligner.cpp b/src/verticalaligner.cpp index 6cfe2e28991..b3d9b6c4809 100644 --- a/src/verticalaligner.cpp +++ b/src/verticalaligner.cpp @@ -132,22 +132,26 @@ void SystemAligner::FindAllIntersectionPoints( } } -int SystemAligner::GetOverflowAbove(const Doc *) const +int SystemAligner::GetOverflowAbove(const Doc *, bool scoreDefClef) const { if (!this->GetChildCount() || this->GetChild(0) == m_bottomAlignment) return 0; StaffAlignment *alignment = vrv_cast(this->GetChild(0)); assert(alignment); return alignment->GetOverflowAbove(); + int overflowAbove = scoreDefClef ? alignment->GetScoreDefClefOverflowAbove() : alignment->GetOverflowAbove(); + return overflowAbove; } -int SystemAligner::GetOverflowBelow(const Doc *doc) const +int SystemAligner::GetOverflowBelow(const Doc *doc, bool scoreDefClef) const { if (!this->GetChildCount() || this->GetChild(0) == m_bottomAlignment) return 0; StaffAlignment *alignment = vrv_cast(this->GetChild(this->GetChildCount() - 2)); assert(alignment); return alignment->GetOverflowBelow() + doc->GetBottomMargin(STAFF) * doc->GetDrawingUnit(alignment->GetStaffSize()); + int overflowBelow = scoreDefClef ? alignment->GetScoreDefClefOverflowBelow() : alignment->GetOverflowBelow(); + return overflowBelow; } double SystemAligner::GetJustificationSum(const Doc *doc) const From 646cd627a07659420bf0b7ae1f84e81f6ebcf200 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 09:31:54 +0100 Subject: [PATCH 319/403] Do not add pgHead bottom margin if pgHead is empty --- src/page.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/page.cpp b/src/page.cpp index 33387732e7b..a15e8a911c7 100644 --- a/src/page.cpp +++ b/src/page.cpp @@ -841,11 +841,13 @@ int Page::AlignSystems(FunctorParams *functorParams) RunningElement *header = this->GetHeader(); if (header) { - const int bottomMarginPgHead - = params->m_doc->GetOptions()->m_bottomMarginPgHead.GetValue() * params->m_doc->GetDrawingUnit(100); - header->SetDrawingYRel(params->m_shift); - params->m_shift -= header->GetTotalHeight() + bottomMarginPgHead; + const int headerHeight = header->GetTotalHeight(); + if (headerHeight > 0) { + const int bottomMarginPgHead + = params->m_doc->GetOptions()->m_bottomMarginPgHead.GetValue() * params->m_doc->GetDrawingUnit(100); + params->m_shift -= header->GetTotalHeight() + bottomMarginPgHead; + } } return FUNCTOR_CONTINUE; } From 0130ae712ab387410ca96191b79de843ff331bf2 Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 3 Feb 2022 17:23:35 +0200 Subject: [PATCH 320/403] Add support of w: element in ABC format - added code to parse lyrics --- include/vrv/ioabc.h | 4 +++ src/ioabc.cpp | 73 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/include/vrv/ioabc.h b/include/vrv/ioabc.h index 8bf6076099c..4e830c11bba 100644 --- a/include/vrv/ioabc.h +++ b/include/vrv/ioabc.h @@ -73,6 +73,7 @@ class ABCInput : public Input { void parseMeter(const std::string &meterString); // M: void parseTempo(const std::string &tempoString); // Q: void parseReferenceNumber(const std::string &referenceNumberString); // X: + void parseLyrics(); // w: // input functions void readInformationField(const char &dataKey, std::string dataValue); @@ -145,6 +146,9 @@ class ABCInput : public Input { std::vector m_layerElements; std::vector m_noteStack; + // Array of added notes in one line of ABC file. Used to track elements that might require adding verse to + std::vector m_lineNoteArray; + int m_verseNumber = 1; /* * ABC decoration stacks */ diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 49dc2806cd1..27ded3849a3 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -47,12 +47,14 @@ #include "staff.h" #include "staffdef.h" #include "staffgrp.h" +#include "syl.h" #include "tempo.h" #include "text.h" #include "tie.h" #include "trill.h" #include "tuplet.h" #include "turn.h" +#include "verse.h" #include "vrv.h" //---------------------------------------------------------------------------- @@ -154,6 +156,8 @@ void ABCInput::ParseABC(std::istream &infile) } } else { + m_verseNumber = 1; + m_lineNoteArray.clear(); this->readMusicCode(abcLine, section); } } @@ -1021,6 +1025,64 @@ void ABCInput::InitScoreAndSection(Score *&score, Section *§ion) m_layer->SetN(1); } +void ABCInput::parseLyrics() +{ + std::vector> syllables; + constexpr std::string_view delimeters = "-_ "; + // skipping w:, so start from third element + std::size_t start = 2; + std::size_t found = abcLine.find_first_of(delimeters, 2); + while (found != std::string::npos) { + // Counter indicates for how many notes verse should be held. This defaults to 1, unless '_' is found + int counter = 1; + std::string syl = ""; + if (abcLine.at(found) == '_') { + while ((found < abcLine.size()) && (abcLine[found] == '_')) { + ++counter; + ++found; + } + } + // separate syllable from delimeters to form syl that we want to add + syl = abcLine.substr(start, found - start); + syl.erase(std::remove_if(syl.begin(), syl.end(), [](unsigned char x) { return x == '_'; }), syl.end()); + std::replace(syl.begin(), syl.end(), '~', ' '); + syllables.push_back({ syl, counter }); + + // find next delimeter in the string + start = found + 1; + found = abcLine.find_first_of(delimeters, start); + // if none found, the rest of the string is going to server as last syl + if ((found == std::string::npos) && (start < abcLine.size())) { + std::string syl = abcLine.substr(start); + std::replace(syl.begin(), syl.end(), '~', ' '); + syllables.push_back({ syl, 1 }); + } + } + + // Iterate over notes and syllables simultaneously. Move through note array using counters for each syllable, moving + // for several notes if syllable needs to be held + for (int i = 0, j = 0; (i < m_lineNoteArray.size()) && (j < syllables.size()); ++j) { + if (m_lineNoteArray.at(i)->IsGraceNote()) { + ++i; + continue; + } + Text *sylText = new Text(); + sylText->SetText(UTF8to16(syllables.at(j).first)); + Syl *syl = new Syl(); + syl->AddChild(sylText); + Verse *verse = new Verse(); + verse->SetN(m_verseNumber); + verse->AddChild(syl); + m_lineNoteArray.at(i)->AddChild(verse); + if (syllables.at(j).second > 1) { + syl->SetCon(sylLog_CON_u); + } + i += syllables.at(j).second; + } + // increment verse number, in case next line in file is also w: + ++m_verseNumber; +} + ////////////////////////////// // // readInformationField -- @@ -1063,6 +1125,7 @@ void ABCInput::readInformationField(const char &dataKey, std::string value) case 'T': m_title.push_back(std::make_pair(value, m_lineNum)); break; case 'U': LogWarning("ABC import: User defined sympols are not supported"); break; case 'V': LogWarning("ABC import: Multi-voice music is not supported"); break; + case 'w': parseLyrics(); break; case 'W': LogWarning("ABC import: Lyrics are not supported yet"); break; case 'X': parseReferenceNumber(value); break; case 'Z': m_info.push_back(std::make_pair(std::make_pair(value, m_lineNum), dataKey)); break; @@ -1199,9 +1262,12 @@ void ABCInput::readMusicCode(const std::string &musicCode, Section *section) // if chord cannot be beamed, write it directly to the layer if (m_noteStack.size() > 0) AddLayerElement(); m_layer->AddChild(chord); + m_lineNoteArray.push_back(chord); } - else + else { m_noteStack.push_back(chord); + m_lineNoteArray.push_back(chord); + } chord = NULL; } @@ -1378,9 +1444,12 @@ void ABCInput::readMusicCode(const std::string &musicCode, Section *section) // if note cannot be beamed, write it directly to the layer if (m_noteStack.size() > 0) AddLayerElement(); m_layer->AddChild(note); + m_lineNoteArray.push_back(note); } - else + else { m_noteStack.push_back(note); + m_lineNoteArray.push_back(note); + } } if (!m_tieStack.empty()) { From d28990cf77eb07641de19332155bc7dad95539b1 Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 3 Feb 2022 17:44:30 +0200 Subject: [PATCH 321/403] Fix for the some of the syllables being cut off 52aa6a44c --- src/ioabc.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 27ded3849a3..93679a89349 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -1041,12 +1041,15 @@ void ABCInput::parseLyrics() ++counter; ++found; } + --found; } // separate syllable from delimeters to form syl that we want to add syl = abcLine.substr(start, found - start); syl.erase(std::remove_if(syl.begin(), syl.end(), [](unsigned char x) { return x == '_'; }), syl.end()); std::replace(syl.begin(), syl.end(), '~', ' '); - syllables.push_back({ syl, counter }); + if (!syl.empty()) { + syllables.push_back({ syl, counter }); + } // find next delimeter in the string start = found + 1; @@ -1062,10 +1065,10 @@ void ABCInput::parseLyrics() // Iterate over notes and syllables simultaneously. Move through note array using counters for each syllable, moving // for several notes if syllable needs to be held for (int i = 0, j = 0; (i < m_lineNoteArray.size()) && (j < syllables.size()); ++j) { - if (m_lineNoteArray.at(i)->IsGraceNote()) { + while (m_lineNoteArray.at(i)->IsGraceNote() && (i < m_lineNoteArray.size())) { ++i; - continue; } + if (i >= m_lineNoteArray.size()) break; Text *sylText = new Text(); sylText->SetText(UTF8to16(syllables.at(j).first)); Syl *syl = new Syl(); From edc8848b27875ac5671d64b1e0f8bf9298acf05b Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 7 Feb 2022 10:41:41 +0200 Subject: [PATCH 322/403] Improve parsing of syllables --- src/ioabc.cpp | 72 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 23 deletions(-) diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 93679a89349..09517884cc5 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -1027,27 +1027,52 @@ void ABCInput::InitScoreAndSection(Score *&score, Section *§ion) void ABCInput::parseLyrics() { - std::vector> syllables; - constexpr std::string_view delimeters = "-_ "; - // skipping w:, so start from third element + std::vector> syllables; + constexpr std::string_view delimeters = "~\\-_ "; + // skipping w:, so start from third element std::size_t start = 2; std::size_t found = abcLine.find_first_of(delimeters, 2); while (found != std::string::npos) { // Counter indicates for how many notes verse should be held. This defaults to 1, unless '_' is found int counter = 1; - std::string syl = ""; + std::string syllable = ""; + sylLog_CON sylType = sylLog_CON_NONE; if (abcLine.at(found) == '_') { - while ((found < abcLine.size()) && (abcLine[found] == '_')) { + while ((found < abcLine.size()) && (abcLine.at(found) == '_')) { ++counter; ++found; } --found; + sylType = sylLog_CON_u; + } + else if (abcLine.at(found) == '~') { + counter = 0; + sylType = sylLog_CON_s; + } + else if (abcLine.at(found) == '-') { + sylType = sylLog_CON_b; + } + else if (abcLine.at(found) == '\\') { + if ((found + 1 < abcLine.size()) && (abcLine.at(found + 1) == '-')) { + counter = 0; + ++found; + sylType = sylLog_CON_b; + } } // separate syllable from delimeters to form syl that we want to add - syl = abcLine.substr(start, found - start); - syl.erase(std::remove_if(syl.begin(), syl.end(), [](unsigned char x) { return x == '_'; }), syl.end()); - std::replace(syl.begin(), syl.end(), '~', ' '); - if (!syl.empty()) { + syllable = abcLine.substr(start, found - start); + syllable.erase( + std::remove_if(syllable.begin(), syllable.end(), [](unsigned char x) { return (x == '_') || (x == '\\'); }), + syllable.end()); + if (!syllable.empty()) { + Text *sylText = new Text(); + sylText->SetText(UTF8to16(syllable)); + Syl *syl = new Syl(); + syl->AddChild(sylText); + syl->SetCon(sylType); + if (sylType == sylLog_CON_b) { + syl->SetWordpos(sylLog_WORDPOS_m); + } syllables.push_back({ syl, counter }); } @@ -1056,9 +1081,13 @@ void ABCInput::parseLyrics() found = abcLine.find_first_of(delimeters, start); // if none found, the rest of the string is going to server as last syl if ((found == std::string::npos) && (start < abcLine.size())) { - std::string syl = abcLine.substr(start); - std::replace(syl.begin(), syl.end(), '~', ' '); - syllables.push_back({ syl, 1 }); + std::string syllable = abcLine.substr(start); + Text *sylText = new Text(); + sylText->SetText(UTF8to16(syllable)); + Syl *syl = new Syl(); + syl->AddChild(sylText); + syl->SetCon(sylType); + syllables.push_back({ syl, counter }); } } @@ -1069,17 +1098,14 @@ void ABCInput::parseLyrics() ++i; } if (i >= m_lineNoteArray.size()) break; - Text *sylText = new Text(); - sylText->SetText(UTF8to16(syllables.at(j).first)); - Syl *syl = new Syl(); - syl->AddChild(sylText); - Verse *verse = new Verse(); - verse->SetN(m_verseNumber); - verse->AddChild(syl); - m_lineNoteArray.at(i)->AddChild(verse); - if (syllables.at(j).second > 1) { - syl->SetCon(sylLog_CON_u); - } + Verse *verse = NULL; + verse = vrv_cast(m_lineNoteArray.at(i)->GetChild(0, VERSE)); + if (!verse) { + verse = new Verse(); + verse->SetN(m_verseNumber); + m_lineNoteArray.at(i)->AddChild(verse); + } + verse->AddChild(syllables.at(j).first); i += syllables.at(j).second; } // increment verse number, in case next line in file is also w: From 700b16a7d99bca782dfd5867cc8c925c56684748 Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 7 Feb 2022 17:54:30 +0200 Subject: [PATCH 323/403] Use correct syl.log@con attribute for hyphens --- src/ioabc.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 09517884cc5..cdd9d196568 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -1050,13 +1050,13 @@ void ABCInput::parseLyrics() sylType = sylLog_CON_s; } else if (abcLine.at(found) == '-') { - sylType = sylLog_CON_b; + sylType = sylLog_CON_d; } else if (abcLine.at(found) == '\\') { if ((found + 1 < abcLine.size()) && (abcLine.at(found + 1) == '-')) { counter = 0; ++found; - sylType = sylLog_CON_b; + sylType = sylLog_CON_d; } } // separate syllable from delimeters to form syl that we want to add @@ -1070,7 +1070,7 @@ void ABCInput::parseLyrics() Syl *syl = new Syl(); syl->AddChild(sylText); syl->SetCon(sylType); - if (sylType == sylLog_CON_b) { + if (sylType == sylLog_CON_d) { syl->SetWordpos(sylLog_WORDPOS_m); } syllables.push_back({ syl, counter }); @@ -1082,6 +1082,7 @@ void ABCInput::parseLyrics() // if none found, the rest of the string is going to server as last syl if ((found == std::string::npos) && (start < abcLine.size())) { std::string syllable = abcLine.substr(start); + if (!syllable.empty() && syllable[syllable.size() - 1] == '\r') syllable.erase(syllable.size() - 1); Text *sylText = new Text(); sylText->SetText(UTF8to16(syllable)); Syl *syl = new Syl(); @@ -1093,7 +1094,7 @@ void ABCInput::parseLyrics() // Iterate over notes and syllables simultaneously. Move through note array using counters for each syllable, moving // for several notes if syllable needs to be held - for (int i = 0, j = 0; (i < m_lineNoteArray.size()) && (j < syllables.size()); ++j) { + for (size_t i = 0, j = 0; (i < m_lineNoteArray.size()) && (j < syllables.size()); ++j) { while (m_lineNoteArray.at(i)->IsGraceNote() && (i < m_lineNoteArray.size())) { ++i; } From 05958a321093ccfa8009a1d273b2be4776043908 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 12:52:27 +0100 Subject: [PATCH 324/403] Pass spacingSystemFirst option to functor (default changed to 0 for now) --- include/vrv/functorparams.h | 2 ++ src/options.cpp | 2 +- src/page.cpp | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 8a9686c9d18..a95bfa70b17 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -846,6 +846,7 @@ class AlignSystemsParams : public FunctorParams { { m_shift = 0; m_systemMargin = 0; + m_systemFirstMargin = 0; m_prevBottomOverflow = 0; m_prevBottomClefOverflow = 0; m_justificationSum = 0.; @@ -853,6 +854,7 @@ class AlignSystemsParams : public FunctorParams { } int m_shift; int m_systemMargin; + int m_systemFirstMargin; int m_prevBottomOverflow; int m_prevBottomClefOverflow; double m_justificationSum; diff --git a/src/options.cpp b/src/options.cpp index a1bbfb417e3..9ec3956ca09 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -1345,7 +1345,7 @@ Options::Options() this->Register(&m_spacingSystem, "spacingSystem", &m_generalLayout); m_spacingSystemFirst.SetInfo("Spacing system first", "The first system minimal spacing in MEI units"); - m_spacingSystemFirst.Init(6, 0, 48); + m_spacingSystemFirst.Init(0, 0, 48); this->Register(&m_spacingSystemFirst, "spacingSystemFirst", &m_generalLayout); m_staffLineWidth.SetInfo("Staff line width", "The staff line width in unit"); diff --git a/src/page.cpp b/src/page.cpp index a15e8a911c7..8b74af84bcf 100644 --- a/src/page.cpp +++ b/src/page.cpp @@ -551,6 +551,7 @@ void Page::LayOutVertically() AlignSystemsParams alignSystemsParams(doc); alignSystemsParams.m_shift = doc->m_drawingPageContentHeight; alignSystemsParams.m_systemMargin = (doc->GetOptions()->m_spacingSystem.GetValue()) * doc->GetDrawingUnit(100); + alignSystemsParams.m_systemFirstMargin = (doc->GetOptions()->m_spacingSystemFirst.GetValue()) * doc->GetDrawingUnit(100); Functor alignSystems(&Object::AlignSystems); Functor alignSystemsEnd(&Object::AlignSystemsEnd); this->Process(&alignSystems, &alignSystemsParams, &alignSystemsEnd); From 59265abbc41d3ad36b383a0772ecb84150be33a3 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 12:53:00 +0100 Subject: [PATCH 325/403] Enable implementation of clef parameter for overflow getters --- src/verticalaligner.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/verticalaligner.cpp b/src/verticalaligner.cpp index b3d9b6c4809..954f326046a 100644 --- a/src/verticalaligner.cpp +++ b/src/verticalaligner.cpp @@ -138,7 +138,6 @@ int SystemAligner::GetOverflowAbove(const Doc *, bool scoreDefClef) const StaffAlignment *alignment = vrv_cast(this->GetChild(0)); assert(alignment); - return alignment->GetOverflowAbove(); int overflowAbove = scoreDefClef ? alignment->GetScoreDefClefOverflowAbove() : alignment->GetOverflowAbove(); return overflowAbove; } @@ -149,7 +148,6 @@ int SystemAligner::GetOverflowBelow(const Doc *doc, bool scoreDefClef) const StaffAlignment *alignment = vrv_cast(this->GetChild(this->GetChildCount() - 2)); assert(alignment); - return alignment->GetOverflowBelow() + doc->GetBottomMargin(STAFF) * doc->GetDrawingUnit(alignment->GetStaffSize()); int overflowBelow = scoreDefClef ? alignment->GetScoreDefClefOverflowBelow() : alignment->GetOverflowBelow(); return overflowBelow; } From e5d7b378b83bc195a901b85742ee70ef45a29356 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 12:53:33 +0100 Subject: [PATCH 326/403] Take into account clef overflows in system spacing --- src/system.cpp | 9 ++++++--- src/verticalaligner.cpp | 3 ++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/system.cpp b/src/system.cpp index b69c463d119..41e801d3de3 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -753,13 +753,16 @@ int System::AlignSystems(FunctorParams *functorParams) assert(params); assert(m_systemAligner.GetBottomAlignment()); - int systemMargin = this->IsFirstInPage() ? 0 : params->m_systemMargin; + int systemMargin = this->IsFirstInPage() ? params->m_systemFirstMargin : params->m_systemMargin; if (systemMargin) { + const int contentOverflow = params->m_prevBottomOverflow + m_systemAligner.GetOverflowAbove(params->m_doc); + const int clefOverflow = params->m_prevBottomClefOverflow + m_systemAligner.GetOverflowAbove(params->m_doc, true); const int margin - = systemMargin - (params->m_prevBottomOverflow + m_systemAligner.GetOverflowAbove(params->m_doc)); + = systemMargin - std::max(contentOverflow, clefOverflow); // Ensure minimal white space between consecutive systems by adding one staff space const int unit = params->m_doc->GetDrawingUnit(100); - params->m_shift -= std::max(margin, 2 * unit); + if (margin > 0) params->m_shift -= margin; + //params->m_shift -= std::max(margin, 2 * unit); } this->SetDrawingYRel(params->m_shift); diff --git a/src/verticalaligner.cpp b/src/verticalaligner.cpp index 954f326046a..2315f6ea659 100644 --- a/src/verticalaligner.cpp +++ b/src/verticalaligner.cpp @@ -493,7 +493,8 @@ int StaffAlignment::CalcMinimumRequiredSpacing(const Doc *doc) const StaffAlignment *prevAlignment = dynamic_cast(parent->GetPrevious(this)); if (!prevAlignment) { - return this->GetOverflowAbove() + this->GetOverlap(); + const int maxOverflow = std::max(this->GetOverflowAbove(), this->GetScoreDefClefOverflowAbove()); + return maxOverflow + this->GetOverlap(); } int overflowSum = 0; From 34eed8ae3111dda147774f34eec375db8cfaae71 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 12:59:07 +0100 Subject: [PATCH 327/403] Formatting and commenting --- src/options.cpp | 2 +- src/page.cpp | 3 ++- src/system.cpp | 14 +++++++------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/options.cpp b/src/options.cpp index 9ec3956ca09..964784c0f46 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -1343,7 +1343,7 @@ Options::Options() m_spacingSystem.SetInfo("Spacing system", "The system minimal spacing in MEI units"); m_spacingSystem.Init(12, 0, 48); this->Register(&m_spacingSystem, "spacingSystem", &m_generalLayout); - + m_spacingSystemFirst.SetInfo("Spacing system first", "The first system minimal spacing in MEI units"); m_spacingSystemFirst.Init(0, 0, 48); this->Register(&m_spacingSystemFirst, "spacingSystemFirst", &m_generalLayout); diff --git a/src/page.cpp b/src/page.cpp index 8b74af84bcf..5fdb3282db9 100644 --- a/src/page.cpp +++ b/src/page.cpp @@ -551,7 +551,8 @@ void Page::LayOutVertically() AlignSystemsParams alignSystemsParams(doc); alignSystemsParams.m_shift = doc->m_drawingPageContentHeight; alignSystemsParams.m_systemMargin = (doc->GetOptions()->m_spacingSystem.GetValue()) * doc->GetDrawingUnit(100); - alignSystemsParams.m_systemFirstMargin = (doc->GetOptions()->m_spacingSystemFirst.GetValue()) * doc->GetDrawingUnit(100); + alignSystemsParams.m_systemFirstMargin + = (doc->GetOptions()->m_spacingSystemFirst.GetValue()) * doc->GetDrawingUnit(100); Functor alignSystems(&Object::AlignSystems); Functor alignSystemsEnd(&Object::AlignSystemsEnd); this->Process(&alignSystems, &alignSystemsParams, &alignSystemsEnd); diff --git a/src/system.cpp b/src/system.cpp index 41e801d3de3..f4f8c0479b3 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -756,13 +756,13 @@ int System::AlignSystems(FunctorParams *functorParams) int systemMargin = this->IsFirstInPage() ? params->m_systemFirstMargin : params->m_systemMargin; if (systemMargin) { const int contentOverflow = params->m_prevBottomOverflow + m_systemAligner.GetOverflowAbove(params->m_doc); - const int clefOverflow = params->m_prevBottomClefOverflow + m_systemAligner.GetOverflowAbove(params->m_doc, true); - const int margin - = systemMargin - std::max(contentOverflow, clefOverflow); - // Ensure minimal white space between consecutive systems by adding one staff space - const int unit = params->m_doc->GetDrawingUnit(100); - if (margin > 0) params->m_shift -= margin; - //params->m_shift -= std::max(margin, 2 * unit); + const int clefOverflow + = params->m_prevBottomClefOverflow + m_systemAligner.GetOverflowAbove(params->m_doc, true); + // Alignment is already pre-determined with staff alignment overflow + // We need to subtract them from the desired margin + const int actualMargin = systemMargin - std::max(contentOverflow, clefOverflow); + // Set the margin if it exsits (greater than 0) + if (actualMargin > 0) params->m_shift -= actualMargin; } this->SetDrawingYRel(params->m_shift); From 100079f609101f173e5b4835a05285d74ac624e6 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 21:31:06 +0100 Subject: [PATCH 328/403] Remove spacingSystemFirst option (never used) and add topMarginPgFooter --- include/vrv/options.h | 2 +- src/options.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/vrv/options.h b/include/vrv/options.h index 930dc8d0572..61dcdf1cc7b 100644 --- a/include/vrv/options.h +++ b/include/vrv/options.h @@ -686,7 +686,6 @@ class Options { OptionDbl m_spacingNonLinear; OptionInt m_spacingStaff; OptionInt m_spacingSystem; - OptionInt m_spacingSystemFirst; OptionDbl m_staffLineWidth; OptionDbl m_stemWidth; OptionDbl m_subBracketThickness; @@ -765,6 +764,7 @@ class Options { // OptionDbl m_topMarginArtic; OptionDbl m_topMarginHarm; + OptionDbl m_topMarginPgFooter; /** * Deprecated options diff --git a/src/options.cpp b/src/options.cpp index 964784c0f46..65691da05a9 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -1344,10 +1344,6 @@ Options::Options() m_spacingSystem.Init(12, 0, 48); this->Register(&m_spacingSystem, "spacingSystem", &m_generalLayout); - m_spacingSystemFirst.SetInfo("Spacing system first", "The first system minimal spacing in MEI units"); - m_spacingSystemFirst.Init(0, 0, 48); - this->Register(&m_spacingSystemFirst, "spacingSystemFirst", &m_generalLayout); - m_staffLineWidth.SetInfo("Staff line width", "The staff line width in unit"); m_staffLineWidth.Init(0.15, 0.10, 0.30); this->Register(&m_staffLineWidth, "staffLineWidth", &m_generalLayout); @@ -1623,6 +1619,10 @@ Options::Options() m_topMarginHarm.Init(1.0, 0.0, 10.0); this->Register(&m_topMarginHarm, "topMarginHarm", &m_elementMargins); + m_topMarginPgFooter.SetInfo("Top margin footer", "The margin for footer in MEI units"); + m_topMarginPgFooter.Init(2.0, 0.0, 24.0); + this->Register(&m_topMarginPgFooter, "topMarginPgFooter", &m_elementMargins); + /********* Deprecated options *********/ /* From 0eb25814f27103f0b605c21b2ea5bcb379bb09d0 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 21:32:49 +0100 Subject: [PATCH 329/403] Include margin in value returned by RunningElement::GetTotalHeight * now virtual and with a doc parameter * overridden version add the appropriate margin --- include/vrv/pgfoot.h | 5 +++++ include/vrv/pgfoot2.h | 5 +++++ include/vrv/pghead.h | 5 +++++ include/vrv/pghead2.h | 5 +++++ include/vrv/runningelement.h | 5 ++++- src/pgfoot.cpp | 13 +++++++++++++ src/pghead.cpp | 13 +++++++++++++ src/pghead2.cpp | 14 ++++++++++++++ src/runningelement.cpp | 2 +- 9 files changed, 65 insertions(+), 2 deletions(-) diff --git a/include/vrv/pgfoot.h b/include/vrv/pgfoot.h index 960a6f32f24..3ed92368664 100644 --- a/include/vrv/pgfoot.h +++ b/include/vrv/pgfoot.h @@ -32,6 +32,11 @@ class PgFoot : public RunningElement { std::string GetClassName() const override { return "PgFoot"; } ///@} + /** + * Overriden to get the appropriate margin + */ + int GetTotalHeight(Doc *doc) override; + //----------// // Functors // //----------// diff --git a/include/vrv/pgfoot2.h b/include/vrv/pgfoot2.h index 3b833f833cc..aa5b7527994 100644 --- a/include/vrv/pgfoot2.h +++ b/include/vrv/pgfoot2.h @@ -32,6 +32,11 @@ class PgFoot2 : public RunningElement { std::string GetClassName() const override { return "PgFoot2"; } ///@} + /** + * Overriden to get the appropriate margin + */ + int GetTotalHeight(Doc *doc) override; + //----------// // Functors // //----------// diff --git a/include/vrv/pghead.h b/include/vrv/pghead.h index 51077d42410..095645499ec 100644 --- a/include/vrv/pghead.h +++ b/include/vrv/pghead.h @@ -32,6 +32,11 @@ class PgHead : public RunningElement { std::string GetClassName() const override { return "PgHead"; } ///@} + /** + * Overriden to get the appropriate margin + */ + int GetTotalHeight(Doc *doc) override; + bool GenerateFromMEIHeader(pugi::xml_document &header); //----------// diff --git a/include/vrv/pghead2.h b/include/vrv/pghead2.h index 713b8d0e78c..e19d6350801 100644 --- a/include/vrv/pghead2.h +++ b/include/vrv/pghead2.h @@ -32,6 +32,11 @@ class PgHead2 : public RunningElement { std::string GetClassName() const override { return "PgHead2"; } ///@} + /** + * Overriden to get the appropriate margin + */ + int GetTotalHeight(Doc *doc) override; + //----------// // Functors // //----------// diff --git a/include/vrv/runningelement.h b/include/vrv/runningelement.h index 2792b81c6b2..030a47e47c6 100644 --- a/include/vrv/runningelement.h +++ b/include/vrv/runningelement.h @@ -90,7 +90,10 @@ class RunningElement : public Object, public ObjectListInterface, public AttHori * @name Get the size of row, cols or cells */ ///@{ - int GetTotalHeight(); + /** Height including margins */ + virtual int GetTotalHeight(Doc *doc) = 0; + /** Content height */ + int GetContentHeight(); /** Row from 0 to 2 */ int GetRowHeight(int row); /** Col from 0 to 2 */ diff --git a/src/pgfoot.cpp b/src/pgfoot.cpp index ed3fb089e99..ff495d86bfc 100644 --- a/src/pgfoot.cpp +++ b/src/pgfoot.cpp @@ -13,6 +13,7 @@ //---------------------------------------------------------------------------- +#include "doc.h" #include "vrv.h" namespace vrv { @@ -35,6 +36,18 @@ void PgFoot::Reset() RunningElement::Reset(); } +int PgFoot::GetTotalHeight(Doc *doc) +{ + assert(doc); + + int height = this->GetContentHeight(); + if (height > 0) { + const int unit = doc->GetDrawingUnit(100); + height += doc->GetOptions()->m_topMarginPgFooter.GetValue() * unit; + } + return height; +} + //---------------------------------------------------------------------------- // Functor methods //---------------------------------------------------------------------------- diff --git a/src/pghead.cpp b/src/pghead.cpp index 89560d16bf6..0deae850041 100644 --- a/src/pghead.cpp +++ b/src/pghead.cpp @@ -13,6 +13,7 @@ //---------------------------------------------------------------------------- +#include "doc.h" #include "lb.h" #include "rend.h" #include "text.h" @@ -38,6 +39,18 @@ void PgHead::Reset() RunningElement::Reset(); } +int PgHead::GetTotalHeight(Doc *doc) +{ + assert(doc); + + int height = this->GetContentHeight(); + if (height > 0) { + const int unit = doc->GetDrawingUnit(100); + height += doc->GetOptions()->m_bottomMarginPgHead.GetValue() * unit; + } + return height; +} + bool PgHead::GenerateFromMEIHeader(pugi::xml_document &header) { pugi::xpath_node node; diff --git a/src/pghead2.cpp b/src/pghead2.cpp index 5e06e3fadcc..c2ddac49835 100644 --- a/src/pghead2.cpp +++ b/src/pghead2.cpp @@ -13,6 +13,8 @@ //---------------------------------------------------------------------------- +#include "doc.h" + namespace vrv { //---------------------------------------------------------------------------- @@ -33,6 +35,18 @@ void PgHead2::Reset() RunningElement::Reset(); } +int PgHead2::GetTotalHeight(Doc *doc) +{ + assert(doc); + + int height = this->GetContentHeight(); + if (height > 0) { + const int unit = doc->GetDrawingUnit(100); + height += doc->GetOptions()->m_bottomMarginPgHead.GetValue() * unit; + } + return height; +} + //---------------------------------------------------------------------------- // Functor methods //---------------------------------------------------------------------------- diff --git a/src/runningelement.cpp b/src/runningelement.cpp index 326e587c3be..765d52e8eb0 100644 --- a/src/runningelement.cpp +++ b/src/runningelement.cpp @@ -185,7 +185,7 @@ void RunningElement::SetDrawingPage(Page *page) } } -int RunningElement::GetTotalHeight() +int RunningElement::GetContentHeight() { int height = 0; int i; From acc51f943da6f05907d5a66c326854f5f11695e5 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 21:33:43 +0100 Subject: [PATCH 330/403] Rename functor member and remove unused one --- include/vrv/functorparams.h | 6 ++---- src/page.cpp | 4 +--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index a95bfa70b17..275dbaa6419 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -845,16 +845,14 @@ class AlignSystemsParams : public FunctorParams { AlignSystemsParams(Doc *doc) { m_shift = 0; - m_systemMargin = 0; - m_systemFirstMargin = 0; + m_systemSpacing = 0; m_prevBottomOverflow = 0; m_prevBottomClefOverflow = 0; m_justificationSum = 0.; m_doc = doc; } int m_shift; - int m_systemMargin; - int m_systemFirstMargin; + int m_systemSpacing; int m_prevBottomOverflow; int m_prevBottomClefOverflow; double m_justificationSum; diff --git a/src/page.cpp b/src/page.cpp index 5fdb3282db9..e2c57ce3ec3 100644 --- a/src/page.cpp +++ b/src/page.cpp @@ -550,9 +550,7 @@ void Page::LayOutVertically() // Adjust system Y position AlignSystemsParams alignSystemsParams(doc); alignSystemsParams.m_shift = doc->m_drawingPageContentHeight; - alignSystemsParams.m_systemMargin = (doc->GetOptions()->m_spacingSystem.GetValue()) * doc->GetDrawingUnit(100); - alignSystemsParams.m_systemFirstMargin - = (doc->GetOptions()->m_spacingSystemFirst.GetValue()) * doc->GetDrawingUnit(100); + alignSystemsParams.m_systemSpacing = (doc->GetOptions()->m_spacingSystem.GetValue()) * doc->GetDrawingUnit(100); Functor alignSystems(&Object::AlignSystems); Functor alignSystemsEnd(&Object::AlignSystemsEnd); this->Process(&alignSystems, &alignSystemsParams, &alignSystemsEnd); From 8f7c6137bd9e4d9960e99e93f2e4ac962dee5e56 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 21:34:47 +0100 Subject: [PATCH 331/403] Adjust Page methods for footer / header positioning --- src/page.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/page.cpp b/src/page.cpp index e2c57ce3ec3..bd762af1a71 100644 --- a/src/page.cpp +++ b/src/page.cpp @@ -680,7 +680,7 @@ int Page::GetContentHeight() const int height = doc->m_drawingPageContentHeight - last->GetDrawingYRel() + last->GetHeight(); if (this->GetFooter()) { - height += this->GetFooter()->GetTotalHeight(); + height += this->GetFooter()->GetTotalHeight(doc); } return height; @@ -842,11 +842,9 @@ int Page::AlignSystems(FunctorParams *functorParams) RunningElement *header = this->GetHeader(); if (header) { header->SetDrawingYRel(params->m_shift); - const int headerHeight = header->GetTotalHeight(); + const int headerHeight = header->GetTotalHeight(params->m_doc); if (headerHeight > 0) { - const int bottomMarginPgHead - = params->m_doc->GetOptions()->m_bottomMarginPgHead.GetValue() * params->m_doc->GetDrawingUnit(100); - params->m_shift -= header->GetTotalHeight() + bottomMarginPgHead; + params->m_shift -= headerHeight; } } return FUNCTOR_CONTINUE; @@ -862,18 +860,20 @@ int Page::AlignSystemsEnd(FunctorParams *functorParams) RunningElement *footer = this->GetFooter(); if (footer) { - m_drawingJustifiableHeight -= footer->GetTotalHeight(); + m_drawingJustifiableHeight -= footer->GetTotalHeight(params->m_doc); // Move it up below the last system if (params->m_doc->GetOptions()->m_adjustPageHeight.GetValue()) { if (this->GetChildCount()) { System *last = dynamic_cast(this->GetLast(SYSTEM)); assert(last); - footer->SetDrawingYRel(last->GetDrawingYRel() - last->GetHeight()); + const int unit = params->m_doc->GetDrawingUnit(100); + const int topMargin = params->m_doc->GetOptions()->m_topMarginPgFooter.GetValue() * unit; + footer->SetDrawingYRel(last->GetDrawingYRel() - last->GetHeight() - topMargin); } } else { - footer->SetDrawingYRel(footer->GetTotalHeight()); + footer->SetDrawingYRel(footer->GetContentHeight()); } } From 3a26f439919e7e7b9272c3007f1fd99c7b19e1d0 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 21:35:21 +0100 Subject: [PATCH 332/403] Add PgFoot2 methods and adjustments missed in previous commit --- src/pgfoot2.cpp | 14 ++++++++++++++ src/score.cpp | 8 ++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/pgfoot2.cpp b/src/pgfoot2.cpp index a8de40b7003..4b1d4c3aa9d 100644 --- a/src/pgfoot2.cpp +++ b/src/pgfoot2.cpp @@ -13,6 +13,8 @@ //---------------------------------------------------------------------------- +#include "doc.h" + namespace vrv { //---------------------------------------------------------------------------- @@ -33,6 +35,18 @@ void PgFoot2::Reset() RunningElement::Reset(); } +int PgFoot2::GetTotalHeight(Doc *doc) +{ + assert(doc); + + int height = this->GetContentHeight(); + if (height > 0) { + const int unit = doc->GetDrawingUnit(100); + height += doc->GetOptions()->m_topMarginPgFooter.GetValue() * unit; + } + return height; +} + //---------------------------------------------------------------------------- // Functor methods //---------------------------------------------------------------------------- diff --git a/src/score.cpp b/src/score.cpp index e77ae9a74af..4dfd0628a2c 100644 --- a/src/score.cpp +++ b/src/score.cpp @@ -114,8 +114,8 @@ void Score::CalcRunningElementHeight(Doc *doc) RunningElement *page1Header = page1->GetHeader(); RunningElement *page1Footer = page1->GetFooter(); - m_drawingPgHeadHeight = (page1Header) ? page1Header->GetTotalHeight() : 0; - m_drawingPgFootHeight = (page1Footer) ? page1Footer->GetTotalHeight() : 0; + m_drawingPgHeadHeight = (page1Header) ? page1Header->GetTotalHeight(doc) : 0; + m_drawingPgFootHeight = (page1Footer) ? page1Footer->GetTotalHeight(doc) : 0; Page *page2 = new Page(); page2->m_score = this; @@ -127,8 +127,8 @@ void Score::CalcRunningElementHeight(Doc *doc) RunningElement *page2Header = page2->GetHeader(); RunningElement *page2Footer = page2->GetFooter(); - m_drawingPgHead2Height = (page2Header) ? page2Header->GetTotalHeight() : 0; - m_drawingPgFoot2Height = (page2Footer) ? page2Footer->GetTotalHeight() : 0; + m_drawingPgHead2Height = (page2Header) ? page2Header->GetTotalHeight(doc) : 0; + m_drawingPgFoot2Height = (page2Footer) ? page2Footer->GetTotalHeight(doc) : 0; pages->DeleteChild(page1); pages->DeleteChild(page2); From 2742cf3de52cee5a04601648dcbfd93aea4e7d05 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 21:37:05 +0100 Subject: [PATCH 333/403] Adjust StaffAlignment::GetMinimumSpacing to set half a staff space above and below the system --- src/verticalaligner.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/verticalaligner.cpp b/src/verticalaligner.cpp index 2315f6ea659..38cddfb7557 100644 --- a/src/verticalaligner.cpp +++ b/src/verticalaligner.cpp @@ -445,6 +445,8 @@ int StaffAlignment::GetMinimumSpacing(const Doc *doc) const { assert(doc); + const AttSpacing *scoreDefSpacing = this->GetAttSpacing(); + int spacing = 0; if (m_staff && m_staff->m_drawingStaffDef) { // Default or staffDef spacing @@ -452,10 +454,10 @@ int StaffAlignment::GetMinimumSpacing(const Doc *doc) const spacing = m_staff->m_drawingStaffDef->GetSpacing() * doc->GetDrawingUnit(100); } else { - const AttSpacing *scoreDefSpacing = this->GetAttSpacing(); switch (m_spacingType) { case SystemAligner::SpacingType::System: { - spacing = this->GetParentSystem()->GetMinimumSystemSpacing(doc); + // Top staff spacing (above) is half of a staff spacing + spacing = this->GetMinimumStaffSpacing(doc, scoreDefSpacing) / 2; break; } case SystemAligner::SpacingType::Staff: { @@ -479,6 +481,10 @@ int StaffAlignment::GetMinimumSpacing(const Doc *doc) const } } } + // This is the bottom aligner - spacing is half of a staff spacing + else { + spacing = this->GetMinimumStaffSpacing(doc, scoreDefSpacing) / 2; + } return spacing; } From 57e4fa4f00c7ac2f053aa50ef76d29b5058a5539 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 21:39:45 +0100 Subject: [PATCH 334/403] Adjust StaffAlignment::AlignVerticallyEnd and StaffAlignment::AdjustYPos * Now first staves (SystemAligner::SpacingType::System) are treated as other staves --- src/verticalaligner.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/verticalaligner.cpp b/src/verticalaligner.cpp index 38cddfb7557..d7b96c48f0e 100644 --- a/src/verticalaligner.cpp +++ b/src/verticalaligner.cpp @@ -1055,9 +1055,7 @@ int StaffAlignment::AlignVerticallyEnd(FunctorParams *functorParams) AlignVerticallyParams *params = vrv_params_cast(functorParams); assert(params); - if (m_spacingType != SystemAligner::SpacingType::System) { - params->m_cumulatedShift += this->GetMinimumSpacing(params->m_doc); - } + params->m_cumulatedShift += this->GetMinimumSpacing(params->m_doc); this->SetYRel(-params->m_cumulatedShift); @@ -1075,10 +1073,7 @@ int StaffAlignment::AdjustYPos(FunctorParams *functorParams) const int defaultSpacing = this->GetMinimumSpacing(params->m_doc); const int minSpacing = this->CalcMinimumRequiredSpacing(params->m_doc); - if (m_spacingType == SystemAligner::SpacingType::System) { - params->m_cumulatedShift += minSpacing; - } - else if (minSpacing > defaultSpacing) { + if (minSpacing > defaultSpacing) { params->m_cumulatedShift += minSpacing - defaultSpacing; } From 79ab2f1c8a872c876aac48cd8f1c6999879e746c Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 21:40:12 +0100 Subject: [PATCH 335/403] Do not add a margin below the last staff --- src/verticalaligner.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/verticalaligner.cpp b/src/verticalaligner.cpp index d7b96c48f0e..4fcbc94aca9 100644 --- a/src/verticalaligner.cpp +++ b/src/verticalaligner.cpp @@ -515,8 +515,9 @@ int StaffAlignment::CalcMinimumRequiredSpacing(const Doc *doc) const overflowSum += this->GetOverlap(); } - // Add a margin - overflowSum += doc->GetBottomMargin(STAFF) * doc->GetDrawingUnit(this->GetStaffSize()); + // Add a margin but not for the bottom aligner + if (m_staff) overflowSum += doc->GetBottomMargin(STAFF) * doc->GetDrawingUnit(this->GetStaffSize()); + if (const int adjust = prevAlignment->GetBeamAdjust()) { overflowSum += adjust; } From 65a7052c59fbe4ae1e6aa78e38bc4e26913d1dea Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 9 Feb 2022 21:40:28 +0100 Subject: [PATCH 336/403] Adjust system spacing calculation --- src/system.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/system.cpp b/src/system.cpp index f4f8c0479b3..a93396a1377 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -753,16 +753,17 @@ int System::AlignSystems(FunctorParams *functorParams) assert(params); assert(m_systemAligner.GetBottomAlignment()); - int systemMargin = this->IsFirstInPage() ? params->m_systemFirstMargin : params->m_systemMargin; - if (systemMargin) { + // No spacing for the first system + int systemSpacing = this->IsFirstInPage() ? 0 : params->m_systemSpacing; + if (systemSpacing) { const int contentOverflow = params->m_prevBottomOverflow + m_systemAligner.GetOverflowAbove(params->m_doc); const int clefOverflow = params->m_prevBottomClefOverflow + m_systemAligner.GetOverflowAbove(params->m_doc, true); // Alignment is already pre-determined with staff alignment overflow - // We need to subtract them from the desired margin - const int actualMargin = systemMargin - std::max(contentOverflow, clefOverflow); - // Set the margin if it exsits (greater than 0) - if (actualMargin > 0) params->m_shift -= actualMargin; + // We need to subtract them from the desired spacing + const int actualSpacing = systemSpacing - std::max(contentOverflow, clefOverflow); + // Set the spacing if it exsits (greater than 0) + if (actualSpacing > 0) params->m_shift -= actualSpacing; } this->SetDrawingYRel(params->m_shift); From 3eacc5151546c9b5af7403e89288f53a99328574 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Thu, 10 Feb 2022 13:51:06 +0100 Subject: [PATCH 337/403] Fix typo and make changes in logs of test-suite-diff more visible with ***** --- doc/test-suite-diff.py | 2 +- src/system.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/test-suite-diff.py b/doc/test-suite-diff.py index d05dca7eb36..17db1b2944e 100644 --- a/doc/test-suite-diff.py +++ b/doc/test-suite-diff.py @@ -207,7 +207,7 @@ def end_webpage(html, body, htmlOutFile): span = etree.SubElement(link, 'span', attrib={'class': 'badge'}) span.text = str(nbChanges) - log.append("* {}: {}".format(item1, nbChanges)) + log.append("****** {}: {} ******".format(item1, nbChanges)) categoryChanges += 1 totalChanges += nbChanges diff --git a/src/system.cpp b/src/system.cpp index a93396a1377..037e7dbba83 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -762,7 +762,7 @@ int System::AlignSystems(FunctorParams *functorParams) // Alignment is already pre-determined with staff alignment overflow // We need to subtract them from the desired spacing const int actualSpacing = systemSpacing - std::max(contentOverflow, clefOverflow); - // Set the spacing if it exsits (greater than 0) + // Set the spacing if it exists (greater than 0) if (actualSpacing > 0) params->m_shift -= actualSpacing; } From 7394fd51ba1e0b352c90a402da2c8cf6d436a026 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Fri, 11 Feb 2022 10:52:30 +0100 Subject: [PATCH 338/403] Fixed: Deprecate Python 3.6, add 3.10 Fixes #2635 --- .github/workflows/python-ci-wheel.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-ci-wheel.yml b/.github/workflows/python-ci-wheel.yml index 7887ec8b097..7e82189867a 100644 --- a/.github/workflows/python-ci-wheel.yml +++ b/.github/workflows/python-ci-wheel.yml @@ -24,7 +24,7 @@ jobs: # Build the wheels for Linux, Windows and macOS for Python 3.9 matrix: os: [macos-latest, windows-latest, ubuntu-20.04] - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: [3.7, 3.8, 3.9, 3.10] architecture: [x86, x64] include: - os: macos-latest From 420058007226e49700351ec81a78ed9f6960f78b Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Fri, 11 Feb 2022 11:38:42 +0100 Subject: [PATCH 339/403] Put 3.10 in quotes to avoid interpretation as 3.1 --- .github/workflows/python-ci-wheel.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-ci-wheel.yml b/.github/workflows/python-ci-wheel.yml index 7e82189867a..028edfaab63 100644 --- a/.github/workflows/python-ci-wheel.yml +++ b/.github/workflows/python-ci-wheel.yml @@ -24,7 +24,7 @@ jobs: # Build the wheels for Linux, Windows and macOS for Python 3.9 matrix: os: [macos-latest, windows-latest, ubuntu-20.04] - python-version: [3.7, 3.8, 3.9, 3.10] + python-version: [3.7, 3.8, 3.9, '3.10'] architecture: [x86, x64] include: - os: macos-latest From da905eba1394bcdc9bd909e6becd8daeeac2168c Mon Sep 17 00:00:00 2001 From: Monceber Date: Fri, 11 Feb 2022 13:31:36 +0200 Subject: [PATCH 340/403] Fix possible memory leak --- src/ioabc.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/ioabc.cpp b/src/ioabc.cpp index cdd9d196568..1622328c2e1 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -1028,10 +1028,10 @@ void ABCInput::InitScoreAndSection(Score *&score, Section *§ion) void ABCInput::parseLyrics() { std::vector> syllables; - constexpr std::string_view delimeters = "~\\-_ "; + constexpr std::string_view delimiters = "~\\-_ "; // skipping w:, so start from third element std::size_t start = 2; - std::size_t found = abcLine.find_first_of(delimeters, 2); + std::size_t found = abcLine.find_first_of(delimiters, 2); while (found != std::string::npos) { // Counter indicates for how many notes verse should be held. This defaults to 1, unless '_' is found int counter = 1; @@ -1059,7 +1059,7 @@ void ABCInput::parseLyrics() sylType = sylLog_CON_d; } } - // separate syllable from delimeters to form syl that we want to add + // separate syllable from delimiters to form syl that we want to add syllable = abcLine.substr(start, found - start); syllable.erase( std::remove_if(syllable.begin(), syllable.end(), [](unsigned char x) { return (x == '_') || (x == '\\'); }), @@ -1078,8 +1078,8 @@ void ABCInput::parseLyrics() // find next delimeter in the string start = found + 1; - found = abcLine.find_first_of(delimeters, start); - // if none found, the rest of the string is going to server as last syl + found = abcLine.find_first_of(delimiters, start); + // if none found, the rest of the string is going to serve as last syl if ((found == std::string::npos) && (start < abcLine.size())) { std::string syllable = abcLine.substr(start); if (!syllable.empty() && syllable[syllable.size() - 1] == '\r') syllable.erase(syllable.size() - 1); @@ -1109,6 +1109,11 @@ void ABCInput::parseLyrics() verse->AddChild(syllables.at(j).first); i += syllables.at(j).second; } + // clean up syllables that were not added to any of the layer elements + for (const auto syl : syllables) { + if (!syl.first->GetParent()) delete syl.first; + } + // increment verse number, in case next line in file is also w: ++m_verseNumber; } From 8e6aa680e48ca09d8e1fe1300254be2a9c86a3a2 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Fri, 11 Feb 2022 12:33:14 +0100 Subject: [PATCH 341/403] add Python 3.10 use quotes use pypa/cibuildwheel --- .github/workflows/python-ci-wheel.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/python-ci-wheel.yml b/.github/workflows/python-ci-wheel.yml index 7887ec8b097..b3c9e6b0f99 100644 --- a/.github/workflows/python-ci-wheel.yml +++ b/.github/workflows/python-ci-wheel.yml @@ -21,10 +21,10 @@ jobs: strategy: # Ensure that a wheel builder finishes even if another fails fail-fast: false - # Build the wheels for Linux, Windows and macOS for Python 3.9 + # Build the wheels for Linux, Windows and macOS for Python 3.10 matrix: os: [macos-latest, windows-latest, ubuntu-20.04] - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: ["3.7", "3.8", "3.9", "3.10"] architecture: [x86, x64] include: - os: macos-latest @@ -82,15 +82,14 @@ jobs: #===============================================# # wheels - name: Build wheels - uses: joerick/cibuildwheel@f3dae81e82da2a2a36338269e32f3adb7b42dc8c + uses: pypa/cibuildwheel@v2.3.1 with: output-dir: wheelhouse env: CIBW_SKIP: cp27-* # manylinux2014 not compatible with python 2.7 CIBW_BUILD: ${{ env.CIBW_BUILD_IDENTIFIER }} - # TODO: change back to "manylinux2014" when cibuildwheel releases new version - CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/manylinux2014_x86_64:2021-02-17-8d1372a - CIBW_MANYLINUX_I686_IMAGE: quay.io/pypa/manylinux2014_i686:2021-02-17-8d1372a + CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/manylinux2014_x86_64 + CIBW_MANYLINUX_I686_IMAGE: quay.io/pypa/manylinux2014_i686 CIBW_BEFORE_ALL_MACOS: brew update && brew install swig CIBW_BEFORE_ALL_WINDOWS: choco install swig -f -y CIBW_BEFORE_BUILD: swig -version && bash -c 'cd tools; ./get_git_commit.sh' && swig -c++ -python -py3 ./bindings/python/verovio.i From a08dc765c0eb17f7ad82fec0f06c66991e3ef308 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Fri, 11 Feb 2022 13:16:13 +0100 Subject: [PATCH 342/403] Apply suggested change from @musicEnfanthen --- .github/workflows/python-ci-wheel.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-ci-wheel.yml b/.github/workflows/python-ci-wheel.yml index b3c9e6b0f99..a16ddf1247c 100644 --- a/.github/workflows/python-ci-wheel.yml +++ b/.github/workflows/python-ci-wheel.yml @@ -88,8 +88,8 @@ jobs: env: CIBW_SKIP: cp27-* # manylinux2014 not compatible with python 2.7 CIBW_BUILD: ${{ env.CIBW_BUILD_IDENTIFIER }} - CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/manylinux2014_x86_64 - CIBW_MANYLINUX_I686_IMAGE: quay.io/pypa/manylinux2014_i686 + CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 + CIBW_MANYLINUX_I686_IMAGE: manylinux2014 CIBW_BEFORE_ALL_MACOS: brew update && brew install swig CIBW_BEFORE_ALL_WINDOWS: choco install swig -f -y CIBW_BEFORE_BUILD: swig -version && bash -c 'cd tools; ./get_git_commit.sh' && swig -c++ -python -py3 ./bindings/python/verovio.i From 04e63a99818ac423a135de9546940e3dd9cdcd52 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 11 Feb 2022 15:26:26 +0100 Subject: [PATCH 343/403] Add getter for Note::m_stemSameasRole --- include/vrv/note.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/vrv/note.h b/include/vrv/note.h index 6a1df110ace..bd247e9f9d1 100644 --- a/include/vrv/note.h +++ b/include/vrv/note.h @@ -225,6 +225,11 @@ class Note : public LayerElement, void SetStemSameasNote(Note *stemSameas) { m_stemSameas = stemSameas; } ///@} + /** + * Getter for stem sameas role + */ + StemSameasDrawingRole GetStemSameasRole() const { return m_stemSameasRole; } + /** * Resovle @stem.sameas links by instanciating Note::m_stemSameas (*Note). * Called twice from Object::PrepareLinks. Once to fill uuid / note pairs, From 49349a3d47dfcd852173cd9fcfc9145eb5f337b0 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Fri, 11 Feb 2022 15:27:19 +0100 Subject: [PATCH 344/403] Skip stem.mod for notes with stem.sameas (including in btrem). Fixes #2639 --- src/elementpart.cpp | 4 ++-- src/view_element.cpp | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/elementpart.cpp b/src/elementpart.cpp index 51889c2f76a..660849159b8 100644 --- a/src/elementpart.cpp +++ b/src/elementpart.cpp @@ -531,11 +531,11 @@ int Stem::CalcStem(FunctorParams *functorParams) int slashFactor = 0; // In case there is explicitly specified stem mod for slashes - if (this->HasStemMod() && (this->GetStemMod() < 8)) { + if (!params->m_stemSameas && this->HasStemMod() && (this->GetStemMod() < 8)) { slashFactor = this->GetStemMod() - 1; } // otherwise check whether it's trem and its @unitdir attribute is shorter than duration - else if (this->GetFirstAncestor(BTREM)) { + else if (!params->m_stemSameas && this->GetFirstAncestor(BTREM)) { BTrem *bTrem = vrv_cast(this->GetFirstAncestor(BTREM)); assert(bTrem); if (bTrem->HasUnitdur() && (bTrem->GetUnitdur() > DURATION_4)) { diff --git a/src/view_element.cpp b/src/view_element.cpp index 113f3e2ccd4..85fd9acdad5 100644 --- a/src/view_element.cpp +++ b/src/view_element.cpp @@ -481,6 +481,12 @@ void View::DrawBTrem(DeviceContext *dc, LayerElement *element, Layer *layer, Sta this->DrawLayerChildren(dc, bTrem, layer, staff, measure); + if (childNote && childNote->HasStemSameasNote() && childNote->GetStemSameasRole() == SAMEAS_SECONDARY) { + bTrem->SetEmptyBB(); + dc->EndGraphic(element, this); + return; + } + // Get stem values from the chord or note child if (childChord) { Stem *stem = childChord->GetDrawingStem(); From f06ba3aed5ea2b1aafad7685549be2ce01eb33a6 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Mon, 14 Feb 2022 07:32:52 +0100 Subject: [PATCH 345/403] Pass by reference --- src/ioabc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ioabc.cpp b/src/ioabc.cpp index 1622328c2e1..9fe48d487ec 100644 --- a/src/ioabc.cpp +++ b/src/ioabc.cpp @@ -1110,7 +1110,7 @@ void ABCInput::parseLyrics() i += syllables.at(j).second; } // clean up syllables that were not added to any of the layer elements - for (const auto syl : syllables) { + for (const auto &syl : syllables) { if (!syl.first->GetParent()) delete syl.first; } From 7e593407103cfdf5facf79f75fef0f76d7a73a78 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Mon, 14 Feb 2022 08:29:33 +0100 Subject: [PATCH 346/403] Fix wrong assertion --- src/elementpart.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/elementpart.cpp b/src/elementpart.cpp index 660849159b8..7ffcca4c915 100644 --- a/src/elementpart.cpp +++ b/src/elementpart.cpp @@ -547,10 +547,11 @@ int Stem::CalcStem(FunctorParams *functorParams) // There is never a flag with stem sameas notes or with a duration longer than 8th notes if (!params->m_stemSameas && params->m_dur > DUR_4) { flag = vrv_cast(this->GetFirst(FLAG)); - assert(flag); - flag->m_drawingNbFlags = params->m_dur - DUR_4; - if (!this->HasStemLen() && !this->IsGraceNote() && this->HasStemMod()) { - slashFactor += (params->m_dur > DUR_8) ? 2 : 1; + if (flag) { + flag->m_drawingNbFlags = params->m_dur - DUR_4; + if (!this->HasStemLen() && !this->IsGraceNote() && this->HasStemMod()) { + slashFactor += (params->m_dur > DUR_8) ? 2 : 1; + } } } From 4bded7475058c75265be999c484c583b1dde2174 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 14 Feb 2022 10:29:47 +0100 Subject: [PATCH 347/403] Fix issue with stem flags with stem.sameas. Closes #2627 --- src/elementpart.cpp | 16 +++++++++++----- src/note.cpp | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/elementpart.cpp b/src/elementpart.cpp index 660849159b8..87e86e4ad46 100644 --- a/src/elementpart.cpp +++ b/src/elementpart.cpp @@ -544,13 +544,19 @@ int Stem::CalcStem(FunctorParams *functorParams) } Flag *flag = NULL; - // There is never a flag with stem sameas notes or with a duration longer than 8th notes - if (!params->m_stemSameas && params->m_dur > DUR_4) { + // There is never a flag with a duration longer than 8th notes + if (params->m_dur > DUR_4) { flag = vrv_cast(this->GetFirst(FLAG)); assert(flag); - flag->m_drawingNbFlags = params->m_dur - DUR_4; - if (!this->HasStemLen() && !this->IsGraceNote() && this->HasStemMod()) { - slashFactor += (params->m_dur > DUR_8) ? 2 : 1; + // There is never a flag with stem sameas notes + if (params->m_stemSameas) { + flag->m_drawingNbFlags = 0; + } + else { + flag->m_drawingNbFlags = params->m_dur - DUR_4; + if (!this->HasStemLen() && !this->IsGraceNote() && this->HasStemMod()) { + slashFactor += (params->m_dur > DUR_8) ? 2 : 1; + } } } diff --git a/src/note.cpp b/src/note.cpp index a1b9af61bd5..51f65f3171c 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -1287,7 +1287,7 @@ int Note::PrepareLayerElementParts(FunctorParams *functorParams) } if ((this->GetActualDur() > DUR_4) && !this->IsInBeam() && !this->IsInFTrem() && !this->IsChordTone() - && !this->IsMensuralDur() && !this->HasStemSameasNote() && !this->IsTabGrpNote()) { + && !this->IsMensuralDur() && !this->IsTabGrpNote()) { // We should have a stem at this stage assert(currentStem); if (!currentFlag) { From 1f738f429c23c742aa966b7ced1ad02931fe4232 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 14 Feb 2022 10:31:03 +0100 Subject: [PATCH 348/403] Rename functor member to m_isStemSameasSecondary --- include/vrv/functorparams.h | 4 ++-- src/chord.cpp | 2 +- src/elementpart.cpp | 14 +++++++------- src/note.cpp | 4 ++-- src/tabdursym.cpp | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index eb9f7e3af8b..1237590f832 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1078,7 +1078,7 @@ class CalcStemParams : public FunctorParams { m_verticalCenter = 0; m_dur = DUR_1; m_isGraceNote = false; - m_stemSameas = false; + m_isStemSameasSecondary = false; m_tabGrpWithNoNote = false; m_staff = NULL; m_layer = NULL; @@ -1089,7 +1089,7 @@ class CalcStemParams : public FunctorParams { int m_verticalCenter; int m_dur; bool m_isGraceNote; - bool m_stemSameas; + bool m_isStemSameasSecondary; bool m_tabGrpWithNoNote; Staff *m_staff; Layer *m_layer; diff --git a/src/chord.cpp b/src/chord.cpp index 77b983a7fae..e5e31147f08 100644 --- a/src/chord.cpp +++ b/src/chord.cpp @@ -696,7 +696,7 @@ int Chord::CalcStem(FunctorParams *functorParams) params->m_interface = this; params->m_dur = this->GetActualDur(); params->m_isGraceNote = this->IsGraceNote(); - params->m_stemSameas = false; + params->m_isStemSameasSecondary = false; /************ Set the direction ************/ diff --git a/src/elementpart.cpp b/src/elementpart.cpp index 87e86e4ad46..79361f54826 100644 --- a/src/elementpart.cpp +++ b/src/elementpart.cpp @@ -488,7 +488,7 @@ int Stem::CalcStem(FunctorParams *functorParams) baseStem = this->GetStemLen() * -params->m_doc->GetDrawingUnit(staffSize); } // Do not adjust the baseStem for stem sameas notes (its length is in m_chordStemLength) - else if (!params->m_stemSameas) { + else if (!params->m_isStemSameasSecondary) { int thirdUnit = params->m_doc->GetDrawingUnit(staffSize) / 3; const data_STEMDIRECTION stemDir = params->m_interface->GetDrawingStemDir(); baseStem = -(params->m_interface->CalcStemLenInThirdUnits(params->m_staff, stemDir) * thirdUnit); @@ -508,7 +508,7 @@ int Stem::CalcStem(FunctorParams *functorParams) p = params->m_interface->GetStemUpSE(params->m_doc, staffSize, drawingCueSize); p.x -= stemShift; } - const int stemShotening = (params->m_stemSameas) ? 0 : p.y; + const int stemShotening = (params->m_isStemSameasSecondary) ? 0 : p.y; this->SetDrawingStemLen(baseStem + params->m_chordStemLength + stemShotening); } else { @@ -520,7 +520,7 @@ int Stem::CalcStem(FunctorParams *functorParams) p = params->m_interface->GetStemDownNW(params->m_doc, staffSize, drawingCueSize); p.x += stemShift; } - const int stemShotening = (params->m_stemSameas) ? 0 : p.y; + const int stemShotening = (params->m_isStemSameasSecondary) ? 0 : p.y; this->SetDrawingStemLen(-(baseStem + params->m_chordStemLength - stemShotening)); } this->SetDrawingYRel(this->GetDrawingYRel() + p.y); @@ -531,11 +531,11 @@ int Stem::CalcStem(FunctorParams *functorParams) int slashFactor = 0; // In case there is explicitly specified stem mod for slashes - if (!params->m_stemSameas && this->HasStemMod() && (this->GetStemMod() < 8)) { + if (!params->m_isStemSameasSecondary && this->HasStemMod() && (this->GetStemMod() < 8)) { slashFactor = this->GetStemMod() - 1; } // otherwise check whether it's trem and its @unitdir attribute is shorter than duration - else if (!params->m_stemSameas && this->GetFirstAncestor(BTREM)) { + else if (!params->m_isStemSameasSecondary && this->GetFirstAncestor(BTREM)) { BTrem *bTrem = vrv_cast(this->GetFirstAncestor(BTREM)); assert(bTrem); if (bTrem->HasUnitdur() && (bTrem->GetUnitdur() > DURATION_4)) { @@ -549,7 +549,7 @@ int Stem::CalcStem(FunctorParams *functorParams) flag = vrv_cast(this->GetFirst(FLAG)); assert(flag); // There is never a flag with stem sameas notes - if (params->m_stemSameas) { + if (params->m_isStemSameasSecondary) { flag->m_drawingNbFlags = 0; } else { @@ -582,7 +582,7 @@ int Stem::CalcStem(FunctorParams *functorParams) // Do not adjust the length with stem sameas notes or if given in the encoding // however, the stem will be extend with the SMuFL extension from 32th - this can be improved - if (params->m_stemSameas || this->HasStemLen()) { + if (params->m_isStemSameasSecondary || this->HasStemLen()) { if ((this->GetStemLen() == 0) && flag) flag->m_drawingNbFlags = 0; return FUNCTOR_CONTINUE; } diff --git a/src/note.cpp b/src/note.cpp index 51f65f3171c..843b831b025 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -1009,7 +1009,7 @@ int Note::CalcStem(FunctorParams *functorParams) params->m_interface = this; params->m_dur = this->GetActualDur(); params->m_isGraceNote = this->IsGraceNote(); - params->m_stemSameas = false; + params->m_isStemSameasSecondary = false; int staffSize = staff->m_drawingStaffSize; @@ -1046,7 +1046,7 @@ int Note::CalcStem(FunctorParams *functorParams) // The value of m_stemSameasRole is set by Note::CalcStemDirForSameasNote if (this->HasStemSameasNote() && m_stemSameasRole == SAMEAS_SECONDARY) { params->m_chordStemLength = -std::abs(this->GetDrawingY() - this->GetStemSameasNote()->GetDrawingY()); - params->m_stemSameas = true; + params->m_isStemSameasSecondary = true; } return FUNCTOR_CONTINUE; diff --git a/src/tabdursym.cpp b/src/tabdursym.cpp index a9df42f779b..a1d9284e395 100644 --- a/src/tabdursym.cpp +++ b/src/tabdursym.cpp @@ -194,7 +194,7 @@ int TabDurSym::CalcStem(FunctorParams *functorParams) params->m_interface = this; // Grace an stem sameas not supported in tablature params->m_isGraceNote = false; - params->m_stemSameas = false; + params->m_isStemSameasSecondary = false; int staffSize = params->m_staff->m_drawingStaffSize; From 065de13aac25a8e0ea4fc3018ffd316d03f7ddf7 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Mon, 14 Feb 2022 08:29:33 +0100 Subject: [PATCH 349/403] Revert "Fix wrong assertion" This reverts commit 7e593407103cfdf5facf79f75fef0f76d7a73a78. --- src/elementpart.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/elementpart.cpp b/src/elementpart.cpp index 7ffcca4c915..660849159b8 100644 --- a/src/elementpart.cpp +++ b/src/elementpart.cpp @@ -547,11 +547,10 @@ int Stem::CalcStem(FunctorParams *functorParams) // There is never a flag with stem sameas notes or with a duration longer than 8th notes if (!params->m_stemSameas && params->m_dur > DUR_4) { flag = vrv_cast(this->GetFirst(FLAG)); - if (flag) { - flag->m_drawingNbFlags = params->m_dur - DUR_4; - if (!this->HasStemLen() && !this->IsGraceNote() && this->HasStemMod()) { - slashFactor += (params->m_dur > DUR_8) ? 2 : 1; - } + assert(flag); + flag->m_drawingNbFlags = params->m_dur - DUR_4; + if (!this->HasStemLen() && !this->IsGraceNote() && this->HasStemMod()) { + slashFactor += (params->m_dur > DUR_8) ? 2 : 1; } } From 4433ceb52196d2b999a4354e9d7b61d70cfa4744 Mon Sep 17 00:00:00 2001 From: Paul Overell Date: Mon, 14 Feb 2022 11:19:01 +0000 Subject: [PATCH 350/403] Fix Tablature: Augmentation dots on rhythm-signs #2525 --- src/view_tab.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/view_tab.cpp b/src/view_tab.cpp index 0fa638de630..63ed37470cd 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -197,10 +197,23 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, if (tabDurSym->GetDrawingStem()) { y = tabDurSym->GetDrawingStem()->GetDrawingY(); } - y += m_doc->GetDrawingUnit(glyphSize) * 0.5 * stemDirFactor; - x += m_doc->GetDrawingUnit(glyphSize); + + int dotSize = 0; + + if (staff->IsTabGuitar()) { + y += m_doc->GetDrawingUnit(glyphSize) * 0.5 * stemDirFactor; + x += m_doc->GetDrawingUnit(glyphSize); + dotSize = glyphSize * 2 / 3; + } + else { + // lute tablature + y += m_doc->GetDrawingUnit(glyphSize) * stemDirFactor * 3 / 2; + x += m_doc->GetDrawingUnit(glyphSize) * 3 / 2; + dotSize = glyphSize * 9 / 10; + } + for (int i = 0; i < tabGrp->GetDots(); ++i) { - this->DrawDot(dc, x, y, glyphSize * 2 / 3); + this->DrawDot(dc, x, y, dotSize); // HARDCODED x += m_doc->GetDrawingUnit(glyphSize) * 0.75; } From 667ab4af3b162ad5fb67545abe20f52d8088b9b1 Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 14 Feb 2022 16:37:29 +0200 Subject: [PATCH 351/403] Adjust margins for the rests of multiple layers --- src/rest.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/rest.cpp b/src/rest.cpp index 2e979f6caa1..13d450540ff 100644 --- a/src/rest.cpp +++ b/src/rest.cpp @@ -304,8 +304,15 @@ int Rest::GetOptimalLayerLocation(Staff *staff, Layer *layer, int defaultLocatio // for two layers, top layer shouldn't go below center and lower layer shouldn't go above it. Enforce this by adding // margin that will adjust rest position int marginLocation = isTopLayer ? 6 : 2; - if ((this->GetDur() == DURATION_2) || (this->GetDur() == DURATION_breve)) { - marginLocation = 4; + if ((this->GetDur() == DURATION_long) || (this->GetDur() == DURATION_4)) { + marginLocation = isTopLayer ? 8 : 0; + } + else if (this->GetDur() >= DURATION_8) { + marginLocation + = isTopLayer ? (6 + (this->GetDur() - DURATION_4) / 2 * 2) : (2 - (this->GetDur() - DURATION_8) / 2 * 2); + } + if (this->GetDur() >= DURATION_1024) { + marginLocation -= 2; } const int optimalLocation = isTopLayer ? std::max({ otherLayerRelativeLocation, currentLayerRelativeLocation, defaultLocation, marginLocation }) From d6ce860080156f4dc6400cff23b360169448f1a5 Mon Sep 17 00:00:00 2001 From: Paul Overell Date: Mon, 14 Feb 2022 17:43:39 +0000 Subject: [PATCH 352/403] Augmentation dots, allow for font width and number of flags. Add 5 flag glyph. --- src/view_tab.cpp | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/view_tab.cpp b/src/view_tab.cpp index 63ed37470cd..2f43aa36c43 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -173,20 +173,21 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, int y = element->GetDrawingY(); const int glyphSize = staff->GetDrawingStaffNotationSize(); + const int drawingDur = (tabGrp->GetDurGes() != DURATION_NONE) ? tabGrp->GetActualDurGes() : tabGrp->GetActualDur(); // For beam and guitar notation, stem are drawn through the child Stem if (!tabGrp->IsInBeam() && !staff->IsTabGuitar()) { - const int drawingDur - = (tabGrp->GetDurGes() != DURATION_NONE) ? tabGrp->GetActualDurGes() : tabGrp->GetActualDur(); - int symc = 0; switch (drawingDur) { - case DUR_2: symc = SMUFL_EBA7_luteDurationWhole; break; - case DUR_4: symc = SMUFL_EBA8_luteDurationHalf; break; - case DUR_8: symc = SMUFL_EBA9_luteDurationQuarter; break; - case DUR_16: symc = SMUFL_EBAA_luteDuration8th; break; - case DUR_32: symc = SMUFL_EBAB_luteDuration16th; break; - default: symc = SMUFL_EBA9_luteDurationQuarter; + // TODO SMUFL_EBA6_luteDurationDoubleWhole is defined by SMUFL but not yet implemented in Verovio + /* case DUR_1: symc = SMUFL_EBA6_luteDurationDoubleWhole; break; // 1 back flag */ + case DUR_2: symc = SMUFL_EBA7_luteDurationWhole; break; // 0 flags + case DUR_4: symc = SMUFL_EBA8_luteDurationHalf; break; // 1 flag + case DUR_8: symc = SMUFL_EBA9_luteDurationQuarter; break; // 2 flags + case DUR_16: symc = SMUFL_EBAA_luteDuration8th; break; // 3 flags + case DUR_32: symc = SMUFL_EBAB_luteDuration16th; break; // 4 flags + case DUR_64: symc = SMUFL_EBAC_luteDuration32nd; break; // 5 flags + default: symc = SMUFL_EBA9_luteDurationQuarter; // 2 flags } this->DrawSmuflCode(dc, x, y, symc, glyphSize, true); @@ -200,15 +201,21 @@ void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, int dotSize = 0; - if (staff->IsTabGuitar()) { + if (tabGrp->IsInBeam() || staff->IsTabGuitar()) { y += m_doc->GetDrawingUnit(glyphSize) * 0.5 * stemDirFactor; x += m_doc->GetDrawingUnit(glyphSize); dotSize = glyphSize * 2 / 3; } else { - // lute tablature - y += m_doc->GetDrawingUnit(glyphSize) * stemDirFactor * 3 / 2; - x += m_doc->GetDrawingUnit(glyphSize) * 3 / 2; + // Vertical: the more flags the lower the dots + const int durfactor = DUR_64 - std::min(std::max(drawingDur, DUR_2), DUR_64) + 1; + static_assert(DUR_64 - DUR_2 + 1 == 6); + static_assert(DUR_64 - DUR_64 + 1 == 1); + + y += m_doc->GetDrawingUnit(glyphSize) * stemDirFactor * durfactor * 2 / 5; + + // Horizontal: allow for font width + x += m_doc->GetGlyphWidth(SMUFL_EBA9_luteDurationQuarter, glyphSize, false) / 2; dotSize = glyphSize * 9 / 10; } From 5f2ada5e0d240e66826595610cd331a4c6c334bd Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 15 Feb 2022 10:19:42 +0100 Subject: [PATCH 353/403] Unify grace slur handling --- src/slur.cpp | 53 ++++++++++++---------------------------------------- 1 file changed, 12 insertions(+), 41 deletions(-) diff --git a/src/slur.cpp b/src/slur.cpp index 93c0b18dad7..6a91e119fed 100644 --- a/src/slur.cpp +++ b/src/slur.cpp @@ -1013,26 +1013,12 @@ std::pair Slur::AdjustCoordinates( y2 = end->GetDrawingTop(doc, staff->m_drawingStaffSize); } else if (isGraceToNoteSlur) { - if (end->IsInBeam()) { - x2 += 2 * doc->GetDrawingStemWidth(staff->m_drawingStaffSize); - } - else if (parentBeam || parentFTrem) { - if (end->GetDrawingY() > y1) { - y2 = end->GetDrawingY() + unit * 3; - } - else { - y2 = y1; - x2 += 2 * doc->GetDrawingStemWidth(staff->m_drawingStaffSize); - } - } - else { - const int yMin = y1 - unit * 4; - const int yTop = end->GetDrawingTop(doc, staff->m_drawingStaffSize); - y2 = std::max(end->GetDrawingY() + unit * 2, yMin); - if (y2 > yTop - unit * 2) { - y2 = yTop; - x2 += endRadius - doc->GetDrawingStemWidth(staff->m_drawingStaffSize); - } + const int yMin = y1 - unit * 4; + const int yTop = end->GetDrawingTop(doc, staff->m_drawingStaffSize); + y2 = std::max(end->GetDrawingY() + unit * 2, yMin); + if (y2 > yTop - unit * 2) { + y2 = yTop; + x2 += endRadius - doc->GetDrawingStemWidth(staff->m_drawingStaffSize); } } // portato slurs @@ -1071,29 +1057,14 @@ std::pair Slur::AdjustCoordinates( y2 = end->GetDrawingBottom(doc, staff->m_drawingStaffSize); } else if (isGraceToNoteSlur) { - if (end->IsInBeam()) { - x2 -= endRadius + 2 * doc->GetDrawingStemWidth(staff->m_drawingStaffSize); - } - else if (parentBeam || parentFTrem) { - if (end->GetDrawingY() < y1) { - y2 = end->GetDrawingY(); - x2 -= endRadius + doc->GetDrawingStemWidth(staff->m_drawingStaffSize); - } - else { - y2 = y1; - x2 -= endRadius + doc->GetDrawingStemWidth(staff->m_drawingStaffSize); - } + const int yMax = y1 + unit; + const int yBottom = end->GetDrawingBottom(doc, staff->m_drawingStaffSize); + y2 = std::min(end->GetDrawingY(), yMax); + if (y2 < yBottom + unit) { + y2 = yBottom + unit * 2; } else { - const int yMax = y1 + unit; - const int yBottom = end->GetDrawingBottom(doc, staff->m_drawingStaffSize); - y2 = std::min(end->GetDrawingY(), yMax); - if (y2 < yBottom + unit) { - y2 = yBottom + unit * 2; - } - else { - x2 -= endRadius + 2 * doc->GetDrawingStemWidth(staff->m_drawingStaffSize); - } + x2 -= endRadius + 2 * doc->GetDrawingStemWidth(staff->m_drawingStaffSize); } } // portato slurs From 3fce6e615f36c19f8fd2ac8ebe9543f39b53eff3 Mon Sep 17 00:00:00 2001 From: Craig Stuart Sapp Date: Tue, 15 Feb 2022 20:49:48 -0800 Subject: [PATCH 354/403] Allow display of mensur when meterSig is invisible. --- src/scoredef.cpp | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/scoredef.cpp b/src/scoredef.cpp index eefd43ab19e..88a2c4638ca 100644 --- a/src/scoredef.cpp +++ b/src/scoredef.cpp @@ -343,11 +343,29 @@ void ScoreDef::ReplaceDrawingValues(StaffDef *newStaffDef) delete meterSig; } else if (newStaffDef->HasMeterSigInfo()) { - staffDef->SetDrawMeterSig(true); - // Never draw a meterSig AND a mensur - staffDef->SetDrawMensur(false); MeterSig *meterSig = newStaffDef->GetMeterSigCopy(); - staffDef->SetCurrentMeterSig(meterSig); + if (newStaffDef->HasMensurInfo()) { + // If there is a mensur and the meterSig + // is invisible, then print mensur instead + data_METERFORM meterForm = meterSig->GetForm(); + if (meterForm == METERFORM_invis) { + staffDef->SetDrawMeterSig(false); + staffDef->SetDrawMensur(true); + Mensur *mensur = newStaffDef->GetMensurCopy(); + staffDef->SetCurrentMensur(mensur); + delete mensur; + } + else { + staffDef->SetDrawMeterSig(true); + staffDef->SetDrawMensur(false); + staffDef->SetCurrentMeterSig(meterSig); + } + } + else { + staffDef->SetDrawMeterSig(true); + staffDef->SetDrawMensur(false); + staffDef->SetCurrentMeterSig(meterSig); + } delete meterSig; } // copy other attributes if present From ebd34fa2c6174d59311f7c7ac4374a2eb81396a2 Mon Sep 17 00:00:00 2001 From: Craig Stuart Sapp Date: Tue, 15 Feb 2022 21:46:15 -0800 Subject: [PATCH 355/403] Invisible meterSig still needed to set duration of mRests. --- src/scoredef.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/scoredef.cpp b/src/scoredef.cpp index 88a2c4638ca..f7eac5c8d32 100644 --- a/src/scoredef.cpp +++ b/src/scoredef.cpp @@ -353,6 +353,8 @@ void ScoreDef::ReplaceDrawingValues(StaffDef *newStaffDef) staffDef->SetDrawMensur(true); Mensur *mensur = newStaffDef->GetMensurCopy(); staffDef->SetCurrentMensur(mensur); + // Invisible meterSig is still needed for mRest: + staffDef->SetCurrentMeterSig(meterSig); delete mensur; } else { From bfef0656106df218023f04f1fa8df0493acef182 Mon Sep 17 00:00:00 2001 From: Monceber Date: Fri, 4 Sep 2020 16:39:54 +0300 Subject: [PATCH 356/403] Add files with basic class for beamSpan - initial commit for beamSpan implementation --- include/vrv/beamspan.h | 55 ++++++++++++++++++++++++++++++++++++++++++ include/vrv/vrvdef.h | 1 + src/beamspan.cpp | 52 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 include/vrv/beamspan.h create mode 100644 src/beamspan.cpp diff --git a/include/vrv/beamspan.h b/include/vrv/beamspan.h new file mode 100644 index 00000000000..b3fdec5eb77 --- /dev/null +++ b/include/vrv/beamspan.h @@ -0,0 +1,55 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: beamspan.h +// Author: Andriy Makarchuk +// Created: 2020 +// Copyright (c) Authors and others. All rights reserved. +///////////////////////////////////////////////////////////////////////////// + +#ifndef __VRV_BEAMSPAN_H__ +#define __VRV_BEAMSPAN_H__ + +#include "atts_cmn.h" +#include "controlelement.h" +#include "drawinginterface.h" +#include "timeinterface.h" + +namespace vrv { + +//---------------------------------------------------------------------------- +// BeamSpan +//---------------------------------------------------------------------------- + +/** + * This class models the MEI element. + */ +class BeamSpan : public ControlElement, + public TimeSpanningInterface, + public BeamDrawingInterface, + public AttColor, + public AttBeamedWith, + public AttBeamRend { +public: + /** + * @name Constructors, destructors, and other standard methods + * Reset method reset all attribute classes + */ + ///@{ + BeamSpan(); + virtual ~BeamSpan(); + virtual Object *Clone() const { return new BeamSpan(*this); } + virtual void Reset(); + virtual std::string GetClassName() const { return "BeamSpan"; } + virtual ClassId GetClassId() const { return BEAMSPAN; } + ///@} + +private: + // +public: + // +private: + // +}; + +} // namespace vrv + +#endif //__VRV_BEAMSPAN_H__ \ No newline at end of file diff --git a/include/vrv/vrvdef.h b/include/vrv/vrvdef.h index 67d2590e072..e9da8164f14 100644 --- a/include/vrv/vrvdef.h +++ b/include/vrv/vrvdef.h @@ -166,6 +166,7 @@ enum ClassId : uint16_t { CONTROL_ELEMENT, ANCHOREDTEXT, ARPEG, + BEAMSPAN, BRACKETSPAN, BREATH, CAESURA, diff --git a/src/beamspan.cpp b/src/beamspan.cpp new file mode 100644 index 00000000000..3e16177294d --- /dev/null +++ b/src/beamspan.cpp @@ -0,0 +1,52 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: beamspan.cpp +// Author: Andriy Makarchuk +// Created: 2020 +// Copyright (c) Authors and others. All rights reserved. +///////////////////////////////////////////////////////////////////////////// + +#include "beamspan.h" + +//---------------------------------------------------------------------------- + +#include + +//---------------------------------------------------------------------------- + +#include "vrv.h" + +namespace vrv { + +//---------------------------------------------------------------------------- +// BeamSpan +//---------------------------------------------------------------------------- + +BeamSpan::BeamSpan() + : ControlElement("beamspan-") + , TimeSpanningInterface() + , BeamDrawingInterface() + , AttColor() + , AttBeamedWith() + , AttBeamRend() +{ + RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); + RegisterAttClass(ATT_COLOR); + RegisterAttClass(ATT_BEAMEDWITH); + RegisterAttClass(ATT_BEAMREND); + + Reset(); +} + +BeamSpan::~BeamSpan() {} + +void BeamSpan::Reset() +{ + ControlElement::Reset(); + TimeSpanningInterface::Reset(); + BeamDrawingInterface::Reset(); + ResetColor(); + ResetBeamedWith(); + ResetBeamRend(); +} + +} // namespace vrv \ No newline at end of file From dbefe9479ac191a695cd0f99b0422d9aad7eee9b Mon Sep 17 00:00:00 2001 From: Monceber Date: Fri, 4 Sep 2020 18:10:28 +0300 Subject: [PATCH 357/403] Add MEI I/O for beamSpan - added MEI read/write functions for beamSpan - added TimePointingInterface to support startId - other minor changes --- include/vrv/beamspan.h | 4 ++++ include/vrv/iomei.h | 3 +++ include/vrv/view.h | 1 + src/beamspan.cpp | 2 ++ src/iomei.cpp | 29 +++++++++++++++++++++++++++++ src/system.cpp | 3 +++ 6 files changed, 42 insertions(+) diff --git a/include/vrv/beamspan.h b/include/vrv/beamspan.h index b3fdec5eb77..e229a97327b 100644 --- a/include/vrv/beamspan.h +++ b/include/vrv/beamspan.h @@ -9,6 +9,7 @@ #define __VRV_BEAMSPAN_H__ #include "atts_cmn.h" +#include "beam.h" #include "controlelement.h" #include "drawinginterface.h" #include "timeinterface.h" @@ -23,6 +24,7 @@ namespace vrv { * This class models the MEI element. */ class BeamSpan : public ControlElement, + public TimePointInterface, public TimeSpanningInterface, public BeamDrawingInterface, public AttColor, @@ -46,6 +48,8 @@ class BeamSpan : public ControlElement, // public: // + BeamSegment m_beamSegment; + private: // }; diff --git a/include/vrv/iomei.h b/include/vrv/iomei.h index 66b0ad57f7f..0687f70c719 100644 --- a/include/vrv/iomei.h +++ b/include/vrv/iomei.h @@ -33,6 +33,7 @@ class Arpeg; class Artic; class BarLine; class Beam; +class BeamSpan; class BeatRpt; class BracketSpan; class Breath; @@ -390,6 +391,7 @@ class MEIOutput : public Output { ///@{ void WriteAnchoredText(pugi::xml_node currentNode, AnchoredText *anchoredText); void WriteArpeg(pugi::xml_node currentNode, Arpeg *arpeg); + void WriteBeamSpan(pugi::xml_node currentNode, BeamSpan *beamSpan); void WriteBracketSpan(pugi::xml_node currentNode, BracketSpan *bracketSpan); void WriteBreath(pugi::xml_node currentNode, Breath *breath); void WriteCaesura(pugi::xml_node currentNode, Caesura *caesura); @@ -686,6 +688,7 @@ class MEIInput : public Input { ///@{ bool ReadAnchoredText(Object *parent, pugi::xml_node anchoredText); bool ReadArpeg(Object *parent, pugi::xml_node arpeg); + bool ReadBeamSpan(Object *parent, pugi::xml_node beamSpan); bool ReadBracketSpan(Object *parent, pugi::xml_node bracketSpan); bool ReadBreath(Object *parent, pugi::xml_node breath); bool ReadCaesura(Object *parent, pugi::xml_node caesura); diff --git a/include/vrv/view.h b/include/vrv/view.h index 6f547fe0051..d409279f5a7 100644 --- a/include/vrv/view.h +++ b/include/vrv/view.h @@ -23,6 +23,7 @@ class Arpeg; class BarLine; class Beam; class BeamSegment; +class BeamSpan; class BracketSpan; class Breath; class Chord; diff --git a/src/beamspan.cpp b/src/beamspan.cpp index 3e16177294d..ff74cceddb1 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -23,12 +23,14 @@ namespace vrv { BeamSpan::BeamSpan() : ControlElement("beamspan-") + , TimePointInterface() , TimeSpanningInterface() , BeamDrawingInterface() , AttColor() , AttBeamedWith() , AttBeamRend() { + RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); RegisterAttClass(ATT_COLOR); RegisterAttClass(ATT_BEAMEDWITH); diff --git a/src/iomei.cpp b/src/iomei.cpp index f206f87322c..538f1217a70 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -23,6 +23,7 @@ #include "arpeg.h" #include "artic.h" #include "beam.h" +#include "beamspan.h" #include "beatrpt.h" #include "bracketspan.h" #include "breath.h" @@ -1709,6 +1710,18 @@ void MEIOutput::WriteArpeg(pugi::xml_node currentNode, Arpeg *arpeg) arpeg->WriteEnclosingChars(currentNode); } +void MEIOutput::WriteBeamSpan(pugi::xml_node currentNode, BeamSpan *beamSpan) +{ + assert(beamSpan); + + WriteControlElement(currentNode, beamSpan); + WriteTimePointInterface(currentNode, beamSpan); + WriteTimeSpanningInterface(currentNode, beamSpan); + beamSpan->WriteColor(currentNode); + beamSpan->WriteBeamedWith(currentNode); + beamSpan->WriteBeamRend(currentNode); +} + void MEIOutput::WriteBracketSpan(pugi::xml_node currentNode, BracketSpan *bracketSpan) { assert(bracketSpan); @@ -4936,6 +4949,22 @@ bool MEIInput::ReadArpeg(Object *parent, pugi::xml_node arpeg) return true; } +bool MEIInput::ReadBeamSpan(Object *parent, pugi::xml_node beamSpan) +{ + BeamSpan *vrvBeamSpan = new BeamSpan(); + ReadControlElement(beamSpan, vrvBeamSpan); + + ReadTimePointInterface(beamSpan, vrvBeamSpan); + ReadTimeSpanningInterface(beamSpan, vrvBeamSpan); + vrvBeamSpan->ReadColor(beamSpan); + vrvBeamSpan->ReadBeamedWith(beamSpan); + vrvBeamSpan->ReadBeamRend(beamSpan); + + parent->AddChild(vrvBeamSpan); + ReadUnsupportedAttr(beamSpan, vrvBeamSpan); + return true; +} + bool MEIInput::ReadBracketSpan(Object *parent, pugi::xml_node bracketSpan) { BracketSpan *vrvBracketSpan = new BracketSpan(); diff --git a/src/system.cpp b/src/system.cpp index 3e992c6c005..1ccb5ca6916 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -940,6 +940,9 @@ int System::AdjustFloatingPositioners(FunctorParams *functorParams) adjustFloatingPositionerGrpsParams.m_place = STAFFREL_below; m_systemAligner.Process(&adjustFloatingPositionerGrps, &adjustFloatingPositionerGrpsParams); + params->m_classId = BEAMSPAN; + m_systemAligner.Process(params->m_functor, params); + params->m_classId = BRACKETSPAN; m_systemAligner.Process(params->m_functor, params); From 169e298c4c80b1bc98c24e22ddfc5bec091e6782 Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 7 Sep 2020 18:40:47 +0300 Subject: [PATCH 358/403] Add calls to read/write MEI for beamSpan and remove rendant inheritance - removed TimePointingInterface since it's redundant - replaced previous ReadBeamSpanAsBeam call with proper ReadBeamSpan call; added call for writing as well - added getters for interfaces --- include/vrv/beamspan.h | 9 ++++++++- src/beamspan.cpp | 2 -- src/iomei.cpp | 9 +++++---- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/include/vrv/beamspan.h b/include/vrv/beamspan.h index e229a97327b..d6d92dae267 100644 --- a/include/vrv/beamspan.h +++ b/include/vrv/beamspan.h @@ -24,7 +24,6 @@ namespace vrv { * This class models the MEI element. */ class BeamSpan : public ControlElement, - public TimePointInterface, public TimeSpanningInterface, public BeamDrawingInterface, public AttColor, @@ -44,6 +43,14 @@ class BeamSpan : public ControlElement, virtual ClassId GetClassId() const { return BEAMSPAN; } ///@} + /** + * @name Getter to interfaces + */ + ///@{ + virtual TimePointInterface *GetTimePointInterface() { return dynamic_cast(this); } + virtual TimeSpanningInterface *GetTimeSpanningInterface() { return dynamic_cast(this); } + ////@} + private: // public: diff --git a/src/beamspan.cpp b/src/beamspan.cpp index ff74cceddb1..3e16177294d 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -23,14 +23,12 @@ namespace vrv { BeamSpan::BeamSpan() : ControlElement("beamspan-") - , TimePointInterface() , TimeSpanningInterface() , BeamDrawingInterface() , AttColor() , AttBeamedWith() , AttBeamRend() { - RegisterInterface(TimePointInterface::GetAttClasses(), TimePointInterface::IsInterface()); RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); RegisterAttClass(ATT_COLOR); RegisterAttClass(ATT_BEAMEDWITH); diff --git a/src/iomei.cpp b/src/iomei.cpp index 538f1217a70..1bc95f732f2 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -432,6 +432,10 @@ bool MEIOutput::WriteObjectInternal(Object *object, bool useCustomScoreDef) m_currentNode = m_currentNode.append_child("arpeg"); this->WriteArpeg(m_currentNode, vrv_cast(object)); } + else if (object->Is(BEAMSPAN)) { + m_currentNode = m_currentNode.append_child("beamSpan"); + WriteBeamSpan(m_currentNode, dynamic_cast(object)); + } else if (object->Is(BRACKETSPAN)) { m_currentNode = m_currentNode.append_child("bracketSpan"); this->WriteBracketSpan(m_currentNode, vrv_cast(object)); @@ -4778,9 +4782,7 @@ bool MEIInput::ReadMeasureChildren(Object *parent, pugi::xml_node parentNode) success = this->ReadArpeg(parent, current); } else if (std::string(current.name()) == "beamSpan") { - if (!ReadBeamSpanAsBeam(dynamic_cast(parent), current)) { - LogWarning(" is not readable as and will be ignored"); - } + ReadBeamSpan(parent, current); } else if (std::string(current.name()) == "bracketSpan") { success = this->ReadBracketSpan(parent, current); @@ -4954,7 +4956,6 @@ bool MEIInput::ReadBeamSpan(Object *parent, pugi::xml_node beamSpan) BeamSpan *vrvBeamSpan = new BeamSpan(); ReadControlElement(beamSpan, vrvBeamSpan); - ReadTimePointInterface(beamSpan, vrvBeamSpan); ReadTimeSpanningInterface(beamSpan, vrvBeamSpan); vrvBeamSpan->ReadColor(beamSpan); vrvBeamSpan->ReadBeamedWith(beamSpan); From e96b40fcdb2c2918b307a225a3afa8fd3c157d6d Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 8 Sep 2020 12:00:10 +0300 Subject: [PATCH 359/403] Initial implementation of the beamSpan logic - Added DrawBeamSpan method for drawing corresponding element - Changed FindAllBetweenParams functor to allow find only top level children without looking to the lowest node available - Added IsInBeamSpan method and added it alongside checks for the IsInBeam for the sake of drawing stems, flags and other possible conditions Implementation leverages existing logic for the beamSegment - all elements between start and end of the beamSpan are collected and passed to the DrawingInterface for processing. --- include/vrv/functorparams.h | 3 +++ include/vrv/layerelement.h | 2 ++ include/vrv/view.h | 1 + src/chord.cpp | 4 ++-- src/layerelement.cpp | 33 +++++++++++++++++++++++++++++++++ src/note.cpp | 21 +++++++++++---------- src/object.cpp | 1 + src/view_beam.cpp | 30 ++++++++++++++++++++++++++++++ src/view_control.cpp | 7 ++++++- src/view_page.cpp | 4 ++++ 10 files changed, 93 insertions(+), 13 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 1237590f832..33450baa8d7 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1363,6 +1363,7 @@ class FillStaffCurrentTimeSpanningParams : public FunctorParams { * member 1: an array of all matching objects * member 2: the start object range * member 3: the end object range + * member 4: flag to decide whether to add children of the found elements **/ class FindAllBetweenParams : public FunctorParams { @@ -1373,11 +1374,13 @@ class FindAllBetweenParams : public FunctorParams { m_elements = elements; m_start = start; m_end = end; + m_includeChildren = true; } Comparison *m_comparison; ListOfObjects *m_elements; Object *m_start; Object *m_end; + bool m_includeChildren; }; //---------------------------------------------------------------------------- diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index a25ac42d67e..f7529770a7d 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -126,6 +126,8 @@ class LayerElement : public Object, Beam *IsInBeam(); ///@} + bool IsInBeamSpan() const; + /** * @name Get and set the layerN drawing value */ diff --git a/include/vrv/view.h b/include/vrv/view.h index d409279f5a7..56f8a6d6ccc 100644 --- a/include/vrv/view.h +++ b/include/vrv/view.h @@ -389,6 +389,7 @@ class View { ///@{ void DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure); void DrawFTrem(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure); + void DrawBeamSpan(DeviceContext *dc, BeamSpan *beamSpan, Measure *measure); ///@} /** diff --git a/src/chord.cpp b/src/chord.cpp index e5e31147f08..a8a40a9f925 100644 --- a/src/chord.cpp +++ b/src/chord.cpp @@ -670,7 +670,7 @@ int Chord::CalcStem(FunctorParams *functorParams) // Stems have been calculated previously in beam or fTrem - siblings because flags do not need to // be processed either - if (this->IsInBeam() || this->IsInFTrem()) { + if (IsInBeam() || IsInFTrem() || IsInBeamSpan()) { return FUNCTOR_SIBLINGS; } @@ -814,7 +814,7 @@ int Chord::PrepareLayerElementParts(FunctorParams *functorParams) currentStem->IsVirtual(true); } - if ((this->GetActualDur() > DUR_4) && !this->IsInBeam() && !this->IsInFTrem()) { + if ((GetActualDur() > DUR_4) && !IsInBeam() && !IsInBeamSpan() && !IsInFTrem()) { // We should have a stem at this stage assert(currentStem); if (!currentFlag) { diff --git a/src/layerelement.cpp b/src/layerelement.cpp index e32485ea3bc..399ffd60a14 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -18,6 +18,7 @@ #include "accid.h" #include "barline.h" #include "beam.h" +#include "beamspan.h" #include "beatrpt.h" #include "btrem.h" #include "chord.h" @@ -236,6 +237,7 @@ Beam *LayerElement::IsInBeam() return NULL; } + int LayerElement::GetOriginalLayerN() { int layerN = this->GetAlignmentLayerN(); @@ -243,6 +245,37 @@ int LayerElement::GetOriginalLayerN() layerN = vrv_cast(this->GetFirstAncestor(LAYER))->GetN(); } return layerN; + +bool LayerElement::IsInBeamSpan() const +{ + if (!this->Is({ CHORD, NOTE })) return false; + + Measure *parentMeasure = vrv_cast(GetFirstAncestor(MEASURE)); + if (!parentMeasure) return false; + + Layer *parentLayer = vrv_cast(GetFirstAncestor(LAYER)); + if (!parentLayer) return false; + + // find all beamspans within current measure, stop processing if there are none + ClassIdComparison beamSpanId(BEAMSPAN); + ListOfObjects beamSpanElements; + parentMeasure->FindAllDescendantByComparison(&beamSpanElements, &beamSpanId); + + if (beamSpanElements.empty()) return false; + + // try to figure whether current element belongs to any of the beamSpans + for (auto object : beamSpanElements) { + BeamSpan *beamSpan = vrv_cast(object); + if (!beamSpan) continue; + + ClassIdsComparison classIds({ NOTE, CHORD }); + ListOfObjects elements; + parentLayer->FindAllDescendantBetween( + &elements, &classIds, beamSpan->GetStart(), beamSpan->GetEnd(), true, false); + if (std::find(elements.begin(), elements.end(), this) != elements.end()) return true; + } + + return false; } Staff *LayerElement::GetAncestorStaff(const StaffSearch strategy, const bool assertExistence) const diff --git a/src/note.cpp b/src/note.cpp index 843b831b025..68f6cb7c665 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -428,8 +428,9 @@ int Note::CalcStemLenInThirdUnits(Staff *staff, data_STEMDIRECTION stemDir) } // Limit shortening with duration shorter than quarter not when not in a beam - if ((this->GetDrawingDur() > DUR_4) && !this->IsInBeam()) { - if (stemDir == STEMDIRECTION_up) { + + if ((this->GetDrawingDur() > DUR_4) && !this->IsInBeam() && !this->IsInBeamSpan()) { + if (this->GetDrawingStemDir() == STEMDIRECTION_up) { shortening = std::min(4, shortening); } else { @@ -971,9 +972,9 @@ int Note::CalcStem(FunctorParams *functorParams) return FUNCTOR_SIBLINGS; } - // Stems have been calculated previously in Beam or fTrem - // Return to siblings because flags do not need to be processed either in that case - if ((this->IsInBeam() || this->IsInFTrem())) { + // Stems have been calculated previously in Beam or fTrem - siblings because flags do not need to + // be processed either + if (IsInBeam() || IsInFTrem() || IsInBeamSpan()) { return FUNCTOR_SIBLINGS; } @@ -1179,8 +1180,8 @@ int Note::CalcDots(FunctorParams *functorParams) assert(dots); // Stem up, shorter than 4th and not in beam - if ((this->GetDots() != 0) && (params->m_chordStemDir == STEMDIRECTION_up) && (this->GetDrawingDur() > DUR_4) - && !this->IsInBeam()) { + if ((GetDots() != 0) && (params->m_chordStemDir == STEMDIRECTION_up) && (GetDrawingDur() > DUR_4) && !IsInBeam() + && !IsInBeamSpan()) { // Shift according to the flag width if the top note is not flipped if ((this == chord->GetTopNote()) && !this->GetFlippedNotehead()) { // HARDCODED @@ -1203,8 +1204,8 @@ int Note::CalcDots(FunctorParams *functorParams) if (const int shift = dots->GetFlagShift(); shift) { flagShift += shift; } - else if ((this->GetDrawingStemDir() == STEMDIRECTION_up) && (!this->IsInBeam()) - && (this->GetDrawingStemLen() < 3) && (IsDotOverlappingWithFlag(params->m_doc, staffSize, isDotShifted))) { + else if ((this->GetDrawingStemDir() == STEMDIRECTION_up) && !this->IsInBeam() && (this->GetDrawingStemLen() < 3) + && !this->IsInBeamSpan() && (this->IsDotOverlappingWithFlag(params->m_doc, staffSize, isDotShifted))) { // HARDCODED const int shift = params->m_doc->GetGlyphWidth(SMUFL_E240_flag8thUp, staffSize, drawingCueSize) * 0.8; flagShift += shift; @@ -1287,7 +1288,7 @@ int Note::PrepareLayerElementParts(FunctorParams *functorParams) } if ((this->GetActualDur() > DUR_4) && !this->IsInBeam() && !this->IsInFTrem() && !this->IsChordTone() - && !this->IsMensuralDur() && !this->IsTabGrpNote()) { + && !this->IsMensuralDur() && !this->IsTabGrpNote() && !this->IsInBeamSpan()) { // We should have a stem at this stage assert(currentStem); if (!currentFlag) { diff --git a/src/object.cpp b/src/object.cpp index 3f0b17054d3..60dd0598e86 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -1423,6 +1423,7 @@ int Object::FindAllBetween(FunctorParams *functorParams) // evaluate by applying the Comparison operator() if ((*params->m_comparison)(this)) { params->m_elements->push_back(this); + if ((params->m_end != this) && !params->m_includeChildren) return FUNCTOR_SIBLINGS; } // We have reached the end of the range diff --git a/src/view_beam.cpp b/src/view_beam.cpp index 2b74f9d8520..a3549c46770 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -17,6 +17,8 @@ //---------------------------------------------------------------------------- #include "beam.h" +#include "beamspan.h" +#include "comparison.h" #include "devicecontext.h" #include "doc.h" #include "ftrem.h" @@ -418,4 +420,32 @@ void View::DrawBeamSegment(DeviceContext *dc, BeamSegment *beamSegment, BeamDraw } // end of drawing partial bars } +void View::DrawBeamSpan(DeviceContext *dc, BeamSpan *beamSpan, Measure *measure) +{ + assert(dc); + assert(beamSpan); + assert(measure); + + Layer *layer = vrv_cast(beamSpan->GetStart()->GetFirstAncestor(LAYER)); + Staff *staff = vrv_cast(beamSpan->GetStart()->GetFirstAncestor(STAFF)); + if (!layer || !staff) return; + + // find all elements between startId and endId of the beamSpan + ClassIdsComparison classIds({ NOTE, CHORD }); + ListOfObjects objects; + layer->FindAllDescendantBetween(&objects, &classIds, beamSpan->GetStart(), beamSpan->GetEnd(), true, false); + + // Initialize coordinates and caclculate beam segment based on the array of element for beamSpan + ArrayOfObjects beamSpanElements(objects.begin(), objects.end()); + beamSpan->InitCoords(&beamSpanElements, staff, beamSpan->GetPlace()); + beamSpan->m_beamSegment.InitCoordRefs(&beamSpan->m_beamElementCoords); + beamSpan->m_drawingPlace = beamSpan->GetPlace(); + beamSpan->m_beamSegment.CalcBeam(layer, staff, m_doc, beamSpan, beamSpan->GetPlace()); + + // Draw corresponding beam segment + dc->StartGraphic(beamSpan, "", beamSpan->GetUuid()); + DrawBeamSegment(dc, &beamSpan->m_beamSegment, beamSpan, layer, staff, measure); + dc->EndGraphic(beamSpan, this); +} + } // namespace vrv diff --git a/src/view_control.cpp b/src/view_control.cpp index b7459a12e58..66317f53e94 100644 --- a/src/view_control.cpp +++ b/src/view_control.cpp @@ -17,6 +17,7 @@ #include "arpeg.h" #include "bboxdevicecontext.h" +#include "beamspan.h" #include "bracketspan.h" #include "breath.h" #include "clef.h" @@ -75,7 +76,7 @@ void View::DrawControlElement(DeviceContext *dc, ControlElement *element, Measur assert(element); // For dir, dynam, fermata, and harm, we do not consider the @tstamp2 for rendering - if (element->Is({ BRACKETSPAN, FIGURE, GLISS, HAIRPIN, LV, OCTAVE, PHRASE, PITCHINFLECTION, SLUR, TIE })) { + if (element->Is({ BEAMSPAN, BRACKETSPAN, FIGURE, GLISS, HAIRPIN, LV, OCTAVE, PHRASE, PITCHINFLECTION, SLUR, TIE })) { // create placeholder dc->StartGraphic(element, "", element->GetUuid()); dc->EndGraphic(element, this); @@ -315,6 +316,10 @@ void View::DrawTimeSpanningElement(DeviceContext *dc, Object *element, System *s // cast to F check in DrawFConnector this->DrawFConnector(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); } + else if (element->Is(BEAMSPAN)) { + // cast to BeamSpan check in DrawBeamSpan + DrawBeamSpan(dc, dynamic_cast(element), measure); + } else if (element->Is(BRACKETSPAN)) { // cast to BracketSpan check in DrawBracketSpan this->DrawBracketSpan(dc, dynamic_cast(element), x1, x2, *staffIter, spanningType, graphic); diff --git a/src/view_page.cpp b/src/view_page.cpp index eb4687dcb5d..3bf06045c1b 100644 --- a/src/view_page.cpp +++ b/src/view_page.cpp @@ -202,6 +202,7 @@ void View::DrawSystem(DeviceContext *dc, System *system) this->DrawSystemChildren(dc, system, system); this->DrawSystemList(dc, system, SYL); + this->DrawSystemList(dc, system, BEAMSPAN); this->DrawSystemList(dc, system, BRACKETSPAN); this->DrawSystemList(dc, system, DYNAM); this->DrawSystemList(dc, system, DIR); @@ -230,6 +231,9 @@ void View::DrawSystemList(DeviceContext *dc, System *system, const ClassId class ArrayOfObjects::iterator iter; for (iter = drawingList->begin(); iter != drawingList->end(); ++iter) { + if ((*iter)->Is(classId) && (classId == BEAMSPAN)) { + DrawTimeSpanningElement(dc, *iter, system); + } if ((*iter)->Is(classId) && (classId == BRACKETSPAN)) { this->DrawTimeSpanningElement(dc, *iter, system); } From cab469d51ede12699b7b171ad0cd9a23437fe09b Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 8 Sep 2020 16:29:55 +0300 Subject: [PATCH 360/403] Update beamSpan logic - fixed beamSpan to properly handle sloped beams by adding corresponding functor - added call to reset metadata for beam segment --- include/vrv/beamspan.h | 9 +++++++++ src/beamspan.cpp | 28 ++++++++++++++++++++++++++++ src/view_beam.cpp | 10 +--------- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/include/vrv/beamspan.h b/include/vrv/beamspan.h index d6d92dae267..54af8acd44f 100644 --- a/include/vrv/beamspan.h +++ b/include/vrv/beamspan.h @@ -51,6 +51,15 @@ class BeamSpan : public ControlElement, virtual TimeSpanningInterface *GetTimeSpanningInterface() { return dynamic_cast(this); } ////@} + //----------// + // Functors // + //----------// + + /** + * See Object::CalcStem + */ + virtual int CalcStem(FunctorParams *functorParams); + private: // public: diff --git a/src/beamspan.cpp b/src/beamspan.cpp index 3e16177294d..75c9207c63e 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -13,6 +13,10 @@ //---------------------------------------------------------------------------- +#include "comparison.h" +#include "functorparams.h" +#include "layer.h" +#include "staff.h" #include "vrv.h" namespace vrv { @@ -49,4 +53,28 @@ void BeamSpan::Reset() ResetBeamRend(); } +int BeamSpan::CalcStem(FunctorParams *functorParams) +{ + CalcStemParams *params = vrv_params_cast(functorParams); + assert(params); + + Layer *layer = vrv_cast(GetStart()->GetFirstAncestor(LAYER)); + Staff *staff = vrv_cast(GetStart()->GetFirstAncestor(STAFF)); + if (!layer || !staff) return FUNCTOR_SIBLINGS; + + // find all elements between startId and endId of the beamSpan + ClassIdsComparison classIds({ NOTE, CHORD }); + ListOfObjects objects; + layer->FindAllDescendantBetween(&objects, &classIds, GetStart(), GetEnd(), true, false); + + // Initialize coordinates and caclculate beam segment based on the array of element for beamSpan + ArrayOfObjects beamSpanElements(objects.begin(), objects.end()); + InitCoords(&beamSpanElements, staff, GetPlace()); + + m_beamSegment.InitCoordRefs(&m_beamElementCoords); + m_beamSegment.CalcBeam(layer, staff, params->m_doc, this, GetPlace()); + + return FUNCTOR_CONTINUE; +} + } // namespace vrv \ No newline at end of file diff --git a/src/view_beam.cpp b/src/view_beam.cpp index a3549c46770..e7da408aa71 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -430,16 +430,8 @@ void View::DrawBeamSpan(DeviceContext *dc, BeamSpan *beamSpan, Measure *measure) Staff *staff = vrv_cast(beamSpan->GetStart()->GetFirstAncestor(STAFF)); if (!layer || !staff) return; - // find all elements between startId and endId of the beamSpan - ClassIdsComparison classIds({ NOTE, CHORD }); - ListOfObjects objects; - layer->FindAllDescendantBetween(&objects, &classIds, beamSpan->GetStart(), beamSpan->GetEnd(), true, false); - - // Initialize coordinates and caclculate beam segment based on the array of element for beamSpan - ArrayOfObjects beamSpanElements(objects.begin(), objects.end()); - beamSpan->InitCoords(&beamSpanElements, staff, beamSpan->GetPlace()); + beamSpan->m_beamSegment.Reset(); beamSpan->m_beamSegment.InitCoordRefs(&beamSpan->m_beamElementCoords); - beamSpan->m_drawingPlace = beamSpan->GetPlace(); beamSpan->m_beamSegment.CalcBeam(layer, staff, m_doc, beamSpan, beamSpan->GetPlace()); // Draw corresponding beam segment From 00b923ee900c12ec54a1a619295f12f42cee6180 Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 10 Sep 2020 15:04:03 +0300 Subject: [PATCH 361/403] Implement cross-measure support for the beamSpans - added logic for handling cross-measure beamSpans - split PreparePlist into two parts - for preparation and processing; this way elements are going to be added in the correct order (as they are described in the Plist and as they are ordered in the MEI file) - rearranged inheritance list of the beamSpan some more --- include/vrv/beamspan.h | 20 ++++++-- include/vrv/layerelement.h | 5 ++ include/vrv/object.h | 9 ++++ src/beamspan.cpp | 101 ++++++++++++++++++++++++++++++++----- src/doc.cpp | 11 +++- src/iomei.cpp | 7 +-- src/layerelement.cpp | 29 ++--------- src/object.cpp | 10 ++++ 8 files changed, 144 insertions(+), 48 deletions(-) diff --git a/include/vrv/beamspan.h b/include/vrv/beamspan.h index 54af8acd44f..bb3c9dbbfc8 100644 --- a/include/vrv/beamspan.h +++ b/include/vrv/beamspan.h @@ -12,10 +12,14 @@ #include "beam.h" #include "controlelement.h" #include "drawinginterface.h" +#include "plistinterface.h" #include "timeinterface.h" namespace vrv { +class Layer; +class Staff; + //---------------------------------------------------------------------------- // BeamSpan //---------------------------------------------------------------------------- @@ -24,11 +28,12 @@ namespace vrv { * This class models the MEI element. */ class BeamSpan : public ControlElement, - public TimeSpanningInterface, public BeamDrawingInterface, - public AttColor, + public PlistInterface, + public TimeSpanningInterface, public AttBeamedWith, - public AttBeamRend { + public AttBeamRend, + public AttColor { public: /** * @name Constructors, destructors, and other standard methods @@ -47,10 +52,13 @@ class BeamSpan : public ControlElement, * @name Getter to interfaces */ ///@{ + virtual PlistInterface *GetPlistInterface() { return dynamic_cast(this); } virtual TimePointInterface *GetTimePointInterface() { return dynamic_cast(this); } virtual TimeSpanningInterface *GetTimeSpanningInterface() { return dynamic_cast(this); } ////@} + ArrayOfObjects GetBeamSpanElementList(Layer* layer, Staff* staff); + //----------// // Functors // //----------// @@ -60,6 +68,11 @@ class BeamSpan : public ControlElement, */ virtual int CalcStem(FunctorParams *functorParams); + /** + * See Object::ResolveBeamSpanElements + */ + virtual int ResolveBeamSpanElements(FunctorParams *); + private: // public: @@ -68,6 +81,7 @@ class BeamSpan : public ControlElement, private: // + ArrayOfObjects m_beamedElements; }; } // namespace vrv diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index f7529770a7d..88ba1714234 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -484,6 +484,11 @@ class LayerElement : public Object, Staff *m_crossStaff; Layer *m_crossLayer; + /** + * This stores a pointer to the beamSpan (if any) that covers this LayerElement + */ + Object *m_referencedElement; + protected: Alignment *m_alignment; diff --git a/include/vrv/object.h b/include/vrv/object.h index 54df51fbb22..f3b2f573622 100644 --- a/include/vrv/object.h +++ b/include/vrv/object.h @@ -1070,6 +1070,7 @@ class Object : public BoundingBox { */ ///@{ virtual int PreparePlist(FunctorParams *functorParams); + virtual int ProcessPlist(FunctorParams *functorParams); ///@} /** @@ -1281,6 +1282,14 @@ class Object : public BoundingBox { virtual int PrepareMIDI(FunctorParams *) { return FUNCTOR_CONTINUE; } ///@} + /** + * Get the list of referenced elements for the beamSpan as well as set referenced + * object for those elements to beamSpan containing them. + */ + ///@{ + virtual int ResolveBeamSpanElements(FunctorParams *) { return FUNCTOR_CONTINUE; } + ///@} + /** * Export the object to a MidiFile */ diff --git a/src/beamspan.cpp b/src/beamspan.cpp index 75c9207c63e..d628952cbbc 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -16,6 +16,7 @@ #include "comparison.h" #include "functorparams.h" #include "layer.h" +#include "measure.h" #include "staff.h" #include "vrv.h" @@ -27,16 +28,19 @@ namespace vrv { BeamSpan::BeamSpan() : ControlElement("beamspan-") - , TimeSpanningInterface() , BeamDrawingInterface() - , AttColor() + , PlistInterface() + , TimeSpanningInterface() , AttBeamedWith() , AttBeamRend() + , AttColor() { + RegisterInterface(PlistInterface::GetAttClasses(), PlistInterface::IsInterface()); RegisterInterface(TimeSpanningInterface::GetAttClasses(), TimeSpanningInterface::IsInterface()); - RegisterAttClass(ATT_COLOR); RegisterAttClass(ATT_BEAMEDWITH); RegisterAttClass(ATT_BEAMREND); + RegisterAttClass(ATT_COLOR); + RegisterAttClass(ATT_PLIST); Reset(); } @@ -46,13 +50,60 @@ BeamSpan::~BeamSpan() {} void BeamSpan::Reset() { ControlElement::Reset(); - TimeSpanningInterface::Reset(); BeamDrawingInterface::Reset(); - ResetColor(); + PlistInterface::Reset(); + TimeSpanningInterface::Reset(); ResetBeamedWith(); ResetBeamRend(); + ResetColor(); + ResetPlist(); } +ArrayOfObjects BeamSpan::GetBeamSpanElementList(Layer *layer, Staff *staff) +{ + // find all elements between startId and endId of the beamSpan + ClassIdsComparison classIds({ NOTE, CHORD }); + ListOfObjects objects; + layer->FindAllDescendantBetween(&objects, &classIds, GetStart(), GetEnd(), true, false); + + ArrayOfObjects beamSpanElements(objects.begin(), objects.end()); + // If last element is not equal to the end, there is high chance that this beamSpan is cross-measure. + // Look for the same N-staff N-layer in next measure and try finding end there + if (beamSpanElements.back() != GetEnd()) { + Measure *measure = vrv_cast(GetStart()->GetFirstAncestor(MEASURE)); + Object *parent = measure->GetParent(); + + const int index = parent->GetChildIndex(measure); + Measure *nextMeasure = vrv_cast(parent->GetChild(index + 1)); + if (nextMeasure) { + AttNIntegerComparison snc(STAFF, staff->GetN()); + Staff *nextStaff = vrv_cast(nextMeasure->FindDescendantByComparison(&snc)); + if (nextStaff) { + AttNIntegerComparison lnc(LAYER, layer->GetN()); + Layer *nextStaffLayer = vrv_cast(nextStaff->FindDescendantByComparison(&lnc)); + if (nextStaffLayer) { + // find all elements between startId and endId of the beamSpan + ClassIdsComparison classIds({ NOTE, CHORD }); + ListOfObjects nextLayerObjects; + // pass NULL as starting element to add all elements until end is reached + nextStaffLayer->FindAllDescendantBetween(&nextLayerObjects, &classIds, NULL, GetEnd(), true, false); + // Handle only next measure for the time being + if (nextLayerObjects.back() == GetEnd()) { + beamSpanElements.insert( + beamSpanElements.end(), nextLayerObjects.begin(), nextLayerObjects.end()); + } + } + } + } + } + + return beamSpanElements; +} + +//----------// +// Functors // +//----------// + int BeamSpan::CalcStem(FunctorParams *functorParams) { CalcStemParams *params = vrv_params_cast(functorParams); @@ -60,16 +111,8 @@ int BeamSpan::CalcStem(FunctorParams *functorParams) Layer *layer = vrv_cast(GetStart()->GetFirstAncestor(LAYER)); Staff *staff = vrv_cast(GetStart()->GetFirstAncestor(STAFF)); - if (!layer || !staff) return FUNCTOR_SIBLINGS; - - // find all elements between startId and endId of the beamSpan - ClassIdsComparison classIds({ NOTE, CHORD }); - ListOfObjects objects; - layer->FindAllDescendantBetween(&objects, &classIds, GetStart(), GetEnd(), true, false); - // Initialize coordinates and caclculate beam segment based on the array of element for beamSpan - ArrayOfObjects beamSpanElements(objects.begin(), objects.end()); - InitCoords(&beamSpanElements, staff, GetPlace()); + InitCoords(&m_beamedElements, staff, GetPlace()); m_beamSegment.InitCoordRefs(&m_beamElementCoords); m_beamSegment.CalcBeam(layer, staff, params->m_doc, this, GetPlace()); @@ -77,4 +120,34 @@ int BeamSpan::CalcStem(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int BeamSpan::ResolveBeamSpanElements(FunctorParams *functorParams) +{ + FunctorDocParams *params = vrv_params_cast(functorParams); + assert(params); + + if (!m_beamedElements.empty()) return FUNCTOR_CONTINUE; + + if (HasPlist()) { + m_beamedElements = *GetRefs(); + } + else { + Layer *layer = vrv_cast(GetStart()->GetFirstAncestor(LAYER)); + Staff *staff = vrv_cast(GetStart()->GetFirstAncestor(STAFF)); + if (!layer || !staff) return FUNCTOR_SIBLINGS; + + m_beamedElements = GetBeamSpanElementList(layer, staff); + } + + // set current beamSpan as referencedElement for all beamed elemenents (for the + // sake of figuring if corresponding element is in beamSpan) + for (auto element : m_beamedElements) { + LayerElement *layerElem = vrv_cast(element); + if (!layerElem) continue; + + layerElem->m_referencedElement = this; + } + + return FUNCTOR_CONTINUE; +} + } // namespace vrv \ No newline at end of file diff --git a/src/doc.cpp b/src/doc.cpp index ac1a3abf5ef..d4f1549f630 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -548,10 +548,11 @@ void Doc::PrepareDrawing() Functor preparePlist(&Object::PreparePlist); this->Process(&preparePlist, &preparePlistParams); - // If we have some left process again backward. + // Process plist after all pairs has been collected if (!preparePlistParams.m_interfaceUuidPairs.empty()) { preparePlistParams.m_fillList = false; - this->Process(&preparePlist, &preparePlistParams, NULL, NULL, UNLIMITED_DEPTH, BACKWARD); + Functor processPlist(&Object::ProcessPlist); + this->Process(&processPlist, &preparePlistParams); } // If some are still there, then it is probably an issue in the encoding @@ -568,6 +569,12 @@ void Doc::PrepareDrawing() Functor prepareCrossStaffEnd(&Object::PrepareCrossStaffEnd); this->Process(&prepareCrossStaff, &prepareCrossStaffParams, &prepareCrossStaffEnd); + /************ Resolve beamspan elements ***********/ + + FunctorDocParams functorDocParams(this); + Functor resolveBeamSpanElements(&Object::ResolveBeamSpanElements); + this->Process(&resolveBeamSpanElements, &functorDocParams); + /************ Prepare processing by staff/layer/verse ************/ // We need to populate processing lists for processing the document by Layer (for matching @tie) and diff --git a/src/iomei.cpp b/src/iomei.cpp index 1bc95f732f2..f0eb7f3fd45 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -1719,11 +1719,11 @@ void MEIOutput::WriteBeamSpan(pugi::xml_node currentNode, BeamSpan *beamSpan) assert(beamSpan); WriteControlElement(currentNode, beamSpan); - WriteTimePointInterface(currentNode, beamSpan); + WritePlistInterface(currentNode, beamSpan); WriteTimeSpanningInterface(currentNode, beamSpan); - beamSpan->WriteColor(currentNode); beamSpan->WriteBeamedWith(currentNode); beamSpan->WriteBeamRend(currentNode); + beamSpan->WriteColor(currentNode); } void MEIOutput::WriteBracketSpan(pugi::xml_node currentNode, BracketSpan *bracketSpan) @@ -4956,10 +4956,11 @@ bool MEIInput::ReadBeamSpan(Object *parent, pugi::xml_node beamSpan) BeamSpan *vrvBeamSpan = new BeamSpan(); ReadControlElement(beamSpan, vrvBeamSpan); + ReadPlistInterface(beamSpan, vrvBeamSpan); ReadTimeSpanningInterface(beamSpan, vrvBeamSpan); - vrvBeamSpan->ReadColor(beamSpan); vrvBeamSpan->ReadBeamedWith(beamSpan); vrvBeamSpan->ReadBeamRend(beamSpan); + vrvBeamSpan->ReadColor(beamSpan); parent->AddChild(vrvBeamSpan); ReadUnsupportedAttr(beamSpan, vrvBeamSpan); diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 399ffd60a14..28528a536b1 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -130,6 +130,7 @@ void LayerElement::Reset() m_crossStaff = NULL; m_crossLayer = NULL; + m_referencedElement = NULL; } LayerElement::~LayerElement() {} @@ -145,6 +146,7 @@ void LayerElement::CloneReset() m_crossStaff = NULL; m_crossLayer = NULL; + m_referencedElement = NULL; } LayerElement *LayerElement::ThisOrSameasAsLink() @@ -250,32 +252,7 @@ bool LayerElement::IsInBeamSpan() const { if (!this->Is({ CHORD, NOTE })) return false; - Measure *parentMeasure = vrv_cast(GetFirstAncestor(MEASURE)); - if (!parentMeasure) return false; - - Layer *parentLayer = vrv_cast(GetFirstAncestor(LAYER)); - if (!parentLayer) return false; - - // find all beamspans within current measure, stop processing if there are none - ClassIdComparison beamSpanId(BEAMSPAN); - ListOfObjects beamSpanElements; - parentMeasure->FindAllDescendantByComparison(&beamSpanElements, &beamSpanId); - - if (beamSpanElements.empty()) return false; - - // try to figure whether current element belongs to any of the beamSpans - for (auto object : beamSpanElements) { - BeamSpan *beamSpan = vrv_cast(object); - if (!beamSpan) continue; - - ClassIdsComparison classIds({ NOTE, CHORD }); - ListOfObjects elements; - parentLayer->FindAllDescendantBetween( - &elements, &classIds, beamSpan->GetStart(), beamSpan->GetEnd(), true, false); - if (std::find(elements.begin(), elements.end(), this) != elements.end()) return true; - } - - return false; + return m_referencedElement != NULL; } Staff *LayerElement::GetAncestorStaff(const StaffSearch strategy, const bool assertExistence) const diff --git a/src/object.cpp b/src/object.cpp index 60dd0598e86..e233249aea2 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -1575,6 +1575,16 @@ int Object::PreparePlist(FunctorParams *functorParams) return interface->InterfacePreparePlist(functorParams, this); } + return FUNCTOR_CONTINUE; +} + +int Object::ProcessPlist(FunctorParams* functorParams) +{ + PreparePlistParams *params = vrv_params_cast(functorParams); + assert(params); + + if (!IsLayerElement()) return FUNCTOR_CONTINUE; + std::string uuid = this->GetUuid(); auto i = std::find_if(params->m_interfaceUuidPairs.begin(), params->m_interfaceUuidPairs.end(), [uuid](std::pair pair) { return (pair.second == uuid); }); From 8d856e933057e545896121b3390065a8251fd41d Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 14 Sep 2020 18:17:16 +0300 Subject: [PATCH 362/403] Implement cross-staff support for beamSpan - changed how pList was being processed - all data is collected first now and only after that references are set. This ensures that elements are going to be added in the order they are described in the MEI file - changed how crossStaff was detected for beamSpans (for cases when beamSpan starts not in the top staff) --- include/vrv/functorparams.h | 2 +- include/vrv/vrvdef.h | 3 ++- src/beamspan.cpp | 32 ++++++++++++++++++++++++-------- src/doc.cpp | 11 ++++++++--- src/object.cpp | 9 ++++----- src/plistinterface.cpp | 2 +- src/system.cpp | 3 --- 7 files changed, 40 insertions(+), 22 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 33450baa8d7..dbbcdcea24f 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -2079,7 +2079,7 @@ class PrepareMilestonesParams : public FunctorParams { class PreparePlistParams : public FunctorParams { public: PreparePlistParams() { m_fillList = true; } - ArrayOfPlistInterfaceUuidPairs m_interfaceUuidPairs; + ArrayOfPlistInterfaceUuidTuples m_interfaceUuidTuples; bool m_fillList; }; diff --git a/include/vrv/vrvdef.h b/include/vrv/vrvdef.h index e9da8164f14..2df134030ee 100644 --- a/include/vrv/vrvdef.h +++ b/include/vrv/vrvdef.h @@ -13,6 +13,7 @@ #include #include #include +#include #include //---------------------------------------------------------------------------- @@ -328,7 +329,7 @@ typedef std::multimap MapOfLinkingInterfaceUuid typedef std::map MapOfNoteUuidPairs; -typedef std::vector> ArrayOfPlistInterfaceUuidPairs; +typedef std::vector > ArrayOfPlistInterfaceUuidTuples; typedef std::vector ArrayOfCurveSpannedElements; diff --git a/src/beamspan.cpp b/src/beamspan.cpp index d628952cbbc..bb2e0554367 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -122,29 +122,45 @@ int BeamSpan::CalcStem(FunctorParams *functorParams) int BeamSpan::ResolveBeamSpanElements(FunctorParams *functorParams) { - FunctorDocParams *params = vrv_params_cast(functorParams); - assert(params); - if (!m_beamedElements.empty()) return FUNCTOR_CONTINUE; + Layer *layer = vrv_cast(GetStart()->GetFirstAncestor(LAYER)); + Staff *staff = vrv_cast(GetStart()->GetFirstAncestor(STAFF)); + if (!layer || !staff) return FUNCTOR_SIBLINGS; + if (HasPlist()) { m_beamedElements = *GetRefs(); } else { - Layer *layer = vrv_cast(GetStart()->GetFirstAncestor(LAYER)); - Staff *staff = vrv_cast(GetStart()->GetFirstAncestor(STAFF)); - if (!layer || !staff) return FUNCTOR_SIBLINGS; - m_beamedElements = GetBeamSpanElementList(layer, staff); } + // Find whether this beamSpan is crossStaff - if there are beamed elements that belong + // to differen staffs we can consider this beamSpan as such + bool isCrossStaff = false; + for (const auto element : m_beamedElements) { + if (element->GetFirstAncestor(STAFF) != staff) { + isCrossStaff = true; + break; + } + } + // set current beamSpan as referencedElement for all beamed elemenents (for the // sake of figuring if corresponding element is in beamSpan) - for (auto element : m_beamedElements) { + for (const auto element : m_beamedElements) { LayerElement *layerElem = vrv_cast(element); if (!layerElem) continue; layerElem->m_referencedElement = this; + + if (isCrossStaff) { + Layer *elementLayer = vrv_cast(layerElem->GetFirstAncestor(LAYER)); + Staff *elementStaff = vrv_cast(layerElem->GetFirstAncestor(STAFF)); + if (!layer || !staff || layerElem->m_crossStaff) continue; + + layerElem->m_crossStaff = elementStaff; + layerElem->m_crossLayer = elementLayer; + } } return FUNCTOR_CONTINUE; diff --git a/src/doc.cpp b/src/doc.cpp index d4f1549f630..c77cc28f02c 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -549,16 +549,21 @@ void Doc::PrepareDrawing() this->Process(&preparePlist, &preparePlistParams); // Process plist after all pairs has been collected - if (!preparePlistParams.m_interfaceUuidPairs.empty()) { + if (!preparePlistParams.m_interfaceUuidTuples.empty()) { preparePlistParams.m_fillList = false; Functor processPlist(&Object::ProcessPlist); this->Process(&processPlist, &preparePlistParams); + + for (const auto [plistInterface, uuid, objectReference] : preparePlistParams.m_interfaceUuidTuples) { + plistInterface->SetRef(objectReference); + } + preparePlistParams.m_interfaceUuidTuples.clear(); } // If some are still there, then it is probably an issue in the encoding - if (!preparePlistParams.m_interfaceUuidPairs.empty()) { + if (!preparePlistParams.m_interfaceUuidTuples.empty()) { LogWarning( - "%d element(s) with a @plist could match the target", preparePlistParams.m_interfaceUuidPairs.size()); + "%d element(s) with a @plist could match the target", preparePlistParams.m_interfaceUuidTuples.size()); } /************ Resolve cross staff ************/ diff --git a/src/object.cpp b/src/object.cpp index e233249aea2..8792dca6f12 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -1586,11 +1586,10 @@ int Object::ProcessPlist(FunctorParams* functorParams) if (!IsLayerElement()) return FUNCTOR_CONTINUE; std::string uuid = this->GetUuid(); - auto i = std::find_if(params->m_interfaceUuidPairs.begin(), params->m_interfaceUuidPairs.end(), - [uuid](std::pair pair) { return (pair.second == uuid); }); - if (i != params->m_interfaceUuidPairs.end()) { - i->first->SetRef(this); - params->m_interfaceUuidPairs.erase(i); + auto i = std::find_if(params->m_interfaceUuidTuples.begin(), params->m_interfaceUuidTuples.end(), + [uuid](std::tuple tuple) { return (std::get<1>(tuple) == uuid); }); + if (i != params->m_interfaceUuidTuples.end()) { + std::get<2>(*i) = this; } return FUNCTOR_CONTINUE; diff --git a/src/plistinterface.cpp b/src/plistinterface.cpp index 32c673c3f9b..540954ad5af 100644 --- a/src/plistinterface.cpp +++ b/src/plistinterface.cpp @@ -102,7 +102,7 @@ int PlistInterface::InterfacePreparePlist(FunctorParams *functorParams, Object * std::vector::iterator iter; for (iter = m_uuids.begin(); iter != m_uuids.end(); ++iter) { - params->m_interfaceUuidPairs.push_back({ this, *iter }); + params->m_interfaceUuidTuples.push_back(std::make_tuple(this, *iter, (Object *)NULL)); } return FUNCTOR_CONTINUE; diff --git a/src/system.cpp b/src/system.cpp index 1ccb5ca6916..3e992c6c005 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -940,9 +940,6 @@ int System::AdjustFloatingPositioners(FunctorParams *functorParams) adjustFloatingPositionerGrpsParams.m_place = STAFFREL_below; m_systemAligner.Process(&adjustFloatingPositionerGrps, &adjustFloatingPositionerGrpsParams); - params->m_classId = BEAMSPAN; - m_systemAligner.Process(params->m_functor, params); - params->m_classId = BRACKETSPAN; m_systemAligner.Process(params->m_functor, params); From faee33ad3bbbf8c83e08c4c20201cbd7f4f25235 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 15 Sep 2020 12:07:24 +0300 Subject: [PATCH 363/403] Code improvements - changed dynamic_cast to vrv_cast - improved MEI parsing to avoid creating std::string object on each comparison - some minor code cleanup --- src/beamspan.cpp | 7 +----- src/iomei.cpp | 51 ++++++++++++++++++++++---------------------- src/view_control.cpp | 2 +- 3 files changed, 28 insertions(+), 32 deletions(-) diff --git a/src/beamspan.cpp b/src/beamspan.cpp index bb2e0554367..1dd9510af81 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -128,12 +128,7 @@ int BeamSpan::ResolveBeamSpanElements(FunctorParams *functorParams) Staff *staff = vrv_cast(GetStart()->GetFirstAncestor(STAFF)); if (!layer || !staff) return FUNCTOR_SIBLINGS; - if (HasPlist()) { - m_beamedElements = *GetRefs(); - } - else { - m_beamedElements = GetBeamSpanElementList(layer, staff); - } + m_beamedElements = HasPlist() ? *GetRefs() : GetBeamSpanElementList(layer, staff); // Find whether this beamSpan is crossStaff - if there are beamed elements that belong // to differen staffs we can consider this beamSpan as such diff --git a/src/iomei.cpp b/src/iomei.cpp index f0eb7f3fd45..e93a64ab226 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -4769,25 +4769,26 @@ bool MEIInput::ReadMeasureChildren(Object *parent, pugi::xml_node parentNode) bool success = true; pugi::xml_node current; for (current = parentNode.first_child(); current; current = current.next_sibling()) { + const std::string currentName = current.name(); if (!success) break; // editorial - else if (this->IsEditorialElementName(current.name())) { + else if (this->IsEditorialElementName(currentName)) { success = this->ReadEditorialElement(parent, current, EDITORIAL_MEASURE); } // content - else if (std::string(current.name()) == "anchoredText") { + else if (currentName == "anchoredText") { success = this->ReadAnchoredText(parent, current); } - else if (std::string(current.name()) == "arpeg") { + else if (currentName == "arpeg") { success = this->ReadArpeg(parent, current); } - else if (std::string(current.name()) == "beamSpan") { - ReadBeamSpan(parent, current); + else if (currentName == "beamSpan") { + success = this->ReadBeamSpan(parent, current); } - else if (std::string(current.name()) == "bracketSpan") { + else if (currentName == "bracketSpan") { success = this->ReadBracketSpan(parent, current); } - else if (std::string(current.name()) == "breath") { + else if (currentName == "breath") { success = this->ReadBreath(parent, current); } else if (std::string(current.name()) == "caesura") { @@ -4796,22 +4797,22 @@ bool MEIInput::ReadMeasureChildren(Object *parent, pugi::xml_node parentNode) else if (std::string(current.name()) == "dir") { success = this->ReadDir(parent, current); } - else if (std::string(current.name()) == "dynam") { + else if (currentName == "dynam") { success = this->ReadDynam(parent, current); } - else if (std::string(current.name()) == "fermata") { + else if (currentName == "fermata") { success = this->ReadFermata(parent, current); } - else if (std::string(current.name()) == "fing") { + else if (currentName == "fing") { success = this->ReadFing(parent, current); } - else if (std::string(current.name()) == "gliss") { + else if (currentName == "gliss") { success = this->ReadGliss(parent, current); } - else if (std::string(current.name()) == "hairpin") { + else if (currentName == "hairpin") { success = this->ReadHairpin(parent, current); } - else if (std::string(current.name()) == "harm") { + else if (currentName == "harm") { success = this->ReadHarm(parent, current); } else if (std::string(current.name()) == "lv") { @@ -4820,16 +4821,16 @@ bool MEIInput::ReadMeasureChildren(Object *parent, pugi::xml_node parentNode) else if (std::string(current.name()) == "mNum") { success = this->ReadMNum(parent, current); } - else if (std::string(current.name()) == "mordent") { + else if (currentName == "mordent") { success = this->ReadMordent(parent, current); } - else if (std::string(current.name()) == "octave") { + else if (currentName == "octave") { success = this->ReadOctave(parent, current); } - else if (std::string(current.name()) == "pedal") { + else if (currentName == "pedal") { success = this->ReadPedal(parent, current); } - else if (std::string(current.name()) == "phrase") { + else if (currentName == "phrase") { success = this->ReadPhrase(parent, current); } else if (std::string(current.name()) == "pitchInflection") { @@ -4838,31 +4839,31 @@ bool MEIInput::ReadMeasureChildren(Object *parent, pugi::xml_node parentNode) else if (std::string(current.name()) == "reh") { success = this->ReadReh(parent, current); } - else if (std::string(current.name()) == "slur") { + else if (currentName == "slur") { success = this->ReadSlur(parent, current); } - else if (std::string(current.name()) == "staff") { + else if (currentName == "staff") { success = this->ReadStaff(parent, current); } - else if (std::string(current.name()) == "tempo") { + else if (currentName == "tempo") { success = this->ReadTempo(parent, current); } - else if (std::string(current.name()) == "tie") { + else if (currentName == "tie") { success = this->ReadTie(parent, current); } - else if (std::string(current.name()) == "trill") { + else if (currentName == "trill") { success = this->ReadTrill(parent, current); } - else if (std::string(current.name()) == "turn") { + else if (currentName == "turn") { success = this->ReadTurn(parent, current); } - else if (std::string(current.name()) == "tupletSpan") { + else if (currentName == "tupletSpan") { if (!ReadTupletSpanAsTuplet(dynamic_cast(parent), current)) { LogWarning(" is not readable as and will be ignored"); } } // xml comment - else if (std::string(current.name()) == "") { + else if (currentName == "") { success = this->ReadXMLComment(parent, current); } else { diff --git a/src/view_control.cpp b/src/view_control.cpp index 66317f53e94..bbcad53ed5a 100644 --- a/src/view_control.cpp +++ b/src/view_control.cpp @@ -318,7 +318,7 @@ void View::DrawTimeSpanningElement(DeviceContext *dc, Object *element, System *s } else if (element->Is(BEAMSPAN)) { // cast to BeamSpan check in DrawBeamSpan - DrawBeamSpan(dc, dynamic_cast(element), measure); + DrawBeamSpan(dc, vrv_cast(element), measure); } else if (element->Is(BRACKETSPAN)) { // cast to BracketSpan check in DrawBracketSpan From d1d90f91b76bf22f507286bf007e1aeb0e28840b Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Mon, 21 Sep 2020 13:59:55 +0200 Subject: [PATCH 364/403] add new files to xcode project --- Verovio.xcodeproj/project.pbxproj | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Verovio.xcodeproj/project.pbxproj b/Verovio.xcodeproj/project.pbxproj index dfab23f16f6..27299f1409d 100644 --- a/Verovio.xcodeproj/project.pbxproj +++ b/Verovio.xcodeproj/project.pbxproj @@ -1266,6 +1266,12 @@ E79C87C62694407B0098FE85 /* lv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E79C87C2269440570098FE85 /* lv.cpp */; }; E79C87C7269440800098FE85 /* lv.h in Headers */ = {isa = PBXBuildFile; fileRef = E79C87C1269440420098FE85 /* lv.h */; }; E79C87C8269440810098FE85 /* lv.h in Headers */ = {isa = PBXBuildFile; fileRef = E79C87C1269440420098FE85 /* lv.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD05622F2518CD12004057EB /* beamspan.h in Headers */ = {isa = PBXBuildFile; fileRef = BD05622E2518CD12004057EB /* beamspan.h */; }; + BD0562302518CD12004057EB /* beamspan.h in Headers */ = {isa = PBXBuildFile; fileRef = BD05622E2518CD12004057EB /* beamspan.h */; }; + BD0562362518CD20004057EB /* beamspan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BD0562352518CD20004057EB /* beamspan.cpp */; }; + BD0562372518CD20004057EB /* beamspan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BD0562352518CD20004057EB /* beamspan.cpp */; }; + BD0562382518CD20004057EB /* beamspan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BD0562352518CD20004057EB /* beamspan.cpp */; }; + BD0562392518CD20004057EB /* beamspan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BD0562352518CD20004057EB /* beamspan.cpp */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -1734,6 +1740,8 @@ E79ADDC626BD645B00527E4B /* runtimeclock.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = runtimeclock.cpp; path = src/runtimeclock.cpp; sourceTree = ""; }; E79C87C1269440420098FE85 /* lv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lv.h; path = include/vrv/lv.h; sourceTree = ""; }; E79C87C2269440570098FE85 /* lv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lv.cpp; path = src/lv.cpp; sourceTree = ""; }; + BD05622E2518CD12004057EB /* beamspan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = beamspan.h; path = include/vrv/beamspan.h; sourceTree = ""; }; + BD0562352518CD20004057EB /* beamspan.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = beamspan.cpp; path = src/beamspan.cpp; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -2093,6 +2101,8 @@ 4DB3510D1C80409E002DD057 /* anchoredtext.h */, 4D6331F41F46D2CB00A0D6BF /* arpeg.cpp */, 4D6331F21F46D2B400A0D6BF /* arpeg.h */, + BD0562352518CD20004057EB /* beamspan.cpp */, + BD05622E2518CD12004057EB /* beamspan.h */, 4DE96E3A21C4373200CB85BE /* bracketspan.cpp */, 4DE96E3821C4370E00CB85BE /* bracketspan.h */, 4DE644F41EDBEA01002FBE6C /* breath.cpp */, @@ -2563,6 +2573,7 @@ 4D1BE7781C6942930086DC0E /* pugiconfig.hpp in Headers */, 4DC12A891F74111E000440E9 /* pgfoot.h in Headers */, 4DB3D8C91F83D10300B5FC2B /* dir.h in Headers */, + BD05622F2518CD12004057EB /* beamspan.h in Headers */, 4DEC4DDA21C8295700D1D273 /* damage.h in Headers */, 8F59294E18854BF800FE51AD /* positioninterface.h in Headers */, 8F59294F18854BF800FE51AD /* rest.h in Headers */, @@ -2786,6 +2797,7 @@ BB4C4B2622A932CF001F6AF0 /* fermata.h in Headers */, BB4C4B0022A932BC001F6AF0 /* supplied.h in Headers */, BB4C4B8622A932DF001F6AF0 /* lb.h in Headers */, + BD0562302518CD12004057EB /* beamspan.h in Headers */, BB4C4AFE22A932BC001F6AF0 /* subst.h in Headers */, BB4C4AFC22A932BC001F6AF0 /* sic.h in Headers */, BB4C4AEE22A932BC001F6AF0 /* expan.h in Headers */, @@ -3097,6 +3109,7 @@ 4D308105203DB6B500BC44F6 /* ref.cpp in Sources */, 4D1694161E3A44F300569BF4 /* pedal.cpp in Sources */, 4D1694171E3A44F300569BF4 /* mensur.cpp in Sources */, + BD0562372518CD20004057EB /* beamspan.cpp in Sources */, 4D1694181E3A44F300569BF4 /* text.cpp in Sources */, 4DC12A7D1F740FB9000440E9 /* view_running.cpp in Sources */, 4D15DE3B2411782300457C05 /* expansionmap.cpp in Sources */, @@ -3281,6 +3294,7 @@ 8F086EEE188539540037FD8E /* iomei.cpp in Sources */, 8F086EEF188539540037FD8E /* iomusxml.cpp in Sources */, 8F086EF0188539540037FD8E /* iopae.cpp in Sources */, + BD0562362518CD20004057EB /* beamspan.cpp in Sources */, 4D8CD8A61B4E922A00F0756F /* atts_critapp.cpp in Sources */, 4DEC4D7A21C8048700D1D273 /* abbr.cpp in Sources */, 4067E4C81DDDAF0000C6E059 /* fermata.cpp in Sources */, @@ -3526,6 +3540,7 @@ 4DDBBCC61C2EBAE7001AB50A /* view_text.cpp in Sources */, 8F3DD34618854B2E0051330C /* layerelement.cpp in Sources */, 4DB3D8CA1F83D10700B5FC2B /* fermata.cpp in Sources */, + BD0562382518CD20004057EB /* beamspan.cpp in Sources */, 4D798CBE1B8AEDBA007281CA /* drawinginterface.cpp in Sources */, 4D20740522A46BAA00E0765F /* atts_frettab.cpp in Sources */, 8F3DD34818854B2E0051330C /* mensur.cpp in Sources */, @@ -3742,6 +3757,7 @@ BB4C4B7322A932D7001F6AF0 /* space.cpp in Sources */, 402492BF232E70000017BB75 /* gracegrp.cpp in Sources */, BB4C4A6622A9321F001F6AF0 /* atts_critapp.cpp in Sources */, + BD0562392518CD20004057EB /* beamspan.cpp in Sources */, BB4C4B3D22A932D7001F6AF0 /* artic.cpp in Sources */, BB4C4A5D22A9321F001F6AF0 /* attconverter.cpp in Sources */, BB4C4AF722A932BC001F6AF0 /* reg.cpp in Sources */, From cdc5c05428fb55eebc0634a97c66f0daf928592e Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Mon, 21 Sep 2020 14:18:59 +0200 Subject: [PATCH 365/403] clang-format --- src/beamspan.cpp | 4 ++-- src/object.cpp | 2 +- src/view_beam.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/beamspan.cpp b/src/beamspan.cpp index 1dd9510af81..ee99b159c78 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -59,7 +59,7 @@ void BeamSpan::Reset() ResetPlist(); } -ArrayOfObjects BeamSpan::GetBeamSpanElementList(Layer *layer, Staff *staff) +ArrayOfObjects BeamSpan::GetBeamSpanElementList(Layer *layer, Staff *staff) { // find all elements between startId and endId of the beamSpan ClassIdsComparison classIds({ NOTE, CHORD }); @@ -120,7 +120,7 @@ int BeamSpan::CalcStem(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } -int BeamSpan::ResolveBeamSpanElements(FunctorParams *functorParams) +int BeamSpan::ResolveBeamSpanElements(FunctorParams *functorParams) { if (!m_beamedElements.empty()) return FUNCTOR_CONTINUE; diff --git a/src/object.cpp b/src/object.cpp index 8792dca6f12..9611d1ef709 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -1578,7 +1578,7 @@ int Object::PreparePlist(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } -int Object::ProcessPlist(FunctorParams* functorParams) +int Object::ProcessPlist(FunctorParams *functorParams) { PreparePlistParams *params = vrv_params_cast(functorParams); assert(params); diff --git a/src/view_beam.cpp b/src/view_beam.cpp index e7da408aa71..3c793bd9d95 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -433,7 +433,7 @@ void View::DrawBeamSpan(DeviceContext *dc, BeamSpan *beamSpan, Measure *measure) beamSpan->m_beamSegment.Reset(); beamSpan->m_beamSegment.InitCoordRefs(&beamSpan->m_beamElementCoords); beamSpan->m_beamSegment.CalcBeam(layer, staff, m_doc, beamSpan, beamSpan->GetPlace()); - + // Draw corresponding beam segment dc->StartGraphic(beamSpan, "", beamSpan->GetUuid()); DrawBeamSegment(dc, &beamSpan->m_beamSegment, beamSpan, layer, staff, measure); From de34bc0dc087bc21f587d643b7bce0986c5c110e Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 21 Sep 2020 15:35:02 +0300 Subject: [PATCH 366/403] Pass values by reference in the loop --- src/doc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc.cpp b/src/doc.cpp index c77cc28f02c..f60d53f8d5d 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -554,7 +554,7 @@ void Doc::PrepareDrawing() Functor processPlist(&Object::ProcessPlist); this->Process(&processPlist, &preparePlistParams); - for (const auto [plistInterface, uuid, objectReference] : preparePlistParams.m_interfaceUuidTuples) { + for (const auto &[plistInterface, uuid, objectReference] : preparePlistParams.m_interfaceUuidTuples) { plistInterface->SetRef(objectReference); } preparePlistParams.m_interfaceUuidTuples.clear(); From 1ccdf1dc50baa402dfc01313b8aa0ce000cbed93 Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 21 Sep 2020 16:18:18 +0300 Subject: [PATCH 367/403] Minor fixes - change code to avoid segFault when start is missing --- src/beamspan.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/beamspan.cpp b/src/beamspan.cpp index ee99b159c78..e219ad09a21 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -109,6 +109,8 @@ int BeamSpan::CalcStem(FunctorParams *functorParams) CalcStemParams *params = vrv_params_cast(functorParams); assert(params); + if (!GetStart()) return FUNCTOR_CONTINUE; + Layer *layer = vrv_cast(GetStart()->GetFirstAncestor(LAYER)); Staff *staff = vrv_cast(GetStart()->GetFirstAncestor(STAFF)); @@ -122,7 +124,7 @@ int BeamSpan::CalcStem(FunctorParams *functorParams) int BeamSpan::ResolveBeamSpanElements(FunctorParams *functorParams) { - if (!m_beamedElements.empty()) return FUNCTOR_CONTINUE; + if (!m_beamedElements.empty() || !GetStart()) return FUNCTOR_CONTINUE; Layer *layer = vrv_cast(GetStart()->GetFirstAncestor(LAYER)); Staff *staff = vrv_cast(GetStart()->GetFirstAncestor(STAFF)); From 5243b8a75d0c82f662b678abab55df6d270e5fc0 Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 4 Nov 2020 13:47:26 +0200 Subject: [PATCH 368/403] Small fix for the beamspan --- src/beamspan.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/beamspan.cpp b/src/beamspan.cpp index e219ad09a21..921ea4af322 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -74,7 +74,7 @@ ArrayOfObjects BeamSpan::GetBeamSpanElementList(Layer *layer, Staff *staff) Object *parent = measure->GetParent(); const int index = parent->GetChildIndex(measure); - Measure *nextMeasure = vrv_cast(parent->GetChild(index + 1)); + Measure *nextMeasure = vrv_cast(parent->GetNext(measure, MEASURE)); if (nextMeasure) { AttNIntegerComparison snc(STAFF, staff->GetN()); Staff *nextStaff = vrv_cast(nextMeasure->FindDescendantByComparison(&snc)); From 7960b61d13864877a5b520d52b84583fd0e46f77 Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 5 Nov 2020 15:28:23 +0200 Subject: [PATCH 369/403] Improve beamSpan rendering logic - added handling of the beamSpans when drawn over the system breaks - added additional beams spanning towards/from the barlines when spanning over the system - fixed problem with rendering beamSpan for files with encoded breaks --- include/vrv/beamspan.h | 24 +++++++- include/vrv/object.h | 10 ++++ src/beamspan.cpp | 122 +++++++++++++++++++++++++++++++++++++++++ src/page.cpp | 4 ++ src/view_beam.cpp | 1 + 5 files changed, 160 insertions(+), 1 deletion(-) diff --git a/include/vrv/beamspan.h b/include/vrv/beamspan.h index bb3c9dbbfc8..d5cf8d89482 100644 --- a/include/vrv/beamspan.h +++ b/include/vrv/beamspan.h @@ -57,6 +57,11 @@ class BeamSpan : public ControlElement, virtual TimeSpanningInterface *GetTimeSpanningInterface() { return dynamic_cast(this); } ////@} + // Helper to append coordinates for the beamSpans that are drawn over systems + void AppendSpanningCoordinates(Measure *measure); + + // Helper to get element list for the beamSpan - elements are acquired from all layerElements that are located + // in between start and end of the beamSpan ArrayOfObjects GetBeamSpanElementList(Layer* layer, Staff* staff); //----------// @@ -73,8 +78,23 @@ class BeamSpan : public ControlElement, */ virtual int ResolveBeamSpanElements(FunctorParams *); + /** + * See Object::ResolveSpanningBeamSpans + */ + virtual int ResolveSpanningBeamSpans(FunctorParams *); + + /** + * @name Getter/setter for spanningType + */ + ///@{ + void SetSpanningType(int systemIndex, int systemCount); + int GetSpanningType() const { return m_spanningType; } + ////@} + private: - // + // Helper for breaking one big spanning beamSpan into smaller beamSpans + bool SeparateSpanningElements(ArrayOfObjects &newElements, Object *first, Doc *doc, bool clearElements); + public: // BeamSegment m_beamSegment; @@ -82,6 +102,8 @@ class BeamSpan : public ControlElement, private: // ArrayOfObjects m_beamedElements; + + int m_spanningType; }; } // namespace vrv diff --git a/include/vrv/object.h b/include/vrv/object.h index f3b2f573622..3a1b8347dcd 100644 --- a/include/vrv/object.h +++ b/include/vrv/object.h @@ -1290,6 +1290,16 @@ class Object : public BoundingBox { virtual int ResolveBeamSpanElements(FunctorParams *) { return FUNCTOR_CONTINUE; } ///@} + /** + * Resolve spinning beamspans by breaking it into separate parts, each belonging to the corresponding + * system/measure. BeamSpans get elements reassigned, so that each beamSpan can be drawn as control + * element. This allows free placement of beamSpan in the MEI tree and ensures that beamSpan will be + * drawn properly + */ + ///@{ + virtual int ResolveSpinningBeamSpans(FunctorParams *) { return FUNCTOR_CONTINUE; } + ///@} + /** * Export the object to a MidiFile */ diff --git a/src/beamspan.cpp b/src/beamspan.cpp index 921ea4af322..c4e95294b67 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -13,6 +13,7 @@ //---------------------------------------------------------------------------- +#include "barline.h" #include "comparison.h" #include "functorparams.h" #include "layer.h" @@ -57,6 +58,36 @@ void BeamSpan::Reset() ResetBeamRend(); ResetColor(); ResetPlist(); + + m_spanningType = SPANNING_START_END; +} + +void BeamSpan::AppendSpanningCoordinates(Measure *measure) +{ + const int spanningType = GetSpanningType(); + if (SPANNING_START_END == spanningType) return; + + BarLine *bar = measure->GetRightBarLine(); + const int rightSide = bar->GetDrawingX(); + BeamElementCoord *front = m_beamSegment.m_beamElementCoordRefs.front(); + BeamElementCoord *back = m_beamSegment.m_beamElementCoordRefs.back(); + const double slope = (double)(back->m_yBeam - front->m_yBeam) / (double)(back->m_x - front->m_x); + + if ((SPANNING_START == spanningType) || (SPANNING_MIDDLE == spanningType)) { + BeamElementCoord *right = new BeamElementCoord(*back); + const int distance = rightSide - back->m_x; + right->m_x = rightSide; + right->m_yBeam += distance * slope; + m_beamSegment.m_beamElementCoordRefs.push_back(right); + } + if ((SPANNING_END == spanningType) || (SPANNING_MIDDLE == spanningType)) { + BeamElementCoord *left = new BeamElementCoord(*front); + const int width = measure->GetInnerWidth(); + const int offset = (back->m_x - front->m_x) / (m_beamSegment.m_beamElementCoordRefs.size() - 1) / 2; + left->m_x -= offset; + left->m_yBeam -= offset * slope; + m_beamSegment.m_beamElementCoordRefs.insert(m_beamSegment.m_beamElementCoordRefs.begin(), left); + } } ArrayOfObjects BeamSpan::GetBeamSpanElementList(Layer *layer, Staff *staff) @@ -100,6 +131,43 @@ ArrayOfObjects BeamSpan::GetBeamSpanElementList(Layer *layer, Staff *staff) return beamSpanElements; } +bool BeamSpan::SeparateSpanningElements(ArrayOfObjects &newElements, Object *first, Doc *doc, bool clearElements) +{ + Layer *layer = vrv_cast(first->GetFirstAncestor(LAYER)); + Staff *staff = vrv_cast(first->GetFirstAncestor(STAFF)); + if (!layer || !staff) return false; + + m_beamedElements = newElements; + if (clearElements) m_beamElementCoords.clear(); + InitCoords(&m_beamedElements, staff, GetPlace()); + + m_beamSegment.InitCoordRefs(&m_beamElementCoords); + m_beamSegment.CalcBeam(layer, staff, doc, this, GetPlace()); + for (auto element : newElements) { + vrv_cast(element)->m_referencedElement = this; + } + + // Reset Start and End based on the new elements of the beamSpan + TimePointInterface::Reset(); + TimeSpanningInterface::Reset(); + SetStart(vrv_cast(newElements.front())); + SetEnd(vrv_cast(newElements.back())); + return true; +} + +void BeamSpan::SetSpanningType(int systemIndex, int systemCount) +{ + if (0 == systemIndex) { + m_spanningType = SPANNING_START; + } + else if ((systemCount - 1) == systemIndex) { + m_spanningType = SPANNING_END; + } + else { + m_spanningType = SPANNING_MIDDLE; + } +} + //----------// // Functors // //----------// @@ -163,4 +231,58 @@ int BeamSpan::ResolveBeamSpanElements(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } +int BeamSpan::ResolveSpanningBeamSpans(FunctorParams *functorParams) +{ + FunctorDocParams *params = vrv_params_cast(functorParams); + assert(params); + + if (m_beamedElements.empty() || !GetStart()) return FUNCTOR_CONTINUE; + + Object *startSystem = GetStart()->GetFirstAncestor(SYSTEM); + Object *endSystem = GetEnd()->GetFirstAncestor(SYSTEM); + assert(startSystem && endSystem); + if (startSystem == endSystem) return FUNCTOR_CONTINUE; + + // Find layerElements that belong to another system and store then in the vector alongside + // the system they belong to. This will allow us to break down beamSpan based on the systems + auto iter = m_beamedElements.begin(); + std::vector > elements; + Object *firstSystem = startSystem; + while (iter != m_beamedElements.end()) { + elements.push_back({ iter, firstSystem }); + iter = find_if(iter, m_beamedElements.end(), [&firstSystem](Object *element) { + Object *parentSystem = element->GetFirstAncestor(SYSTEM); + if (firstSystem == parentSystem) return false; + firstSystem = parentSystem; + return true; + }); + } + elements.push_back({ m_beamedElements.end(), NULL }); + + // Iterator for the elements are based on the initial order of the elements, so skip current system when + // found and process it separatelly in the end + Object *currentSystemn = GetFirstAncestor(SYSTEM); + int currentSystemIndex = 0; + for (int i = 0; i < elements.size() - 1; ++i) { + if (elements.at(i).second == currentSystemn) { + currentSystemIndex = i; + continue; + } + + BeamSpan *beamSpan = vrv_cast(Clone()); + ArrayOfObjects newElements(elements.at(i).first, elements.at(i + 1).first); + beamSpan->SeparateSpanningElements(newElements, *elements.at(i).first, params->m_doc, true); + beamSpan->SetSpanningType(i, elements.size() - 1); + + Measure *measure = vrv_cast((*elements.at(i).first)->GetFirstAncestor(MEASURE)); + measure->AddChild(beamSpan); + } + + ArrayOfObjects newElements(elements.at(currentSystemIndex).first, elements.at(currentSystemIndex + 1).first); + SeparateSpanningElements(newElements, GetStart(), params->m_doc, false); + SetSpanningType(currentSystemIndex, elements.size() - 1); + + return FUNCTOR_CONTINUE; +} + } // namespace vrv \ No newline at end of file diff --git a/src/page.cpp b/src/page.cpp index bd762af1a71..7a89189d9a0 100644 --- a/src/page.cpp +++ b/src/page.cpp @@ -424,6 +424,10 @@ void Page::LayOutHorizontally() PrepareSlursParams prepareSlursParams(doc); Functor prepareSlurs(&Object::PrepareSlurs); this->Process(&prepareSlurs, &prepareSlursParams); + + FunctorDocParams resolveSpanningBeamSpansParams(doc); + Functor resolveSpanningBeamSpans(&Object::ResolveSpanningBeamSpans); + this->Process(&resolveSpanningBeamSpans, &resolveSpanningBeamSpansParams); } void Page::HorizontalLayoutCachePage(bool restore) diff --git a/src/view_beam.cpp b/src/view_beam.cpp index 3c793bd9d95..341464527cd 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -433,6 +433,7 @@ void View::DrawBeamSpan(DeviceContext *dc, BeamSpan *beamSpan, Measure *measure) beamSpan->m_beamSegment.Reset(); beamSpan->m_beamSegment.InitCoordRefs(&beamSpan->m_beamElementCoords); beamSpan->m_beamSegment.CalcBeam(layer, staff, m_doc, beamSpan, beamSpan->GetPlace()); + beamSpan->AppendSpinningCoordinates(measure); // Draw corresponding beam segment dc->StartGraphic(beamSpan, "", beamSpan->GetUuid()); From e919bccd606b677984337cfec6570509068bf675 Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 16 Nov 2020 17:09:14 +0200 Subject: [PATCH 370/403] Fix typo --- src/view_beam.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/view_beam.cpp b/src/view_beam.cpp index 341464527cd..e0d7a7be955 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -433,7 +433,7 @@ void View::DrawBeamSpan(DeviceContext *dc, BeamSpan *beamSpan, Measure *measure) beamSpan->m_beamSegment.Reset(); beamSpan->m_beamSegment.InitCoordRefs(&beamSpan->m_beamElementCoords); beamSpan->m_beamSegment.CalcBeam(layer, staff, m_doc, beamSpan, beamSpan->GetPlace()); - beamSpan->AppendSpinningCoordinates(measure); + beamSpan->AppendSpanningCoordinates(measure); // Draw corresponding beam segment dc->StartGraphic(beamSpan, "", beamSpan->GetUuid()); From 7b0de8617dfc39bec99b1cac5eec41ce76dc1331 Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 18 Nov 2020 12:58:24 +0200 Subject: [PATCH 371/403] Change implementation from multiple beamSpans to multiple segments - changed how beamSpan crossing over system has been implemented - instead of creating copies of beamSpan for other system current implementation creates new segments instead; - change beamSpan to have a container with segments instead of having one; beamSpan would draw beams for each segment it has and segments would be separated based on whether beamSpan is cross-system or not - added BeamSegmentPlacementInfo to store additional information regarding segment positioning while not interfering with common beam implementation - cleaned code up a bit and added comments --- include/vrv/beam.h | 36 ++++++++++++ include/vrv/beamspan.h | 27 ++++----- include/vrv/object.h | 2 +- src/beam.cpp | 60 +++++++++++++++++++ src/beamspan.cpp | 127 ++++++++++++++++++----------------------- src/view_beam.cpp | 26 +++++---- 6 files changed, 181 insertions(+), 97 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 20a58de325c..b39f33a3d51 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -24,6 +24,28 @@ class StaffAlignment; enum { PARTIAL_NONE = 0, PARTIAL_THROUGH, PARTIAL_RIGHT, PARTIAL_LEFT }; +//---------------------------------------------------------------------------- +// BeamSegmentPlacementInfo +//---------------------------------------------------------------------------- + +// Structure for storing additional information regarding beamSegment placement (in case of beam/beamSpan spanning over +// the systems +struct BeamSegmentPlacementInfo { +private: + using CoordIter = ArrayOfBeamElementCoords::iterator; +public: + BeamSegmentPlacementInfo() : m_measure(NULL), m_staff(NULL), m_layer(NULL), m_spanningType(SPANNING_START_END) {} + Measure *m_measure; + Staff *m_staff; + Layer *m_layer; + int m_spanningType; + CoordIter m_begin; + CoordIter m_end; + + // Set spanning type based on the positioning of the beam segment + void SetSpanningType(int systemIndex, int systemCount); +}; + //---------------------------------------------------------------------------- // BeamSegment //---------------------------------------------------------------------------- @@ -57,6 +79,12 @@ class BeamSegment { * This is called by Beam::FilterList */ void InitCoordRefs(const ArrayOfBeamElementCoords *beamElementCoords); + + /** + * Initialize placement information for the segment. Should be used with beamSpan to specify which staff/layer it + * belongs to + */ + void InitPlacementInformation(Measure *measure, Staff *staff, Layer *layer); /** * Clear the m_beamElementCoords vector and delete all the objects. @@ -96,6 +124,9 @@ class BeamSegment { void UpdateSameasRoles(data_BEAMPLACE place); ///@} + // Helper to append coordinates for the beamSpans that are drawn over systems + void AppendSpanningCoordinates(Measure *measure); + private: // Helper to adjust beam positioning with regards to ledger lines (top and bottom of the staff) void AdjustBeamToLedgerLines(Doc *doc, Staff *staff, BeamDrawingInterface *beamInterface); @@ -186,6 +217,11 @@ class BeamSegment { StemSameasDrawingRole m_stemSameasRole; StemSameasDrawingRole *m_stemSameasReverseRole; ///@} + + /** + * Additional information on the relevant measure/staff/layer. Optional for plain beams + */ + BeamSegmentPlacementInfo *m_placementInfo; }; //---------------------------------------------------------------------------- diff --git a/include/vrv/beamspan.h b/include/vrv/beamspan.h index d5cf8d89482..7fb1d9b3d07 100644 --- a/include/vrv/beamspan.h +++ b/include/vrv/beamspan.h @@ -34,6 +34,8 @@ class BeamSpan : public ControlElement, public AttBeamedWith, public AttBeamRend, public AttColor { +private: + using SpanIndexVector = std::vector >; public: /** * @name Constructors, destructors, and other standard methods @@ -57,13 +59,18 @@ class BeamSpan : public ControlElement, virtual TimeSpanningInterface *GetTimeSpanningInterface() { return dynamic_cast(this); } ////@} - // Helper to append coordinates for the beamSpans that are drawn over systems - void AppendSpanningCoordinates(Measure *measure); - // Helper to get element list for the beamSpan - elements are acquired from all layerElements that are located // in between start and end of the beamSpan ArrayOfObjects GetBeamSpanElementList(Layer* layer, Staff* staff); + /** + * @name Initialize and cleam beam segments + */ + ///@{ + void InitBeamSegments(); + void ClearBeamSegments(); + ////@} + //----------// // Functors // //----------// @@ -83,27 +90,17 @@ class BeamSpan : public ControlElement, */ virtual int ResolveSpanningBeamSpans(FunctorParams *); - /** - * @name Getter/setter for spanningType - */ - ///@{ - void SetSpanningType(int systemIndex, int systemCount); - int GetSpanningType() const { return m_spanningType; } - ////@} - private: // Helper for breaking one big spanning beamSpan into smaller beamSpans - bool SeparateSpanningElements(ArrayOfObjects &newElements, Object *first, Doc *doc, bool clearElements); + bool AddSpanningSegment(Doc *doc, const SpanIndexVector &elements, int index, bool newSegment = true); public: // - BeamSegment m_beamSegment; + std::vector m_beamSegments; private: // ArrayOfObjects m_beamedElements; - - int m_spanningType; }; } // namespace vrv diff --git a/include/vrv/object.h b/include/vrv/object.h index 3a1b8347dcd..75f182a070a 100644 --- a/include/vrv/object.h +++ b/include/vrv/object.h @@ -1297,7 +1297,7 @@ class Object : public BoundingBox { * drawn properly */ ///@{ - virtual int ResolveSpinningBeamSpans(FunctorParams *) { return FUNCTOR_CONTINUE; } + virtual int ResolveSpanningBeamSpans(FunctorParams *) { return FUNCTOR_CONTINUE; } ///@} /** diff --git a/src/beam.cpp b/src/beam.cpp index 5e372515933..b93575e8757 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -36,18 +36,37 @@ namespace vrv { + +void BeamSegmentPlacementInfo::SetSpanningType(int systemIndex, int systemCount) +{ + if (0 == systemIndex) { + m_spanningType = SPANNING_START; + } + else if ((systemCount - 1) == systemIndex) { + m_spanningType = SPANNING_END; + } + else { + m_spanningType = SPANNING_MIDDLE; + } +} + //---------------------------------------------------------------------------- // BeamSegment //---------------------------------------------------------------------------- BeamSegment::BeamSegment() { + m_placementInfo = NULL; this->Reset(); } BeamSegment::~BeamSegment() { this->ClearCoordRefs(); + if (m_placementInfo) { + delete m_placementInfo; + m_placementInfo = NULL; + } } void BeamSegment::Reset() @@ -84,6 +103,47 @@ void BeamSegment::InitCoordRefs(const ArrayOfBeamElementCoords *beamElementCoord m_beamElementCoordRefs = *beamElementCoords; } +void BeamSegment::InitPlacementInformation(Measure* measure, Staff* staff, Layer* layer) +{ + if (!m_placementInfo) { + m_placementInfo = new BeamSegmentPlacementInfo(); + } + m_placementInfo->m_measure = measure; + m_placementInfo->m_staff = staff; + m_placementInfo->m_layer = layer; +} + +void BeamSegment::AppendSpanningCoordinates(Measure *measure) +{ + if (NULL == m_placementInfo) return; + const int spanningType = m_placementInfo->m_spanningType; + if (SPANNING_START_END == spanningType) return; + + BarLine *bar = measure->GetRightBarLine(); + const int rightSide = bar->GetDrawingX(); + BeamElementCoord *front = m_beamElementCoordRefs.front(); + BeamElementCoord *back = m_beamElementCoordRefs.back(); + const double slope = (double)(back->m_yBeam - front->m_yBeam) / (double)(back->m_x - front->m_x); + + // in case if beamSpan starts in current system - stretch beam to the right barline + if ((SPANNING_START == spanningType) || (SPANNING_MIDDLE == spanningType)) { + BeamElementCoord *right = new BeamElementCoord(*back); + const int distance = rightSide - back->m_x; + right->m_x = rightSide; + right->m_yBeam += distance * slope; + m_beamElementCoordRefs.push_back(right); + } + // otherwise start beam closer to the start of the Measure, to indicate spanning + if ((SPANNING_END == spanningType) || (SPANNING_MIDDLE == spanningType)) { + BeamElementCoord *left = new BeamElementCoord(*front); + const int width = measure->GetInnerWidth(); + const int offset = (back->m_x - front->m_x) / (m_beamElementCoordRefs.size() - 1) / 2; + left->m_x -= offset; + left->m_yBeam -= offset * slope; + m_beamElementCoordRefs.insert(m_beamElementCoordRefs.begin(), left); + } +} + void BeamSegment::CalcBeam( Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place, bool init) { diff --git a/src/beamspan.cpp b/src/beamspan.cpp index c4e95294b67..e8143583a0a 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -43,10 +43,15 @@ BeamSpan::BeamSpan() RegisterAttClass(ATT_COLOR); RegisterAttClass(ATT_PLIST); + InitBeamSegments(); + Reset(); } -BeamSpan::~BeamSpan() {} +BeamSpan::~BeamSpan() +{ + ClearBeamSegments(); +} void BeamSpan::Reset() { @@ -58,36 +63,20 @@ void BeamSpan::Reset() ResetBeamRend(); ResetColor(); ResetPlist(); +} - m_spanningType = SPANNING_START_END; +void BeamSpan::InitBeamSegments() +{ + // BeamSpan should have at least one segment to begin with + m_beamSegments.emplace_back(new BeamSegment()); } -void BeamSpan::AppendSpanningCoordinates(Measure *measure) +void BeamSpan::ClearBeamSegments() { - const int spanningType = GetSpanningType(); - if (SPANNING_START_END == spanningType) return; - - BarLine *bar = measure->GetRightBarLine(); - const int rightSide = bar->GetDrawingX(); - BeamElementCoord *front = m_beamSegment.m_beamElementCoordRefs.front(); - BeamElementCoord *back = m_beamSegment.m_beamElementCoordRefs.back(); - const double slope = (double)(back->m_yBeam - front->m_yBeam) / (double)(back->m_x - front->m_x); - - if ((SPANNING_START == spanningType) || (SPANNING_MIDDLE == spanningType)) { - BeamElementCoord *right = new BeamElementCoord(*back); - const int distance = rightSide - back->m_x; - right->m_x = rightSide; - right->m_yBeam += distance * slope; - m_beamSegment.m_beamElementCoordRefs.push_back(right); - } - if ((SPANNING_END == spanningType) || (SPANNING_MIDDLE == spanningType)) { - BeamElementCoord *left = new BeamElementCoord(*front); - const int width = measure->GetInnerWidth(); - const int offset = (back->m_x - front->m_x) / (m_beamSegment.m_beamElementCoordRefs.size() - 1) / 2; - left->m_x -= offset; - left->m_yBeam -= offset * slope; - m_beamSegment.m_beamElementCoordRefs.insert(m_beamSegment.m_beamElementCoordRefs.begin(), left); + for (auto segment : m_beamSegments) { + delete segment; } + m_beamSegments.clear(); } ArrayOfObjects BeamSpan::GetBeamSpanElementList(Layer *layer, Staff *staff) @@ -131,43 +120,45 @@ ArrayOfObjects BeamSpan::GetBeamSpanElementList(Layer *layer, Staff *staff) return beamSpanElements; } -bool BeamSpan::SeparateSpanningElements(ArrayOfObjects &newElements, Object *first, Doc *doc, bool clearElements) +bool BeamSpan::AddSpanningSegment(Doc *doc, const SpanIndexVector &elements, int index, bool newSegment) { - Layer *layer = vrv_cast(first->GetFirstAncestor(LAYER)); - Staff *staff = vrv_cast(first->GetFirstAncestor(STAFF)); - if (!layer || !staff) return false; + Layer *layer = vrv_cast((*elements.at(index).first)->GetFirstAncestor(LAYER)); + Staff *staff = vrv_cast((*elements.at(index).first)->GetFirstAncestor(STAFF)); + Measure *measure = vrv_cast((*elements.at(index).first)->GetFirstAncestor(MEASURE)); + if (!layer || !staff || !measure) return false; + + // get iterators for first and last coordinates in the range for the segment + auto coordsFirst = std::find_if(m_beamElementCoords.begin(), m_beamElementCoords.end(), + [&](BeamElementCoord *coord) { return coord->m_element == (*elements.at(index).first); }); + auto coordsLast = std::find_if(m_beamElementCoords.begin(), m_beamElementCoords.end(), + [&](BeamElementCoord *coord) { return coord->m_element == *(elements.at(index + 1).first - 1); }); + if ((coordsFirst == m_beamElementCoords.end()) || (coordsLast == m_beamElementCoords.end())) return false; - m_beamedElements = newElements; - if (clearElements) m_beamElementCoords.clear(); - InitCoords(&m_beamedElements, staff, GetPlace()); + + BeamSegment *segment = NULL; + if (newSegment) { + segment = new BeamSegment(); + } + else { + segment = m_beamSegments.at(0); + } - m_beamSegment.InitCoordRefs(&m_beamElementCoords); - m_beamSegment.CalcBeam(layer, staff, doc, this, GetPlace()); - for (auto element : newElements) { - vrv_cast(element)->m_referencedElement = this; + // Init segment with placement information (measure, staff, etc.) as well as begin/end coordinates + ArrayOfBeamElementCoords coords(coordsFirst, coordsLast + 1); + segment->InitPlacementInformation(measure, staff, layer); + segment->m_placementInfo->m_begin = coordsFirst; + segment->m_placementInfo->m_end = coordsLast + 1; + segment->InitCoordRefs(&coords); + segment->CalcBeam(layer, staff, doc, this, GetPlace()); + segment->m_placementInfo->SetSpanningType(index, elements.size() - 1); + + if (newSegment) { + m_beamSegments.push_back(segment); } - // Reset Start and End based on the new elements of the beamSpan - TimePointInterface::Reset(); - TimeSpanningInterface::Reset(); - SetStart(vrv_cast(newElements.front())); - SetEnd(vrv_cast(newElements.back())); return true; } -void BeamSpan::SetSpanningType(int systemIndex, int systemCount) -{ - if (0 == systemIndex) { - m_spanningType = SPANNING_START; - } - else if ((systemCount - 1) == systemIndex) { - m_spanningType = SPANNING_END; - } - else { - m_spanningType = SPANNING_MIDDLE; - } -} - //----------// // Functors // //----------// @@ -181,11 +172,17 @@ int BeamSpan::CalcStem(FunctorParams *functorParams) Layer *layer = vrv_cast(GetStart()->GetFirstAncestor(LAYER)); Staff *staff = vrv_cast(GetStart()->GetFirstAncestor(STAFF)); + Measure *measure = vrv_cast(GetStart()->GetFirstAncestor(MEASURE)); InitCoords(&m_beamedElements, staff, GetPlace()); - m_beamSegment.InitCoordRefs(&m_beamElementCoords); - m_beamSegment.CalcBeam(layer, staff, params->m_doc, this, GetPlace()); + m_beamSegments.at(0)->InitPlacementInformation(measure, staff, layer); + m_beamSegments.at(0)->m_placementInfo->m_begin = m_beamElementCoords.begin(); + m_beamSegments.at(0)->m_placementInfo->m_end = m_beamElementCoords.end(); + ArrayOfBeamElementCoords coord( + m_beamSegments.at(0)->m_placementInfo->m_begin, m_beamSegments.at(0)->m_placementInfo->m_end); + m_beamSegments.at(0)->InitCoordRefs(&coord); + m_beamSegments.at(0)->CalcBeam(layer, staff, params->m_doc, this, GetPlace()); return FUNCTOR_CONTINUE; } @@ -246,7 +243,7 @@ int BeamSpan::ResolveSpanningBeamSpans(FunctorParams *functorParams) // Find layerElements that belong to another system and store then in the vector alongside // the system they belong to. This will allow us to break down beamSpan based on the systems auto iter = m_beamedElements.begin(); - std::vector > elements; + SpanIndexVector elements; Object *firstSystem = startSystem; while (iter != m_beamedElements.end()) { elements.push_back({ iter, firstSystem }); @@ -268,19 +265,9 @@ int BeamSpan::ResolveSpanningBeamSpans(FunctorParams *functorParams) currentSystemIndex = i; continue; } - - BeamSpan *beamSpan = vrv_cast(Clone()); - ArrayOfObjects newElements(elements.at(i).first, elements.at(i + 1).first); - beamSpan->SeparateSpanningElements(newElements, *elements.at(i).first, params->m_doc, true); - beamSpan->SetSpanningType(i, elements.size() - 1); - - Measure *measure = vrv_cast((*elements.at(i).first)->GetFirstAncestor(MEASURE)); - measure->AddChild(beamSpan); + AddSpanningSegment(params->m_doc, elements, i); } - - ArrayOfObjects newElements(elements.at(currentSystemIndex).first, elements.at(currentSystemIndex + 1).first); - SeparateSpanningElements(newElements, GetStart(), params->m_doc, false); - SetSpanningType(currentSystemIndex, elements.size() - 1); + AddSpanningSegment(params->m_doc, elements, currentSystemIndex, false); return FUNCTOR_CONTINUE; } diff --git a/src/view_beam.cpp b/src/view_beam.cpp index e0d7a7be955..eeaf256852a 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -426,18 +426,22 @@ void View::DrawBeamSpan(DeviceContext *dc, BeamSpan *beamSpan, Measure *measure) assert(beamSpan); assert(measure); - Layer *layer = vrv_cast(beamSpan->GetStart()->GetFirstAncestor(LAYER)); - Staff *staff = vrv_cast(beamSpan->GetStart()->GetFirstAncestor(STAFF)); - if (!layer || !staff) return; - - beamSpan->m_beamSegment.Reset(); - beamSpan->m_beamSegment.InitCoordRefs(&beamSpan->m_beamElementCoords); - beamSpan->m_beamSegment.CalcBeam(layer, staff, m_doc, beamSpan, beamSpan->GetPlace()); - beamSpan->AppendSpanningCoordinates(measure); - - // Draw corresponding beam segment + // Draw all segements for the beamSpan dc->StartGraphic(beamSpan, "", beamSpan->GetUuid()); - DrawBeamSegment(dc, &beamSpan->m_beamSegment, beamSpan, layer, staff, measure); + for (auto segment : beamSpan->m_beamSegments) { + // Reset current segment and set coordinates based on stored begin/end iterators for the ElementCoords + segment->Reset(); + ArrayOfBeamElementCoords coord(segment->m_placementInfo->m_begin, segment->m_placementInfo->m_end); + segment->InitCoordRefs(&coord); + segment->CalcBeam(segment->m_placementInfo->m_layer, segment->m_placementInfo->m_staff, m_doc, beamSpan, + beamSpan->GetPlace()); + segment->AppendSpanningCoordinates(segment->m_placementInfo->m_measure); + + // Draw corresponding beam segment + DrawBeamSegment(dc, segment, beamSpan, segment->m_placementInfo->m_layer, segment->m_placementInfo->m_staff, + segment->m_placementInfo->m_measure); + } + dc->EndGraphic(beamSpan, this); } From eb1607d9b39ff72186e54b3173467b3036dfbb54 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 29 Dec 2020 13:52:33 +0200 Subject: [PATCH 372/403] Fixes for beamSpan behavior - fixed several errors after rebasing onto the latest develop branch to keep correct beamSpan behavior --- include/vrv/beam.h | 2 ++ include/vrv/drawinginterface.h | 3 ++- src/beam.cpp | 16 ++++++++++++++-- src/beamspan.cpp | 11 +++++++---- src/drawinginterface.cpp | 3 ++- src/view_beam.cpp | 2 +- 6 files changed, 28 insertions(+), 9 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index b39f33a3d51..07d5c8e1e4e 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -186,6 +186,8 @@ class BeamSegment { // Helper to check mixed beam positioning compared to other elements (ledger lines, staff) and adjust it accordingly bool NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface); + std::vector GetSegmentYPositions() const; + public: // values set by CalcBeam int m_nbNotesOrChords; diff --git a/include/vrv/drawinginterface.h b/include/vrv/drawinginterface.h index b591f65e725..0f670190931 100644 --- a/include/vrv/drawinginterface.h +++ b/include/vrv/drawinginterface.h @@ -112,7 +112,7 @@ class BeamDrawingInterface : public ObjectListInterface { */ void InitCue(bool beamCue); - bool IsHorizontal(); + bool IsHorizontal(const std::vector& items); bool IsRepeatedPattern(); @@ -175,6 +175,7 @@ class BeamDrawingInterface : public ObjectListInterface { bool m_cueSize; Staff *m_crossStaffContent; data_STAFFREL_basic m_crossStaffRel; + bool m_isSpanningElement; int m_shortestDur; data_STEMDIRECTION m_notesStemDir; data_BEAMPLACE m_drawingPlace; diff --git a/src/beam.cpp b/src/beam.cpp index b93575e8757..98be0006c3d 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -144,6 +144,17 @@ void BeamSegment::AppendSpanningCoordinates(Measure *measure) } } +std::vector BeamSegment::GetSegmentYPositions() const +{ + std::vector items; + for (auto coord : m_beamElementCoordRefs) { + if (!coord->m_stem || !coord->m_closestNote) continue; + + items.push_back(coord->m_closestNote->GetDrawingY()); + } + return items; +} + void BeamSegment::CalcBeam( Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place, bool init) { @@ -171,7 +182,7 @@ void BeamSegment::CalcBeam( else { beamInterface->m_fractionSize = staff->m_drawingStaffSize; - horizontal = beamInterface->IsHorizontal(); + horizontal = beamInterface->IsHorizontal(this->GetSegmentYPositions()); // Beam@place has precedence - however, in some cases, CalcBeam is called recursively because we need to change // the place This occurs when mixed makes no sense and the beam is placed above or below instead. this->CalcBeamPlace(layer, beamInterface, place); @@ -1771,7 +1782,8 @@ void BeamElementCoord::SetDrawingStemDir( // Make sure the stem reaches the center of the staff // Mark the segment as extendedToCenter since we then want a reduced slope - if (!interface->m_crossStaffContent && (BEAMPLACE_mixed != interface->m_drawingPlace)) { + if (!interface->m_isSpanningElement && !interface->m_crossStaffContent + && (BEAMPLACE_mixed != interface->m_drawingPlace)) { if (((stemDir == STEMDIRECTION_up) && (m_yBeam <= segment->m_verticalCenter)) || ((stemDir == STEMDIRECTION_down) && (segment->m_verticalCenter <= m_yBeam))) { m_yBeam = segment->m_verticalCenter; diff --git a/src/beamspan.cpp b/src/beamspan.cpp index e8143583a0a..64a68e233e0 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -43,9 +43,8 @@ BeamSpan::BeamSpan() RegisterAttClass(ATT_COLOR); RegisterAttClass(ATT_PLIST); - InitBeamSegments(); - Reset(); + InitBeamSegments(); } BeamSpan::~BeamSpan() @@ -63,12 +62,16 @@ void BeamSpan::Reset() ResetBeamRend(); ResetColor(); ResetPlist(); + + ClearBeamSegments(); } void BeamSpan::InitBeamSegments() { // BeamSpan should have at least one segment to begin with m_beamSegments.emplace_back(new BeamSegment()); + + m_isSpanningElement = true; } void BeamSpan::ClearBeamSegments() @@ -149,7 +152,7 @@ bool BeamSpan::AddSpanningSegment(Doc *doc, const SpanIndexVector &elements, int segment->m_placementInfo->m_begin = coordsFirst; segment->m_placementInfo->m_end = coordsLast + 1; segment->InitCoordRefs(&coords); - segment->CalcBeam(layer, staff, doc, this, GetPlace()); + segment->CalcBeam(layer, staff, doc, this, m_drawingPlace); segment->m_placementInfo->SetSpanningType(index, elements.size() - 1); if (newSegment) { @@ -233,7 +236,7 @@ int BeamSpan::ResolveSpanningBeamSpans(FunctorParams *functorParams) FunctorDocParams *params = vrv_params_cast(functorParams); assert(params); - if (m_beamedElements.empty() || !GetStart()) return FUNCTOR_CONTINUE; + if (m_beamedElements.empty() || !GetStart() || !GetEnd()) return FUNCTOR_CONTINUE; Object *startSystem = GetStart()->GetFirstAncestor(SYSTEM); Object *endSystem = GetEnd()->GetFirstAncestor(SYSTEM); diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index e3e1108117c..4b34ac73aeb 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -92,6 +92,7 @@ void BeamDrawingInterface::Reset() m_fractionSize = 100; m_crossStaffContent = NULL; m_crossStaffRel = STAFFREL_basic_NONE; + m_isSpanningElement = false; m_shortestDur = 0; m_notesStemDir = STEMDIRECTION_NONE; m_drawingPlace = BEAMPLACE_NONE; @@ -261,7 +262,7 @@ void BeamDrawingInterface::InitCue(bool beamCue) } } -bool BeamDrawingInterface::IsHorizontal() +bool BeamDrawingInterface::IsHorizontal(const std::vector &items) { if (this->IsRepeatedPattern()) { return true; diff --git a/src/view_beam.cpp b/src/view_beam.cpp index eeaf256852a..e83d961fe63 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -434,7 +434,7 @@ void View::DrawBeamSpan(DeviceContext *dc, BeamSpan *beamSpan, Measure *measure) ArrayOfBeamElementCoords coord(segment->m_placementInfo->m_begin, segment->m_placementInfo->m_end); segment->InitCoordRefs(&coord); segment->CalcBeam(segment->m_placementInfo->m_layer, segment->m_placementInfo->m_staff, m_doc, beamSpan, - beamSpan->GetPlace()); + beamSpan->m_drawingPlace); segment->AppendSpanningCoordinates(segment->m_placementInfo->m_measure); // Draw corresponding beam segment From 5b7ced1378bec559ac38667d819193f4c38c3077 Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 11 Jan 2021 18:36:57 +0200 Subject: [PATCH 373/403] Fix beamspan positioning for the cross-staff - fixed placement/overlaps/etc. for beamspans and their elements in the cross-staff cases - improved beam overlap logic to work for cross-staff as well --- src/beamspan.cpp | 17 +++-------------- src/object.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/beamspan.cpp b/src/beamspan.cpp index 64a68e233e0..f01f9c53085 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -200,16 +200,6 @@ int BeamSpan::ResolveBeamSpanElements(FunctorParams *functorParams) m_beamedElements = HasPlist() ? *GetRefs() : GetBeamSpanElementList(layer, staff); - // Find whether this beamSpan is crossStaff - if there are beamed elements that belong - // to differen staffs we can consider this beamSpan as such - bool isCrossStaff = false; - for (const auto element : m_beamedElements) { - if (element->GetFirstAncestor(STAFF) != staff) { - isCrossStaff = true; - break; - } - } - // set current beamSpan as referencedElement for all beamed elemenents (for the // sake of figuring if corresponding element is in beamSpan) for (const auto element : m_beamedElements) { @@ -218,11 +208,10 @@ int BeamSpan::ResolveBeamSpanElements(FunctorParams *functorParams) layerElem->m_referencedElement = this; - if (isCrossStaff) { + Staff *elementStaff = vrv_cast(layerElem->GetFirstAncestor(STAFF)); + if (elementStaff->GetN() != staff->GetN()) { Layer *elementLayer = vrv_cast(layerElem->GetFirstAncestor(LAYER)); - Staff *elementStaff = vrv_cast(layerElem->GetFirstAncestor(STAFF)); - if (!layer || !staff || layerElem->m_crossStaff) continue; - + if (!elementStaff || !elementLayer) continue; layerElem->m_crossStaff = elementStaff; layerElem->m_crossLayer = elementLayer; } diff --git a/src/object.cpp b/src/object.cpp index 9611d1ef709..2606ece7e3f 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -1929,6 +1929,30 @@ int Object::SetOverflowBBoxes(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } + // Take into account beam in cross-staff situation + if (this->Is(BEAM)) { + Beam *beam = vrv_cast(this); + assert(beam); + // Ignore it if it has cross-staff content but is not entirely cross-staff itself + if (beam->m_crossStaffContent && !beam->m_crossStaff) return FUNCTOR_CONTINUE; + } + + // Take into account stem for notes in cross-staff situation and in beams + if (this->Is(STEM)) { + LayerElement *noteOrChord = dynamic_cast(this->GetParent()); + if (noteOrChord && noteOrChord->m_crossStaff) { + if (noteOrChord->IsInBeam()) { + Beam *beam = vrv_cast(noteOrChord->GetFirstAncestor(BEAM)); + assert(beam); + // Ignore it but only if the beam is not entirely cross-staff itself + if (!beam->m_crossStaff) return FUNCTOR_CONTINUE; + } + else if (noteOrChord->IsInBeamSpan()) { + return FUNCTOR_CONTINUE; + } + } + } + if (this->Is(FB) || this->Is(FIGURE)) { return FUNCTOR_CONTINUE; } From e67a13bb948dcd3bea439c41971944541ad0d7dd Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 2 Dec 2021 11:18:37 +0200 Subject: [PATCH 374/403] Fixes for the beamSpan after rebase - changed virtual to override - removed redundant variable usage - added this-> to internal beamspan calls - added lost includeChildren flag to FindAllDescendantsBetween - other minor fixes --- include/vrv/beamspan.h | 19 +++++++++---------- include/vrv/object.h | 6 +++--- src/beamspan.cpp | 38 ++++++++++++++++++++------------------ src/layerelement.cpp | 1 + src/object.cpp | 3 ++- 5 files changed, 35 insertions(+), 32 deletions(-) diff --git a/include/vrv/beamspan.h b/include/vrv/beamspan.h index 7fb1d9b3d07..985c01df066 100644 --- a/include/vrv/beamspan.h +++ b/include/vrv/beamspan.h @@ -44,19 +44,18 @@ class BeamSpan : public ControlElement, ///@{ BeamSpan(); virtual ~BeamSpan(); - virtual Object *Clone() const { return new BeamSpan(*this); } - virtual void Reset(); - virtual std::string GetClassName() const { return "BeamSpan"; } - virtual ClassId GetClassId() const { return BEAMSPAN; } + Object *Clone() const override { return new BeamSpan(*this); } + void Reset() override; + std::string GetClassName() const override { return "BeamSpan"; } ///@} /** * @name Getter to interfaces */ ///@{ - virtual PlistInterface *GetPlistInterface() { return dynamic_cast(this); } - virtual TimePointInterface *GetTimePointInterface() { return dynamic_cast(this); } - virtual TimeSpanningInterface *GetTimeSpanningInterface() { return dynamic_cast(this); } + PlistInterface *GetPlistInterface() override { return dynamic_cast(this); } + TimePointInterface *GetTimePointInterface() override { return dynamic_cast(this); } + TimeSpanningInterface *GetTimeSpanningInterface() override { return dynamic_cast(this); } ////@} // Helper to get element list for the beamSpan - elements are acquired from all layerElements that are located @@ -78,17 +77,17 @@ class BeamSpan : public ControlElement, /** * See Object::CalcStem */ - virtual int CalcStem(FunctorParams *functorParams); + int CalcStem(FunctorParams *functorParams) override; /** * See Object::ResolveBeamSpanElements */ - virtual int ResolveBeamSpanElements(FunctorParams *); + int ResolveBeamSpanElements(FunctorParams *) override; /** * See Object::ResolveSpanningBeamSpans */ - virtual int ResolveSpanningBeamSpans(FunctorParams *); + int ResolveSpanningBeamSpans(FunctorParams *) override; private: // Helper for breaking one big spanning beamSpan into smaller beamSpans diff --git a/include/vrv/object.h b/include/vrv/object.h index 75f182a070a..ba8ebdbbb1a 100644 --- a/include/vrv/object.h +++ b/include/vrv/object.h @@ -411,8 +411,8 @@ class Object : public BoundingBox { * Return all the objects matching the Comparison functor and being between start and end in the tree. * The start and end objects are included in the result set. */ - void FindAllDescendantsBetween( - ListOfObjects *objects, Comparison *comparison, Object *start, Object *end, bool clear = true); + void FindAllDescendantsBetween(ListOfObjects *objects, Comparison *comparison, Object *start, Object *end, + bool clear = true, bool includeChildren = true); /** * Give up ownership of the child at the idx position (NULL if not found) @@ -1291,7 +1291,7 @@ class Object : public BoundingBox { ///@} /** - * Resolve spinning beamspans by breaking it into separate parts, each belonging to the corresponding + * Resolve spanning beamspans by breaking it into separate parts, each belonging to the corresponding * system/measure. BeamSpans get elements reassigned, so that each beamSpan can be drawn as control * element. This allows free placement of beamSpan in the MEI tree and ensures that beamSpan will be * drawn properly diff --git a/src/beamspan.cpp b/src/beamspan.cpp index f01f9c53085..92a0342b25b 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -26,9 +26,10 @@ namespace vrv { //---------------------------------------------------------------------------- // BeamSpan //---------------------------------------------------------------------------- +static const ClassRegistrar s_factory("beamSpan", BEAMSPAN); BeamSpan::BeamSpan() - : ControlElement("beamspan-") + : ControlElement(BEAMSPAN, "beamspan-") , BeamDrawingInterface() , PlistInterface() , TimeSpanningInterface() @@ -87,13 +88,13 @@ ArrayOfObjects BeamSpan::GetBeamSpanElementList(Layer *layer, Staff *staff) // find all elements between startId and endId of the beamSpan ClassIdsComparison classIds({ NOTE, CHORD }); ListOfObjects objects; - layer->FindAllDescendantBetween(&objects, &classIds, GetStart(), GetEnd(), true, false); + layer->FindAllDescendantsBetween(&objects, &classIds, this->GetStart(), this->GetEnd(), true, false); ArrayOfObjects beamSpanElements(objects.begin(), objects.end()); // If last element is not equal to the end, there is high chance that this beamSpan is cross-measure. // Look for the same N-staff N-layer in next measure and try finding end there - if (beamSpanElements.back() != GetEnd()) { - Measure *measure = vrv_cast(GetStart()->GetFirstAncestor(MEASURE)); + if (beamSpanElements.back() != this->GetEnd()) { + Measure *measure = vrv_cast(this->GetStart()->GetFirstAncestor(MEASURE)); Object *parent = measure->GetParent(); const int index = parent->GetChildIndex(measure); @@ -109,9 +110,10 @@ ArrayOfObjects BeamSpan::GetBeamSpanElementList(Layer *layer, Staff *staff) ClassIdsComparison classIds({ NOTE, CHORD }); ListOfObjects nextLayerObjects; // pass NULL as starting element to add all elements until end is reached - nextStaffLayer->FindAllDescendantBetween(&nextLayerObjects, &classIds, NULL, GetEnd(), true, false); + nextStaffLayer->FindAllDescendantsBetween( + &nextLayerObjects, &classIds, NULL, this->GetEnd(), true, false); // Handle only next measure for the time being - if (nextLayerObjects.back() == GetEnd()) { + if (nextLayerObjects.back() == this->GetEnd()) { beamSpanElements.insert( beamSpanElements.end(), nextLayerObjects.begin(), nextLayerObjects.end()); } @@ -171,13 +173,13 @@ int BeamSpan::CalcStem(FunctorParams *functorParams) CalcStemParams *params = vrv_params_cast(functorParams); assert(params); - if (!GetStart()) return FUNCTOR_CONTINUE; + if (!this->GetStart()) return FUNCTOR_CONTINUE; - Layer *layer = vrv_cast(GetStart()->GetFirstAncestor(LAYER)); - Staff *staff = vrv_cast(GetStart()->GetFirstAncestor(STAFF)); - Measure *measure = vrv_cast(GetStart()->GetFirstAncestor(MEASURE)); + Layer *layer = vrv_cast(this->GetStart()->GetFirstAncestor(LAYER)); + Staff *staff = vrv_cast(this->GetStart()->GetFirstAncestor(STAFF)); + Measure *measure = vrv_cast(this->GetStart()->GetFirstAncestor(MEASURE)); - InitCoords(&m_beamedElements, staff, GetPlace()); + this->InitCoords(&m_beamedElements, staff, this->GetPlace()); m_beamSegments.at(0)->InitPlacementInformation(measure, staff, layer); m_beamSegments.at(0)->m_placementInfo->m_begin = m_beamElementCoords.begin(); @@ -192,13 +194,13 @@ int BeamSpan::CalcStem(FunctorParams *functorParams) int BeamSpan::ResolveBeamSpanElements(FunctorParams *functorParams) { - if (!m_beamedElements.empty() || !GetStart()) return FUNCTOR_CONTINUE; + if (!m_beamedElements.empty() || !this->GetStart()) return FUNCTOR_CONTINUE; Layer *layer = vrv_cast(GetStart()->GetFirstAncestor(LAYER)); Staff *staff = vrv_cast(GetStart()->GetFirstAncestor(STAFF)); if (!layer || !staff) return FUNCTOR_SIBLINGS; - m_beamedElements = HasPlist() ? *GetRefs() : GetBeamSpanElementList(layer, staff); + m_beamedElements = this->HasPlist() ? *this->GetRefs() : this->GetBeamSpanElementList(layer, staff); // set current beamSpan as referencedElement for all beamed elemenents (for the // sake of figuring if corresponding element is in beamSpan) @@ -227,8 +229,8 @@ int BeamSpan::ResolveSpanningBeamSpans(FunctorParams *functorParams) if (m_beamedElements.empty() || !GetStart() || !GetEnd()) return FUNCTOR_CONTINUE; - Object *startSystem = GetStart()->GetFirstAncestor(SYSTEM); - Object *endSystem = GetEnd()->GetFirstAncestor(SYSTEM); + Object *startSystem = this->GetStart()->GetFirstAncestor(SYSTEM); + Object *endSystem = this->GetEnd()->GetFirstAncestor(SYSTEM); assert(startSystem && endSystem); if (startSystem == endSystem) return FUNCTOR_CONTINUE; @@ -250,16 +252,16 @@ int BeamSpan::ResolveSpanningBeamSpans(FunctorParams *functorParams) // Iterator for the elements are based on the initial order of the elements, so skip current system when // found and process it separatelly in the end - Object *currentSystemn = GetFirstAncestor(SYSTEM); + Object *currentSystemn = this->GetFirstAncestor(SYSTEM); int currentSystemIndex = 0; for (int i = 0; i < elements.size() - 1; ++i) { if (elements.at(i).second == currentSystemn) { currentSystemIndex = i; continue; } - AddSpanningSegment(params->m_doc, elements, i); + this->AddSpanningSegment(params->m_doc, elements, i); } - AddSpanningSegment(params->m_doc, elements, currentSystemIndex, false); + this->AddSpanningSegment(params->m_doc, elements, currentSystemIndex, false); return FUNCTOR_CONTINUE; } diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 28528a536b1..050f634c7b5 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -247,6 +247,7 @@ int LayerElement::GetOriginalLayerN() layerN = vrv_cast(this->GetFirstAncestor(LAYER))->GetN(); } return layerN; +} bool LayerElement::IsInBeamSpan() const { diff --git a/src/object.cpp b/src/object.cpp index 2606ece7e3f..c7b2636af67 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -583,13 +583,14 @@ void Object::FindAllDescendantsByComparison( } void Object::FindAllDescendantsBetween( - ListOfObjects *objects, Comparison *comparison, Object *start, Object *end, bool clear) + ListOfObjects *objects, Comparison *comparison, Object *start, Object *end, bool clear, bool includeChildren) { assert(objects); if (clear) objects->clear(); Functor findAllBetween(&Object::FindAllBetween); FindAllBetweenParams findAllBetweenParams(comparison, objects, start, end); + findAllBetweenParams.m_includeChildren = includeChildren; this->Process(&findAllBetween, &findAllBetweenParams, NULL, NULL, UNLIMITED_DEPTH, FORWARD, true); } From 8518e7cb4c39f45f94f6c24d80c21e878a10d7ab Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 26 Jan 2022 14:52:06 +0200 Subject: [PATCH 375/403] Fix beamspan behavior - adjusted code to support beamspans over multiple measures (for 3 or more measure) - adjusted logic for beamspans to be rendered when sysem break separates beamspan with just 2 elements --- src/beam.cpp | 15 +++++++++++-- src/beamspan.cpp | 57 +++++++++++++++++++++++++++--------------------- 2 files changed, 45 insertions(+), 27 deletions(-) diff --git a/src/beam.cpp b/src/beam.cpp index 98be0006c3d..13ac4d969aa 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -123,7 +123,10 @@ void BeamSegment::AppendSpanningCoordinates(Measure *measure) const int rightSide = bar->GetDrawingX(); BeamElementCoord *front = m_beamElementCoordRefs.front(); BeamElementCoord *back = m_beamElementCoordRefs.back(); - const double slope = (double)(back->m_yBeam - front->m_yBeam) / (double)(back->m_x - front->m_x); + double slope = 0.0; + if (m_beamElementCoordRefs.size() > 1) { + slope = (double)(back->m_yBeam - front->m_yBeam) / (double)(back->m_x - front->m_x); + } // in case if beamSpan starts in current system - stretch beam to the right barline if ((SPANNING_START == spanningType) || (SPANNING_MIDDLE == spanningType)) { @@ -137,7 +140,15 @@ void BeamSegment::AppendSpanningCoordinates(Measure *measure) if ((SPANNING_END == spanningType) || (SPANNING_MIDDLE == spanningType)) { BeamElementCoord *left = new BeamElementCoord(*front); const int width = measure->GetInnerWidth(); - const int offset = (back->m_x - front->m_x) / (m_beamElementCoordRefs.size() - 1) / 2; + int offset = 0; + if (m_beamElementCoordRefs.size() > 1) { + const int divideBy = 2 * (m_beamElementCoordRefs.size() - 1); + offset = (back->m_x - front->m_x) / divideBy; + } + else { + // 1.5 * unit offset in this case (harcoded for the time being) + offset = 270; + } left->m_x -= offset; left->m_yBeam -= offset * slope; m_beamElementCoordRefs.insert(m_beamElementCoordRefs.begin(), left); diff --git a/src/beamspan.cpp b/src/beamspan.cpp index 92a0342b25b..a8a0f93b10f 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -93,33 +93,40 @@ ArrayOfObjects BeamSpan::GetBeamSpanElementList(Layer *layer, Staff *staff) ArrayOfObjects beamSpanElements(objects.begin(), objects.end()); // If last element is not equal to the end, there is high chance that this beamSpan is cross-measure. // Look for the same N-staff N-layer in next measure and try finding end there - if (beamSpanElements.back() != this->GetEnd()) { - Measure *measure = vrv_cast(this->GetStart()->GetFirstAncestor(MEASURE)); - Object *parent = measure->GetParent(); - - const int index = parent->GetChildIndex(measure); - Measure *nextMeasure = vrv_cast(parent->GetNext(measure, MEASURE)); - if (nextMeasure) { - AttNIntegerComparison snc(STAFF, staff->GetN()); - Staff *nextStaff = vrv_cast(nextMeasure->FindDescendantByComparison(&snc)); - if (nextStaff) { - AttNIntegerComparison lnc(LAYER, layer->GetN()); - Layer *nextStaffLayer = vrv_cast(nextStaff->FindDescendantByComparison(&lnc)); - if (nextStaffLayer) { - // find all elements between startId and endId of the beamSpan - ClassIdsComparison classIds({ NOTE, CHORD }); - ListOfObjects nextLayerObjects; - // pass NULL as starting element to add all elements until end is reached - nextStaffLayer->FindAllDescendantsBetween( - &nextLayerObjects, &classIds, NULL, this->GetEnd(), true, false); - // Handle only next measure for the time being - if (nextLayerObjects.back() == this->GetEnd()) { - beamSpanElements.insert( - beamSpanElements.end(), nextLayerObjects.begin(), nextLayerObjects.end()); - } - } + Measure *startMeasure = vrv_cast(this->GetStart()->GetFirstAncestor(MEASURE)); + Measure *endMeasure = vrv_cast(this->GetEnd()->GetFirstAncestor(MEASURE)); + Measure *nextMeasure = NULL; + while ((beamSpanElements.back() != this->GetEnd()) && (startMeasure != endMeasure)) { + Object *parent = startMeasure->GetParent(); + + nextMeasure = vrv_cast(parent->GetNext(startMeasure, MEASURE)); + if (!nextMeasure) break; + + AttNIntegerComparison snc(STAFF, staff->GetN()); + Staff *nextStaff = vrv_cast(nextMeasure->FindDescendantByComparison(&snc)); + if (!nextStaff) break; + + AttNIntegerComparison lnc(LAYER, layer->GetN()); + Layer *nextStaffLayer = vrv_cast(nextStaff->FindDescendantByComparison(&lnc)); + if (!nextStaffLayer) break; + + // find all elements between startId and endId of the beamSpan + ClassIdsComparison classIds({ NOTE, CHORD }); + ListOfObjects nextLayerObjects; + // pass NULL as starting element to add all elements until end is reached + if (endMeasure == nextMeasure) { + nextStaffLayer->FindAllDescendantsBetween(&nextLayerObjects, &classIds, NULL, this->GetEnd(), true, false); + // Handle only next measure for the time being + if (nextLayerObjects.back() == this->GetEnd()) { + beamSpanElements.insert(beamSpanElements.end(), nextLayerObjects.begin(), nextLayerObjects.end()); } } + else { + nextStaffLayer->FindAllDescendantsByComparison(&nextLayerObjects, &classIds); + beamSpanElements.insert(beamSpanElements.end(), nextLayerObjects.begin(), nextLayerObjects.end()); + } + + startMeasure = nextMeasure; } return beamSpanElements; From 4b204344488f426be0c617bbd8675efb0c468c93 Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 27 Jan 2022 17:18:29 +0200 Subject: [PATCH 376/403] Add handling of the beamSpans when improting from MusicXML --- include/vrv/iomusxml.h | 11 +++++++- src/iomusxml.cpp | 58 +++++++++++++++++++++++++++++++++++++----- 2 files changed, 61 insertions(+), 8 deletions(-) diff --git a/include/vrv/iomusxml.h b/include/vrv/iomusxml.h index 6f4d23c8dd1..184844269a9 100644 --- a/include/vrv/iomusxml.h +++ b/include/vrv/iomusxml.h @@ -26,6 +26,7 @@ namespace vrv { class Arpeg; +class BeamSpan; class BracketSpan; class Clef; class ControlElement; @@ -218,7 +219,7 @@ class MusicXmlInput : public Input { void ReadMusicXmlNote( pugi::xml_node, Measure *measure, const std::string &measureNum, const short int staffOffset, Section *section); void ReadMusicXmlPrint(pugi::xml_node, Section *section); - void ReadMusicXmlBeamsAndTuplets(const pugi::xml_node &node, Layer *layer, bool isChord); + bool ReadMusicXmlBeamsAndTuplets(const pugi::xml_node &node, Layer *layer, bool isChord); void ReadMusicXmlTupletStart(const pugi::xml_node &node, const pugi::xml_node &tupletStart, Layer *layer); void ReadMusicXmlBeamStart(const pugi::xml_node &node, const pugi::xml_node &beamStart, Layer *layer); void ReadMusicXMLMeterSig(const pugi::xml_node &node, Object *parent); @@ -292,6 +293,11 @@ class MusicXmlInput : public Input { */ void RemoveLastFromStack(ClassId classId, Layer *layer); + /** + * Check if element of classId type is present on the specified layer + */ + bool IsInStack(ClassId classId, Layer *layer); + /* * @name Helper methods for checking presence of values of attributes or elements */ @@ -327,6 +333,7 @@ class MusicXmlInput : public Input { void CloseTie(Note *note); void OpenSlur(Measure *measure, short int number, Slur *slur); void CloseSlur(Measure *measure, short int number, LayerElement *element); + void CloseBeamSpan(Staff *staff, Layer *layer, LayerElement *element); ///@} /* @@ -484,6 +491,8 @@ class MusicXmlInput : public Input { /* The stack for hairpin stops that might occur before a hairpin was started staffNumber, tStamp2, (hairpinNumber, * measureCount) */ std::vector> m_hairpinStopStack; + /* The stack for the beamspans with numbers of staff/layer where starting element is located*/ + std::vector>> m_beamspanStack; std::vector> m_bracketStack; std::vector> m_trillStack; /* The stack of endings to be inserted at the end of XML import */ diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index 0a0263992ca..8c9f008d3b8 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -18,6 +18,7 @@ #include "arpeg.h" #include "beam.h" +#include "beamspan.h" #include "beatrpt.h" #include "bracketspan.h" #include "breath.h" @@ -480,6 +481,13 @@ void MusicXmlInput::RemoveLastFromStack(ClassId classId, Layer *layer) } } +bool MusicXmlInput::IsInStack(ClassId classId, Layer *layer) +{ + return (m_elementStackMap.at(layer).end() + != std::find_if(m_elementStackMap.at(layer).begin(), m_elementStackMap.at(layer).end(), + [classId](LayerElement *element) { return element->Is(classId); })); +} + void MusicXmlInput::FillSpace(Layer *layer, int dur) { assert(layer); @@ -561,6 +569,17 @@ void MusicXmlInput::CloseSlur(Measure *measure, short int number, LayerElement * m_slurStopStack.push_back({ element, closeSlur }); } +void MusicXmlInput::CloseBeamSpan(Staff* staff, Layer* layer, LayerElement* element) +{ + for (auto riter = m_beamspanStack.rbegin(); riter != m_beamspanStack.rend(); ++riter) { + if ((riter->second.first == staff->GetN()) || (riter->second.second == layer->GetN())) { + riter->first->SetEndid("#" + element->GetUuid()); + m_beamspanStack.erase(std::next(riter).base()); + return; + } + } +} + ////////////////////////////////////////////////////////////////////////////// // Text rendering @@ -1085,6 +1104,11 @@ bool MusicXmlInput::ReadMusicXml(pugi::xml_node root) m_doc->ConvertToPageBasedDoc(); // clean up stacks + if (!m_beamspanStack.empty()) { + LogWarning("MusicXML import: There are %d beamspans left without ending", m_beamspanStack.size()); + m_beamspanStack.clear(); + } + if (!m_tieStack.empty()) { LogWarning("MusicXML import: There are %d ties left open", m_tieStack.size()); m_tieStack.clear(); @@ -2553,8 +2577,6 @@ void MusicXmlInput::ReadMusicXmlNote( short int tremSlashNum = -1; - ReadMusicXmlBeamsAndTuplets(node, layer, isChord); - // beam start bool beamStart = node.select_node("beam[@number='1'][text()='begin']"); // tremolos @@ -2879,6 +2901,14 @@ void MusicXmlInput::ReadMusicXmlNote( } } + // beam / beamspan + if (!ReadMusicXmlBeamsAndTuplets(node, layer, isChord)) { + BeamSpan *meiBeamSpan = new BeamSpan(); + meiBeamSpan->SetStartid("#" + element->GetUuid()); + m_controlElements.push_back({ measureNum, meiBeamSpan }); + m_beamspanStack.push_back({ meiBeamSpan, { staff->GetN(), layer->GetN() } }); + } + // verse / syl for (pugi::xml_node lyric : node.children("lyric")) { short int lyricNumber = lyric.attribute("number").as_int(); @@ -3482,7 +3512,12 @@ void MusicXmlInput::ReadMusicXmlNote( } } else { - RemoveLastFromStack(BEAM, layer); + if (IsInStack(BEAM, layer)) { + RemoveLastFromStack(BEAM, layer); + } + else { + CloseBeamSpan(staff, layer, element); + } } } @@ -3552,7 +3587,7 @@ void MusicXmlInput::ReadMusicXmlPrint(pugi::xml_node node, Section *section) } } -void MusicXmlInput::ReadMusicXmlBeamsAndTuplets(const pugi::xml_node &node, Layer *layer, bool isChord) +bool MusicXmlInput::ReadMusicXmlBeamsAndTuplets(const pugi::xml_node &node, Layer *layer, bool isChord) { pugi::xpath_node beamStart = node.select_node("beam[@number='1' and text()='begin']"); pugi::xpath_node tupletStart = node.select_node("notations/tuplet[@type='start']"); @@ -3591,12 +3626,19 @@ void MusicXmlInput::ReadMusicXmlBeamsAndTuplets(const pugi::xml_node &node, Laye const auto beamStartIterator = std::find(currentMeasureNodes.begin(), currentMeasureNodes.end(), node); const auto beamEndIterator = std::find(beamStartIterator, currentMeasureNodes.end(), beamEnd); - if (beamEndIterator == currentMeasureNodes.end()) { + // find staff number for the corresponding elements - we do not want to match beam start on one staff with beam + // end on another + pugi::xpath_node nodeStaff = node.select_node("staff"); + pugi::xpath_node endBeamStaff = beamEnd.select_node("staff"); + + if (beamEndIterator == currentMeasureNodes.end() + || (nodeStaff && endBeamStaff + && (nodeStaff.node().text().as_int() != endBeamStaff.node().text().as_int()))) { std::string measureName = (currentMeasure.node().attribute("id")) ? currentMeasure.node().attribute("id").as_string() : currentMeasure.node().attribute("number").as_string(); - LogError("MusicXML import: Beam without end in measure %s", measureName.c_str()); - return; + LogWarning("MusicXML import: Beam without end in measure %s treated as ", measureName.c_str()); + return false; } // form vector of the beam nodes and find whether there are tuplets that start or end within the beam std::vector beamNodes(beamStartIterator, beamEndIterator + 1); @@ -3618,6 +3660,8 @@ void MusicXmlInput::ReadMusicXmlBeamsAndTuplets(const pugi::xml_node &node, Laye else if (tupletStart) { if (!isChord) ReadMusicXmlTupletStart(node, tupletStart.node(), layer); } + + return true; } void MusicXmlInput::ReadMusicXmlTupletStart(const pugi::xml_node &node, const pugi::xml_node &tupletStart, Layer *layer) From bbfe18d77a355057fe177d7526b1e97e94bc8d70 Mon Sep 17 00:00:00 2001 From: Monceber Date: Mon, 7 Feb 2022 18:25:19 +0200 Subject: [PATCH 377/403] Minor fixes - added missing `this` keyword - added check for GetEnd() being initialized in several places - formatting --- include/vrv/beamspan.h | 5 +++-- src/beamspan.cpp | 23 +++++++++++------------ src/view_beam.cpp | 4 ++-- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/include/vrv/beamspan.h b/include/vrv/beamspan.h index 985c01df066..347a6ede0d3 100644 --- a/include/vrv/beamspan.h +++ b/include/vrv/beamspan.h @@ -35,7 +35,8 @@ class BeamSpan : public ControlElement, public AttBeamRend, public AttColor { private: - using SpanIndexVector = std::vector >; + using SpanIndexVector = std::vector>; + public: /** * @name Constructors, destructors, and other standard methods @@ -60,7 +61,7 @@ class BeamSpan : public ControlElement, // Helper to get element list for the beamSpan - elements are acquired from all layerElements that are located // in between start and end of the beamSpan - ArrayOfObjects GetBeamSpanElementList(Layer* layer, Staff* staff); + ArrayOfObjects GetBeamSpanElementList(Layer *layer, Staff *staff); /** * @name Initialize and cleam beam segments diff --git a/src/beamspan.cpp b/src/beamspan.cpp index a8a0f93b10f..aa1af57c1c6 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -45,10 +45,10 @@ BeamSpan::BeamSpan() RegisterAttClass(ATT_PLIST); Reset(); - InitBeamSegments(); + InitBeamSegments(); } -BeamSpan::~BeamSpan() +BeamSpan::~BeamSpan() { ClearBeamSegments(); } @@ -67,7 +67,7 @@ void BeamSpan::Reset() ClearBeamSegments(); } -void BeamSpan::InitBeamSegments() +void BeamSpan::InitBeamSegments() { // BeamSpan should have at least one segment to begin with m_beamSegments.emplace_back(new BeamSegment()); @@ -124,7 +124,7 @@ ArrayOfObjects BeamSpan::GetBeamSpanElementList(Layer *layer, Staff *staff) else { nextStaffLayer->FindAllDescendantsByComparison(&nextLayerObjects, &classIds); beamSpanElements.insert(beamSpanElements.end(), nextLayerObjects.begin(), nextLayerObjects.end()); - } + } startMeasure = nextMeasure; } @@ -146,7 +146,6 @@ bool BeamSpan::AddSpanningSegment(Doc *doc, const SpanIndexVector &elements, int [&](BeamElementCoord *coord) { return coord->m_element == *(elements.at(index + 1).first - 1); }); if ((coordsFirst == m_beamElementCoords.end()) || (coordsLast == m_beamElementCoords.end())) return false; - BeamSegment *segment = NULL; if (newSegment) { segment = new BeamSegment(); @@ -180,7 +179,7 @@ int BeamSpan::CalcStem(FunctorParams *functorParams) CalcStemParams *params = vrv_params_cast(functorParams); assert(params); - if (!this->GetStart()) return FUNCTOR_CONTINUE; + if (!this->GetStart() || !this->GetEnd()) return FUNCTOR_CONTINUE; Layer *layer = vrv_cast(this->GetStart()->GetFirstAncestor(LAYER)); Staff *staff = vrv_cast(this->GetStart()->GetFirstAncestor(STAFF)); @@ -194,17 +193,17 @@ int BeamSpan::CalcStem(FunctorParams *functorParams) ArrayOfBeamElementCoords coord( m_beamSegments.at(0)->m_placementInfo->m_begin, m_beamSegments.at(0)->m_placementInfo->m_end); m_beamSegments.at(0)->InitCoordRefs(&coord); - m_beamSegments.at(0)->CalcBeam(layer, staff, params->m_doc, this, GetPlace()); + m_beamSegments.at(0)->CalcBeam(layer, staff, params->m_doc, this, this->GetPlace()); return FUNCTOR_CONTINUE; } int BeamSpan::ResolveBeamSpanElements(FunctorParams *functorParams) { - if (!m_beamedElements.empty() || !this->GetStart()) return FUNCTOR_CONTINUE; + if (!m_beamedElements.empty() || !this->GetStart() || !this->GetEnd()) return FUNCTOR_CONTINUE; - Layer *layer = vrv_cast(GetStart()->GetFirstAncestor(LAYER)); - Staff *staff = vrv_cast(GetStart()->GetFirstAncestor(STAFF)); + Layer *layer = vrv_cast(this->GetStart()->GetFirstAncestor(LAYER)); + Staff *staff = vrv_cast(this->GetStart()->GetFirstAncestor(STAFF)); if (!layer || !staff) return FUNCTOR_SIBLINGS; m_beamedElements = this->HasPlist() ? *this->GetRefs() : this->GetBeamSpanElementList(layer, staff); @@ -234,7 +233,7 @@ int BeamSpan::ResolveSpanningBeamSpans(FunctorParams *functorParams) FunctorDocParams *params = vrv_params_cast(functorParams); assert(params); - if (m_beamedElements.empty() || !GetStart() || !GetEnd()) return FUNCTOR_CONTINUE; + if (m_beamedElements.empty() || !this->GetStart() || !this->GetEnd()) return FUNCTOR_CONTINUE; Object *startSystem = this->GetStart()->GetFirstAncestor(SYSTEM); Object *endSystem = this->GetEnd()->GetFirstAncestor(SYSTEM); @@ -248,7 +247,7 @@ int BeamSpan::ResolveSpanningBeamSpans(FunctorParams *functorParams) Object *firstSystem = startSystem; while (iter != m_beamedElements.end()) { elements.push_back({ iter, firstSystem }); - iter = find_if(iter, m_beamedElements.end(), [&firstSystem](Object *element) { + iter = std::find_if(iter, m_beamedElements.end(), [&firstSystem](Object *element) { Object *parentSystem = element->GetFirstAncestor(SYSTEM); if (firstSystem == parentSystem) return false; firstSystem = parentSystem; diff --git a/src/view_beam.cpp b/src/view_beam.cpp index e83d961fe63..a0b4f5fd9e4 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -438,8 +438,8 @@ void View::DrawBeamSpan(DeviceContext *dc, BeamSpan *beamSpan, Measure *measure) segment->AppendSpanningCoordinates(segment->m_placementInfo->m_measure); // Draw corresponding beam segment - DrawBeamSegment(dc, segment, beamSpan, segment->m_placementInfo->m_layer, segment->m_placementInfo->m_staff, - segment->m_placementInfo->m_measure); + this->DrawBeamSegment(dc, segment, beamSpan, segment->m_placementInfo->m_layer, + segment->m_placementInfo->m_staff, segment->m_placementInfo->m_measure); } dc->EndGraphic(beamSpan, this); From cba209a4cda5ed2ab0ce836592b9a1f9352743f3 Mon Sep 17 00:00:00 2001 From: Monceber Date: Tue, 8 Feb 2022 18:44:31 +0200 Subject: [PATCH 378/403] Fix beamspans over several measures before system break - change code to use correct measures to determine position of beam over the system break - small fixes for redundant code --- include/vrv/beam.h | 2 +- include/vrv/view.h | 4 ++-- src/beam.cpp | 3 +-- src/beamspan.cpp | 24 ++++++++++++++++++------ src/view_beam.cpp | 11 +++++------ 5 files changed, 27 insertions(+), 17 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 07d5c8e1e4e..753e8e9dd70 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -84,7 +84,7 @@ class BeamSegment { * Initialize placement information for the segment. Should be used with beamSpan to specify which staff/layer it * belongs to */ - void InitPlacementInformation(Measure *measure, Staff *staff, Layer *layer); + void InitPlacementInformation(Staff *staff, Layer *layer); /** * Clear the m_beamElementCoords vector and delete all the objects. diff --git a/include/vrv/view.h b/include/vrv/view.h index 56f8a6d6ccc..2475fdc382c 100644 --- a/include/vrv/view.h +++ b/include/vrv/view.h @@ -602,8 +602,8 @@ class View { /** * Internal method for drawing a BeamSegment */ - void DrawBeamSegment(DeviceContext *dc, BeamSegment *segment, BeamDrawingInterface *beamInterface, Layer *layer, - Staff *staff, Measure *measure); + void DrawBeamSegment( + DeviceContext *dc, BeamSegment *segment, BeamDrawingInterface *beamInterface, Layer *layer, Staff *staff); /** * Internal methods for drawing time spanning elements diff --git a/src/beam.cpp b/src/beam.cpp index 13ac4d969aa..e593070747a 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -103,12 +103,11 @@ void BeamSegment::InitCoordRefs(const ArrayOfBeamElementCoords *beamElementCoord m_beamElementCoordRefs = *beamElementCoords; } -void BeamSegment::InitPlacementInformation(Measure* measure, Staff* staff, Layer* layer) +void BeamSegment::InitPlacementInformation(Staff *staff, Layer *layer) { if (!m_placementInfo) { m_placementInfo = new BeamSegmentPlacementInfo(); } - m_placementInfo->m_measure = measure; m_placementInfo->m_staff = staff; m_placementInfo->m_layer = layer; } diff --git a/src/beamspan.cpp b/src/beamspan.cpp index aa1af57c1c6..34e9ca4ca36 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -136,8 +136,7 @@ bool BeamSpan::AddSpanningSegment(Doc *doc, const SpanIndexVector &elements, int { Layer *layer = vrv_cast((*elements.at(index).first)->GetFirstAncestor(LAYER)); Staff *staff = vrv_cast((*elements.at(index).first)->GetFirstAncestor(STAFF)); - Measure *measure = vrv_cast((*elements.at(index).first)->GetFirstAncestor(MEASURE)); - if (!layer || !staff || !measure) return false; + if (!layer || !staff) return false; // get iterators for first and last coordinates in the range for the segment auto coordsFirst = std::find_if(m_beamElementCoords.begin(), m_beamElementCoords.end(), @@ -156,12 +155,24 @@ bool BeamSpan::AddSpanningSegment(Doc *doc, const SpanIndexVector &elements, int // Init segment with placement information (measure, staff, etc.) as well as begin/end coordinates ArrayOfBeamElementCoords coords(coordsFirst, coordsLast + 1); - segment->InitPlacementInformation(measure, staff, layer); + segment->InitPlacementInformation(staff, layer); segment->m_placementInfo->m_begin = coordsFirst; segment->m_placementInfo->m_end = coordsLast + 1; segment->InitCoordRefs(&coords); segment->CalcBeam(layer, staff, doc, this, m_drawingPlace); segment->m_placementInfo->SetSpanningType(index, elements.size() - 1); + Measure *measure = NULL; + Object *currentSystem = layer->GetFirstAncestor(SYSTEM); + if (segment->m_placementInfo->m_spanningType == SPANNING_START) { + segment->m_placementInfo->m_measure = vrv_cast(currentSystem->GetLast(MEASURE)); + } + else if (segment->m_placementInfo->m_spanningType == SPANNING_END) { + segment->m_placementInfo->m_measure = vrv_cast(currentSystem->GetFirst(MEASURE)); + } + else { + segment->m_placementInfo->m_measure + = vrv_cast((*elements.at(index).first)->GetFirstAncestor(MEASURE)); + } if (newSegment) { m_beamSegments.push_back(segment); @@ -187,7 +198,8 @@ int BeamSpan::CalcStem(FunctorParams *functorParams) this->InitCoords(&m_beamedElements, staff, this->GetPlace()); - m_beamSegments.at(0)->InitPlacementInformation(measure, staff, layer); + m_beamSegments.at(0)->InitPlacementInformation(staff, layer); + m_beamSegments.at(0)->m_placementInfo->m_measure = measure; m_beamSegments.at(0)->m_placementInfo->m_begin = m_beamElementCoords.begin(); m_beamSegments.at(0)->m_placementInfo->m_end = m_beamElementCoords.end(); ArrayOfBeamElementCoords coord( @@ -258,10 +270,10 @@ int BeamSpan::ResolveSpanningBeamSpans(FunctorParams *functorParams) // Iterator for the elements are based on the initial order of the elements, so skip current system when // found and process it separatelly in the end - Object *currentSystemn = this->GetFirstAncestor(SYSTEM); + Object *currentSystem = this->GetFirstAncestor(SYSTEM); int currentSystemIndex = 0; for (int i = 0; i < elements.size() - 1; ++i) { - if (elements.at(i).second == currentSystemn) { + if (elements.at(i).second == currentSystem) { currentSystemIndex = i; continue; } diff --git a/src/view_beam.cpp b/src/view_beam.cpp index a0b4f5fd9e4..14407427896 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -79,7 +79,7 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf // Draw the beamSegment - but not if it is a secondary beam in a stem.sameas if (!beam->m_beamSegment.StemSameasIsSecondary()) - this->DrawBeamSegment(dc, &beam->m_beamSegment, beam, layer, staff, measure); + this->DrawBeamSegment(dc, &beam->m_beamSegment, beam, layer, staff); dc->EndGraphic(element, this); } @@ -214,15 +214,14 @@ void View::DrawFTrem(DeviceContext *dc, LayerElement *element, Layer *layer, Sta dc->EndGraphic(element, this); } -void View::DrawBeamSegment(DeviceContext *dc, BeamSegment *beamSegment, BeamDrawingInterface *beamInterface, - Layer *layer, Staff *staff, Measure *measure) +void View::DrawBeamSegment( + DeviceContext *dc, BeamSegment *beamSegment, BeamDrawingInterface *beamInterface, Layer *layer, Staff *staff) { assert(dc); assert(beamSegment); assert(beamInterface); assert(layer); assert(staff); - assert(measure); // temporary coordinates int x1, x2, y1, y2; @@ -438,8 +437,8 @@ void View::DrawBeamSpan(DeviceContext *dc, BeamSpan *beamSpan, Measure *measure) segment->AppendSpanningCoordinates(segment->m_placementInfo->m_measure); // Draw corresponding beam segment - this->DrawBeamSegment(dc, segment, beamSpan, segment->m_placementInfo->m_layer, - segment->m_placementInfo->m_staff, segment->m_placementInfo->m_measure); + this->DrawBeamSegment( + dc, segment, beamSpan, segment->m_placementInfo->m_layer, segment->m_placementInfo->m_staff); } dc->EndGraphic(beamSpan, this); From 5b4ec5db08783c1c45329abd94538812384ea53f Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 9 Feb 2022 17:44:35 +0200 Subject: [PATCH 379/403] Change parts of implementation for beamspan - replaced m_referencedElement variable (LayerElement.cpp) with vector of spanned elements (Measure.cpp) to reduce usage of memory for relatated elements - replaced iterators in BeamSegmentPlacementInfo with pointers to coordinates - this should help avoiding cases with iterator invalidation - removed redundant method from iomei (ReadBeamSpanAsBeam) - added `this` keyword where appropriate - variety of typo fixes and other small adjustments --- include/vrv/beam.h | 12 +++-- include/vrv/beamspan.h | 10 ++--- include/vrv/iomei.h | 1 - include/vrv/layerelement.h | 5 --- include/vrv/measure.h | 10 +++++ src/beam.cpp | 7 +-- src/beamspan.cpp | 27 +++++------- src/chord.cpp | 4 +- src/doc.cpp | 2 +- src/iomei.cpp | 89 +++----------------------------------- src/layerelement.cpp | 7 ++- src/measure.cpp | 12 +++++ src/note.cpp | 2 +- src/object.cpp | 2 +- src/view_beam.cpp | 12 ++++- 15 files changed, 70 insertions(+), 132 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 753e8e9dd70..f0e0be70437 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -31,16 +31,14 @@ enum { PARTIAL_NONE = 0, PARTIAL_THROUGH, PARTIAL_RIGHT, PARTIAL_LEFT }; // Structure for storing additional information regarding beamSegment placement (in case of beam/beamSpan spanning over // the systems struct BeamSegmentPlacementInfo { -private: - using CoordIter = ArrayOfBeamElementCoords::iterator; public: - BeamSegmentPlacementInfo() : m_measure(NULL), m_staff(NULL), m_layer(NULL), m_spanningType(SPANNING_START_END) {} + BeamSegmentPlacementInfo() = default; Measure *m_measure; Staff *m_staff; Layer *m_layer; - int m_spanningType; - CoordIter m_begin; - CoordIter m_end; + int m_spanningType = SPANNING_START_END; + BeamElementCoord *m_begin; + BeamElementCoord *m_end; // Set spanning type based on the positioning of the beam segment void SetSpanningType(int systemIndex, int systemCount); @@ -79,7 +77,7 @@ class BeamSegment { * This is called by Beam::FilterList */ void InitCoordRefs(const ArrayOfBeamElementCoords *beamElementCoords); - + /** * Initialize placement information for the segment. Should be used with beamSpan to specify which staff/layer it * belongs to diff --git a/include/vrv/beamspan.h b/include/vrv/beamspan.h index 347a6ede0d3..3747313ce47 100644 --- a/include/vrv/beamspan.h +++ b/include/vrv/beamspan.h @@ -59,12 +59,8 @@ class BeamSpan : public ControlElement, TimeSpanningInterface *GetTimeSpanningInterface() override { return dynamic_cast(this); } ////@} - // Helper to get element list for the beamSpan - elements are acquired from all layerElements that are located - // in between start and end of the beamSpan - ArrayOfObjects GetBeamSpanElementList(Layer *layer, Staff *staff); - /** - * @name Initialize and cleam beam segments + * @name Initialize and clear beam segments */ ///@{ void InitBeamSegments(); @@ -94,6 +90,10 @@ class BeamSpan : public ControlElement, // Helper for breaking one big spanning beamSpan into smaller beamSpans bool AddSpanningSegment(Doc *doc, const SpanIndexVector &elements, int index, bool newSegment = true); + // Helper to get element list for the beamSpan - elements are acquired from all layerElements that are located + // in between start and end of the beamSpan + ArrayOfObjects GetBeamSpanElementList(Layer *layer, Staff *staff); + public: // std::vector m_beamSegments; diff --git a/include/vrv/iomei.h b/include/vrv/iomei.h index 0687f70c719..d960060a2c5 100644 --- a/include/vrv/iomei.h +++ b/include/vrv/iomei.h @@ -788,7 +788,6 @@ class MEIInput : public Input { ///@{ bool ReadFacsimile(Doc *doc, pugi::xml_node facsimile); bool ReadSurface(Facsimile *parent, pugi::xml_node surface); - bool ReadBeamSpanAsBeam(Measure *measure, pugi::xml_node beamSpan); bool ReadTupletSpanAsTuplet(Measure *measure, pugi::xml_node tupletSpan); bool ReadZone(Surface *parent, pugi::xml_node zone); ///@} diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index 88ba1714234..f7529770a7d 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -484,11 +484,6 @@ class LayerElement : public Object, Staff *m_crossStaff; Layer *m_crossLayer; - /** - * This stores a pointer to the beamSpan (if any) that covers this LayerElement - */ - Object *m_referencedElement; - protected: Alignment *m_alignment; diff --git a/include/vrv/measure.h b/include/vrv/measure.h index 01ca6022338..cd6931f0f4d 100644 --- a/include/vrv/measure.h +++ b/include/vrv/measure.h @@ -262,6 +262,14 @@ class Measure : public Object, */ std::vector> GetInternalTieEndpoints(); + /** + * Add element to the list of spanning objects or check if element is in the list + */ + ///@{ + bool IsInSpanningObjects(const Object *object) const; + void AddToSpanningObjects(Object *object); + ///@} + //----------// // Functors // //----------// @@ -571,6 +579,8 @@ class Measure : public Object, double m_currentTempo; std::map m_invisibleStaffBarlines; + // vector containing pointers to elements that belong to any of the beamspans in measure + std::vector m_spanningObjects; }; } // namespace vrv diff --git a/src/beam.cpp b/src/beam.cpp index e593070747a..4be93b33ae6 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -36,7 +36,6 @@ namespace vrv { - void BeamSegmentPlacementInfo::SetSpanningType(int systemIndex, int systemCount) { if (0 == systemIndex) { @@ -65,7 +64,6 @@ BeamSegment::~BeamSegment() this->ClearCoordRefs(); if (m_placementInfo) { delete m_placementInfo; - m_placementInfo = NULL; } } @@ -138,10 +136,9 @@ void BeamSegment::AppendSpanningCoordinates(Measure *measure) // otherwise start beam closer to the start of the Measure, to indicate spanning if ((SPANNING_END == spanningType) || (SPANNING_MIDDLE == spanningType)) { BeamElementCoord *left = new BeamElementCoord(*front); - const int width = measure->GetInnerWidth(); int offset = 0; if (m_beamElementCoordRefs.size() > 1) { - const int divideBy = 2 * (m_beamElementCoordRefs.size() - 1); + const int divideBy = 2 * ((int)m_beamElementCoordRefs.size() - 1); offset = (back->m_x - front->m_x) / divideBy; } else { @@ -449,7 +446,7 @@ bool BeamSegment::NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterfa [midpointOffset](BeamElementCoord *coord) { coord->m_yBeam += midpointOffset; }); if (!this->DoesBeamOverlap(staffTop, topOffset, staffBottom, bottomOffset)) return false; } - // If midpoint if above the staff, try to place beam at the top edge of the staff + // If midpoint is above the staff, try to place beam at the top edge of the staff if (!isMidpointWithinBounds && (midpoint > staffBottom)) { const int offset = (m_beamElementCoordRefs.front()->m_yBeam + m_beamElementCoordRefs.back()->m_yBeam - 2 * (staffTop - topOffset)) diff --git a/src/beamspan.cpp b/src/beamspan.cpp index 34e9ca4ca36..d2482f52c0c 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -42,7 +42,6 @@ BeamSpan::BeamSpan() RegisterAttClass(ATT_BEAMEDWITH); RegisterAttClass(ATT_BEAMREND); RegisterAttClass(ATT_COLOR); - RegisterAttClass(ATT_PLIST); Reset(); InitBeamSegments(); @@ -62,7 +61,6 @@ void BeamSpan::Reset() ResetBeamedWith(); ResetBeamRend(); ResetColor(); - ResetPlist(); ClearBeamSegments(); } @@ -139,9 +137,9 @@ bool BeamSpan::AddSpanningSegment(Doc *doc, const SpanIndexVector &elements, int if (!layer || !staff) return false; // get iterators for first and last coordinates in the range for the segment - auto coordsFirst = std::find_if(m_beamElementCoords.begin(), m_beamElementCoords.end(), + const auto coordsFirst = std::find_if(m_beamElementCoords.begin(), m_beamElementCoords.end(), [&](BeamElementCoord *coord) { return coord->m_element == (*elements.at(index).first); }); - auto coordsLast = std::find_if(m_beamElementCoords.begin(), m_beamElementCoords.end(), + const auto coordsLast = std::find_if(m_beamElementCoords.begin(), m_beamElementCoords.end(), [&](BeamElementCoord *coord) { return coord->m_element == *(elements.at(index + 1).first - 1); }); if ((coordsFirst == m_beamElementCoords.end()) || (coordsLast == m_beamElementCoords.end())) return false; @@ -156,12 +154,11 @@ bool BeamSpan::AddSpanningSegment(Doc *doc, const SpanIndexVector &elements, int // Init segment with placement information (measure, staff, etc.) as well as begin/end coordinates ArrayOfBeamElementCoords coords(coordsFirst, coordsLast + 1); segment->InitPlacementInformation(staff, layer); - segment->m_placementInfo->m_begin = coordsFirst; - segment->m_placementInfo->m_end = coordsLast + 1; + segment->m_placementInfo->m_begin = *coordsFirst; + segment->m_placementInfo->m_end = *coordsLast; segment->InitCoordRefs(&coords); segment->CalcBeam(layer, staff, doc, this, m_drawingPlace); - segment->m_placementInfo->SetSpanningType(index, elements.size() - 1); - Measure *measure = NULL; + segment->m_placementInfo->SetSpanningType(index, (int)elements.size() - 1); Object *currentSystem = layer->GetFirstAncestor(SYSTEM); if (segment->m_placementInfo->m_spanningType == SPANNING_START) { segment->m_placementInfo->m_measure = vrv_cast(currentSystem->GetLast(MEASURE)); @@ -200,10 +197,9 @@ int BeamSpan::CalcStem(FunctorParams *functorParams) m_beamSegments.at(0)->InitPlacementInformation(staff, layer); m_beamSegments.at(0)->m_placementInfo->m_measure = measure; - m_beamSegments.at(0)->m_placementInfo->m_begin = m_beamElementCoords.begin(); - m_beamSegments.at(0)->m_placementInfo->m_end = m_beamElementCoords.end(); - ArrayOfBeamElementCoords coord( - m_beamSegments.at(0)->m_placementInfo->m_begin, m_beamSegments.at(0)->m_placementInfo->m_end); + m_beamSegments.at(0)->m_placementInfo->m_begin = *m_beamElementCoords.begin(); + m_beamSegments.at(0)->m_placementInfo->m_end = *m_beamElementCoords.rbegin(); + ArrayOfBeamElementCoords coord(m_beamElementCoords.begin(), m_beamElementCoords.end()); m_beamSegments.at(0)->InitCoordRefs(&coord); m_beamSegments.at(0)->CalcBeam(layer, staff, params->m_doc, this, this->GetPlace()); @@ -216,17 +212,18 @@ int BeamSpan::ResolveBeamSpanElements(FunctorParams *functorParams) Layer *layer = vrv_cast(this->GetStart()->GetFirstAncestor(LAYER)); Staff *staff = vrv_cast(this->GetStart()->GetFirstAncestor(STAFF)); + Measure *measure = vrv_cast(this->GetStart()->GetFirstAncestor(MEASURE)); if (!layer || !staff) return FUNCTOR_SIBLINGS; m_beamedElements = this->HasPlist() ? *this->GetRefs() : this->GetBeamSpanElementList(layer, staff); - // set current beamSpan as referencedElement for all beamed elemenents (for the - // sake of figuring if corresponding element is in beamSpan) + // set current beamSpan as referencedElement for all beamed elements (for thesake of figuring if corresponding + // element is in beamSpan) for (const auto element : m_beamedElements) { LayerElement *layerElem = vrv_cast(element); if (!layerElem) continue; - layerElem->m_referencedElement = this; + measure->AddToSpanningObjects(layerElem); Staff *elementStaff = vrv_cast(layerElem->GetFirstAncestor(STAFF)); if (elementStaff->GetN() != staff->GetN()) { diff --git a/src/chord.cpp b/src/chord.cpp index a8a40a9f925..af0b84eba71 100644 --- a/src/chord.cpp +++ b/src/chord.cpp @@ -670,7 +670,7 @@ int Chord::CalcStem(FunctorParams *functorParams) // Stems have been calculated previously in beam or fTrem - siblings because flags do not need to // be processed either - if (IsInBeam() || IsInFTrem() || IsInBeamSpan()) { + if (this->IsInBeam() || this->IsInFTrem() || this->IsInBeamSpan()) { return FUNCTOR_SIBLINGS; } @@ -814,7 +814,7 @@ int Chord::PrepareLayerElementParts(FunctorParams *functorParams) currentStem->IsVirtual(true); } - if ((GetActualDur() > DUR_4) && !IsInBeam() && !IsInBeamSpan() && !IsInFTrem()) { + if ((this->GetActualDur() > DUR_4) && !this->IsInBeam() && !this->IsInBeamSpan() && !this->IsInFTrem()) { // We should have a stem at this stage assert(currentStem); if (!currentFlag) { diff --git a/src/doc.cpp b/src/doc.cpp index f60d53f8d5d..d8cd22b1a85 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -563,7 +563,7 @@ void Doc::PrepareDrawing() // If some are still there, then it is probably an issue in the encoding if (!preparePlistParams.m_interfaceUuidTuples.empty()) { LogWarning( - "%d element(s) with a @plist could match the target", preparePlistParams.m_interfaceUuidTuples.size()); + "%d element(s) with a @plist could not match the target", preparePlistParams.m_interfaceUuidTuples.size()); } /************ Resolve cross staff ************/ diff --git a/src/iomei.cpp b/src/iomei.cpp index e93a64ab226..1adb29fc51b 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -4791,10 +4791,10 @@ bool MEIInput::ReadMeasureChildren(Object *parent, pugi::xml_node parentNode) else if (currentName == "breath") { success = this->ReadBreath(parent, current); } - else if (std::string(current.name()) == "caesura") { + else if (currentName == "caesura") { success = this->ReadCaesura(parent, current); } - else if (std::string(current.name()) == "dir") { + else if (currentName == "dir") { success = this->ReadDir(parent, current); } else if (currentName == "dynam") { @@ -4815,10 +4815,10 @@ bool MEIInput::ReadMeasureChildren(Object *parent, pugi::xml_node parentNode) else if (currentName == "harm") { success = this->ReadHarm(parent, current); } - else if (std::string(current.name()) == "lv") { + else if (currentName == "lv") { success = this->ReadLv(parent, current); } - else if (std::string(current.name()) == "mNum") { + else if (currentName == "mNum") { success = this->ReadMNum(parent, current); } else if (currentName == "mordent") { @@ -4833,10 +4833,10 @@ bool MEIInput::ReadMeasureChildren(Object *parent, pugi::xml_node parentNode) else if (currentName == "phrase") { success = this->ReadPhrase(parent, current); } - else if (std::string(current.name()) == "pitchInflection") { + else if (currentName == "pitchInflection") { success = this->ReadPitchInflection(parent, current); } - else if (std::string(current.name()) == "reh") { + else if (currentName == "reh") { success = this->ReadReh(parent, current); } else if (currentName == "slur") { @@ -7111,83 +7111,6 @@ bool MEIInput::ReadEditorialChildren(Object *parent, pugi::xml_node parentNode, } } -bool MEIInput::ReadBeamSpanAsBeam(Measure *measure, pugi::xml_node beamSpan) -{ - if (!measure) { - LogWarning("Cannot read within editorial markup"); - return false; - } - - Beam *beam = new Beam(); - this->SetMeiUuid(beamSpan, beam); - - LayerElement *start = NULL; - LayerElement *end = NULL; - - // att.labelled - if (beamSpan.attribute("label")) { - beam->SetLabel(beamSpan.attribute("label").value()); - } - - // att.typed - if (beamSpan.attribute("type")) { - beam->SetType(beamSpan.attribute("type").value()); - } - else { - beam->SetType("beamSpan"); - } - - // att.beam.vis - if (beamSpan.attribute("color")) { - beam->SetColor(beamSpan.attribute("color").value()); - } - - // position (pitch) - if (beamSpan.attribute("startid")) { - std::string refId = ExtractUuidFragment(beamSpan.attribute("startid").value()); - start = dynamic_cast(measure->FindDescendantByUuid(refId)); - if (!start) { - LogWarning("Element with @startid '%s' not found when trying to read the ", refId.c_str()); - } - } - if (beamSpan.attribute("endid")) { - std::string refId = ExtractUuidFragment(beamSpan.attribute("endid").value()); - end = dynamic_cast(measure->FindDescendantByUuid(refId)); - if (!end) { - LogWarning("Element with @endid '%s' not found when trying to read the ", refId.c_str()); - } - } - if (!start || !end) { - delete beam; - return false; - } - - LayerElement *startChild = dynamic_cast(start->GetLastAncestorNot(LAYER)); - LayerElement *endChild = dynamic_cast(end->GetLastAncestorNot(LAYER)); - - if (!startChild || !endChild || (startChild->GetParent() != endChild->GetParent())) { - LogWarning("Start and end elements for '%s' not in the same layer", beam->GetUuid().c_str()); - delete beam; - return false; - } - - Layer *parentLayer = dynamic_cast(startChild->GetParent()); - assert(parentLayer); - - int startIdx = startChild->GetIdx(); - int endIdx = endChild->GetIdx(); - // LogDebug("%d %d %s!", startIdx, endIdx, start->GetUuid().c_str()); - int i; - for (i = endIdx; i >= startIdx; i--) { - LayerElement *element = dynamic_cast(parentLayer->DetachChild(i)); - if (element) beam->AddChild(element); - } - beam->SetParent(parentLayer); - parentLayer->InsertChild(beam, startIdx); - - return true; -} - bool MEIInput::ReadTupletSpanAsTuplet(Measure *measure, pugi::xml_node tupletSpan) { if (!measure) { diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 050f634c7b5..e5cf30e5bc3 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -130,7 +130,6 @@ void LayerElement::Reset() m_crossStaff = NULL; m_crossLayer = NULL; - m_referencedElement = NULL; } LayerElement::~LayerElement() {} @@ -146,7 +145,6 @@ void LayerElement::CloneReset() m_crossStaff = NULL; m_crossLayer = NULL; - m_referencedElement = NULL; } LayerElement *LayerElement::ThisOrSameasAsLink() @@ -239,7 +237,6 @@ Beam *LayerElement::IsInBeam() return NULL; } - int LayerElement::GetOriginalLayerN() { int layerN = this->GetAlignmentLayerN(); @@ -252,8 +249,10 @@ int LayerElement::GetOriginalLayerN() bool LayerElement::IsInBeamSpan() const { if (!this->Is({ CHORD, NOTE })) return false; + Measure *measure = vrv_cast(this->GetFirstAncestor(MEASURE)); + if (measure) return measure->IsInSpanningObjects(this); - return m_referencedElement != NULL; + return false; } Staff *LayerElement::GetAncestorStaff(const StaffSearch strategy, const bool assertExistence) const diff --git a/src/measure.cpp b/src/measure.cpp index 2f474246dbd..c38ed0861e6 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -155,6 +155,8 @@ void Measure::Reset() m_scoreTimeOffset.clear(); m_realTimeOffsetMilliseconds.clear(); m_currentTempo = MIDI_TEMPO; + + m_spanningObjects.clear(); } bool Measure::IsSupportedChild(Object *child) @@ -653,6 +655,16 @@ std::vector> Measure::GetInternalTieEn return endpoints; } +bool Measure::IsInSpanningObjects(const Object *object) const +{ + return (std::find(m_spanningObjects.begin(), m_spanningObjects.end(), object) != m_spanningObjects.end()); +} + +void Measure::AddToSpanningObjects(Object *object) +{ + m_spanningObjects.push_back(object); +} + //---------------------------------------------------------------------------- // Measure functor methods //---------------------------------------------------------------------------- diff --git a/src/note.cpp b/src/note.cpp index 68f6cb7c665..4b1cccbeaaf 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -974,7 +974,7 @@ int Note::CalcStem(FunctorParams *functorParams) // Stems have been calculated previously in Beam or fTrem - siblings because flags do not need to // be processed either - if (IsInBeam() || IsInFTrem() || IsInBeamSpan()) { + if (this->IsInBeam() || this->IsInFTrem() || this->IsInBeamSpan()) { return FUNCTOR_SIBLINGS; } diff --git a/src/object.cpp b/src/object.cpp index c7b2636af67..92c7ce778e3 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -1588,7 +1588,7 @@ int Object::ProcessPlist(FunctorParams *functorParams) std::string uuid = this->GetUuid(); auto i = std::find_if(params->m_interfaceUuidTuples.begin(), params->m_interfaceUuidTuples.end(), - [uuid](std::tuple tuple) { return (std::get<1>(tuple) == uuid); }); + [&uuid](std::tuple tuple) { return (std::get<1>(tuple) == uuid); }); if (i != params->m_interfaceUuidTuples.end()) { std::get<2>(*i) = this; } diff --git a/src/view_beam.cpp b/src/view_beam.cpp index 14407427896..9b8c9eda75b 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -425,12 +425,20 @@ void View::DrawBeamSpan(DeviceContext *dc, BeamSpan *beamSpan, Measure *measure) assert(beamSpan); assert(measure); - // Draw all segements for the beamSpan + // Draw all segments for the beamSpan dc->StartGraphic(beamSpan, "", beamSpan->GetUuid()); for (auto segment : beamSpan->m_beamSegments) { // Reset current segment and set coordinates based on stored begin/end iterators for the ElementCoords segment->Reset(); - ArrayOfBeamElementCoords coord(segment->m_placementInfo->m_begin, segment->m_placementInfo->m_end); + + const auto coordsFirst = std::find(beamSpan->m_beamElementCoords.begin(), beamSpan->m_beamElementCoords.end(), + segment->m_placementInfo->m_begin); + const auto coordsLast = std::find(beamSpan->m_beamElementCoords.begin(), beamSpan->m_beamElementCoords.end(), + segment->m_placementInfo->m_end); + if ((coordsFirst == beamSpan->m_beamElementCoords.end()) || (coordsLast == beamSpan->m_beamElementCoords.end())) + continue; + + ArrayOfBeamElementCoords coord(coordsFirst, coordsLast + 1); segment->InitCoordRefs(&coord); segment->CalcBeam(segment->m_placementInfo->m_layer, segment->m_placementInfo->m_staff, m_doc, beamSpan, beamSpan->m_drawingPlace); From 52a399b090b71e6ca73ec64bac9bf8807a746b1e Mon Sep 17 00:00:00 2001 From: Monceber Date: Fri, 11 Feb 2022 13:58:15 +0200 Subject: [PATCH 380/403] Rebase fixes --- include/vrv/beam.h | 2 -- include/vrv/drawinginterface.h | 2 +- src/beam.cpp | 13 +------------ src/beamspan.cpp | 3 ++- src/drawinginterface.cpp | 2 +- 5 files changed, 5 insertions(+), 17 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index f0e0be70437..80875f80476 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -184,8 +184,6 @@ class BeamSegment { // Helper to check mixed beam positioning compared to other elements (ledger lines, staff) and adjust it accordingly bool NeedToResetPosition(Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface); - std::vector GetSegmentYPositions() const; - public: // values set by CalcBeam int m_nbNotesOrChords; diff --git a/include/vrv/drawinginterface.h b/include/vrv/drawinginterface.h index 0f670190931..fe2e2a91b12 100644 --- a/include/vrv/drawinginterface.h +++ b/include/vrv/drawinginterface.h @@ -112,7 +112,7 @@ class BeamDrawingInterface : public ObjectListInterface { */ void InitCue(bool beamCue); - bool IsHorizontal(const std::vector& items); + bool IsHorizontal(); bool IsRepeatedPattern(); diff --git a/src/beam.cpp b/src/beam.cpp index 4be93b33ae6..3ac393da7a2 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -151,17 +151,6 @@ void BeamSegment::AppendSpanningCoordinates(Measure *measure) } } -std::vector BeamSegment::GetSegmentYPositions() const -{ - std::vector items; - for (auto coord : m_beamElementCoordRefs) { - if (!coord->m_stem || !coord->m_closestNote) continue; - - items.push_back(coord->m_closestNote->GetDrawingY()); - } - return items; -} - void BeamSegment::CalcBeam( Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place, bool init) { @@ -189,7 +178,7 @@ void BeamSegment::CalcBeam( else { beamInterface->m_fractionSize = staff->m_drawingStaffSize; - horizontal = beamInterface->IsHorizontal(this->GetSegmentYPositions()); + horizontal = beamInterface->IsHorizontal(); // Beam@place has precedence - however, in some cases, CalcBeam is called recursively because we need to change // the place This occurs when mixed makes no sense and the beam is placed above or below instead. this->CalcBeamPlace(layer, beamInterface, place); diff --git a/src/beamspan.cpp b/src/beamspan.cpp index d2482f52c0c..a68b24c2ff8 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -212,7 +212,6 @@ int BeamSpan::ResolveBeamSpanElements(FunctorParams *functorParams) Layer *layer = vrv_cast(this->GetStart()->GetFirstAncestor(LAYER)); Staff *staff = vrv_cast(this->GetStart()->GetFirstAncestor(STAFF)); - Measure *measure = vrv_cast(this->GetStart()->GetFirstAncestor(MEASURE)); if (!layer || !staff) return FUNCTOR_SIBLINGS; m_beamedElements = this->HasPlist() ? *this->GetRefs() : this->GetBeamSpanElementList(layer, staff); @@ -223,6 +222,8 @@ int BeamSpan::ResolveBeamSpanElements(FunctorParams *functorParams) LayerElement *layerElem = vrv_cast(element); if (!layerElem) continue; + Measure *measure = vrv_cast(layerElem->GetFirstAncestor(MEASURE)); + if (!measure) continue; measure->AddToSpanningObjects(layerElem); Staff *elementStaff = vrv_cast(layerElem->GetFirstAncestor(STAFF)); diff --git a/src/drawinginterface.cpp b/src/drawinginterface.cpp index 4b34ac73aeb..3f9071e0688 100644 --- a/src/drawinginterface.cpp +++ b/src/drawinginterface.cpp @@ -262,7 +262,7 @@ void BeamDrawingInterface::InitCue(bool beamCue) } } -bool BeamDrawingInterface::IsHorizontal(const std::vector &items) +bool BeamDrawingInterface::IsHorizontal() { if (this->IsRepeatedPattern()) { return true; From 348dad4af131d97f2bdbd861fe57233cc9be39a7 Mon Sep 17 00:00:00 2001 From: Monceber Date: Fri, 11 Feb 2022 14:03:24 +0200 Subject: [PATCH 381/403] Minor fix --- src/view_page.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/view_page.cpp b/src/view_page.cpp index 3bf06045c1b..1365c40dc0f 100644 --- a/src/view_page.cpp +++ b/src/view_page.cpp @@ -202,7 +202,7 @@ void View::DrawSystem(DeviceContext *dc, System *system) this->DrawSystemChildren(dc, system, system); this->DrawSystemList(dc, system, SYL); - this->DrawSystemList(dc, system, BEAMSPAN); + this->DrawSystemList(dc, system, BEAMSPAN); this->DrawSystemList(dc, system, BRACKETSPAN); this->DrawSystemList(dc, system, DYNAM); this->DrawSystemList(dc, system, DIR); @@ -232,7 +232,7 @@ void View::DrawSystemList(DeviceContext *dc, System *system, const ClassId class for (iter = drawingList->begin(); iter != drawingList->end(); ++iter) { if ((*iter)->Is(classId) && (classId == BEAMSPAN)) { - DrawTimeSpanningElement(dc, *iter, system); + this->DrawTimeSpanningElement(dc, *iter, system); } if ((*iter)->Is(classId) && (classId == BRACKETSPAN)) { this->DrawTimeSpanningElement(dc, *iter, system); From ca549bfffcb8eaf8432c86e0e1a7eff17b2b5e24 Mon Sep 17 00:00:00 2001 From: Monceber Date: Fri, 11 Feb 2022 17:25:44 +0200 Subject: [PATCH 382/403] Formatting --- include/vrv/vrvdef.h | 2 +- src/iomusxml.cpp | 2 +- src/view_control.cpp | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/vrv/vrvdef.h b/include/vrv/vrvdef.h index 2df134030ee..f5470ccf7d0 100644 --- a/include/vrv/vrvdef.h +++ b/include/vrv/vrvdef.h @@ -329,7 +329,7 @@ typedef std::multimap MapOfLinkingInterfaceUuid typedef std::map MapOfNoteUuidPairs; -typedef std::vector > ArrayOfPlistInterfaceUuidTuples; +typedef std::vector> ArrayOfPlistInterfaceUuidTuples; typedef std::vector ArrayOfCurveSpannedElements; diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index 8c9f008d3b8..6ab1fe9c23c 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -569,7 +569,7 @@ void MusicXmlInput::CloseSlur(Measure *measure, short int number, LayerElement * m_slurStopStack.push_back({ element, closeSlur }); } -void MusicXmlInput::CloseBeamSpan(Staff* staff, Layer* layer, LayerElement* element) +void MusicXmlInput::CloseBeamSpan(Staff *staff, Layer *layer, LayerElement *element) { for (auto riter = m_beamspanStack.rbegin(); riter != m_beamspanStack.rend(); ++riter) { if ((riter->second.first == staff->GetN()) || (riter->second.second == layer->GetN())) { diff --git a/src/view_control.cpp b/src/view_control.cpp index bbcad53ed5a..052634f3489 100644 --- a/src/view_control.cpp +++ b/src/view_control.cpp @@ -76,7 +76,8 @@ void View::DrawControlElement(DeviceContext *dc, ControlElement *element, Measur assert(element); // For dir, dynam, fermata, and harm, we do not consider the @tstamp2 for rendering - if (element->Is({ BEAMSPAN, BRACKETSPAN, FIGURE, GLISS, HAIRPIN, LV, OCTAVE, PHRASE, PITCHINFLECTION, SLUR, TIE })) { + if (element->Is( + { BEAMSPAN, BRACKETSPAN, FIGURE, GLISS, HAIRPIN, LV, OCTAVE, PHRASE, PITCHINFLECTION, SLUR, TIE })) { // create placeholder dc->StartGraphic(element, "", element->GetUuid()); dc->EndGraphic(element, this); From 1c866763c6d8f03f3e92ee02e44700b295ccbdd1 Mon Sep 17 00:00:00 2001 From: Monceber Date: Wed, 16 Feb 2022 10:46:45 +0200 Subject: [PATCH 383/403] Beamspan improvements - changed BeamSegmentPlacementInfo to be inherited class of BeamSpan - move related methods to BeamSpanSegment - change FindAllDescendantsBetween method to use depth instead of bool argument - replace usage of m_spanningObjects with bool member variables in LayerElement - fix BeamSpan behavior on page breaks - improve beamSpan rendering behavior, drawing beamSpans per system --- include/vrv/beam.h | 79 ++++++++++++++--------- include/vrv/beamspan.h | 2 +- include/vrv/functorparams.h | 3 - include/vrv/layerelement.h | 5 +- include/vrv/measure.h | 10 --- include/vrv/object.h | 10 ++- include/vrv/view.h | 2 +- src/beam.cpp | 124 +++++++++++++++++------------------- src/beamspan.cpp | 41 ++++++------ src/layerelement.cpp | 6 +- src/measure.cpp | 12 ---- src/note.cpp | 4 +- src/object.cpp | 8 +-- src/system.cpp | 3 +- src/view_beam.cpp | 41 ++++++++---- src/view_control.cpp | 2 +- 16 files changed, 175 insertions(+), 177 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 80875f80476..8e0b2e1d9cb 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -24,26 +24,6 @@ class StaffAlignment; enum { PARTIAL_NONE = 0, PARTIAL_THROUGH, PARTIAL_RIGHT, PARTIAL_LEFT }; -//---------------------------------------------------------------------------- -// BeamSegmentPlacementInfo -//---------------------------------------------------------------------------- - -// Structure for storing additional information regarding beamSegment placement (in case of beam/beamSpan spanning over -// the systems -struct BeamSegmentPlacementInfo { -public: - BeamSegmentPlacementInfo() = default; - Measure *m_measure; - Staff *m_staff; - Layer *m_layer; - int m_spanningType = SPANNING_START_END; - BeamElementCoord *m_begin; - BeamElementCoord *m_end; - - // Set spanning type based on the positioning of the beam segment - void SetSpanningType(int systemIndex, int systemCount); -}; - //---------------------------------------------------------------------------- // BeamSegment //---------------------------------------------------------------------------- @@ -78,12 +58,6 @@ class BeamSegment { */ void InitCoordRefs(const ArrayOfBeamElementCoords *beamElementCoords); - /** - * Initialize placement information for the segment. Should be used with beamSpan to specify which staff/layer it - * belongs to - */ - void InitPlacementInformation(Staff *staff, Layer *layer); - /** * Clear the m_beamElementCoords vector and delete all the objects. */ @@ -122,9 +96,6 @@ class BeamSegment { void UpdateSameasRoles(data_BEAMPLACE place); ///@} - // Helper to append coordinates for the beamSpans that are drawn over systems - void AppendSpanningCoordinates(Measure *measure); - private: // Helper to adjust beam positioning with regards to ledger lines (top and bottom of the staff) void AdjustBeamToLedgerLines(Doc *doc, Staff *staff, BeamDrawingInterface *beamInterface); @@ -215,11 +186,57 @@ class BeamSegment { StemSameasDrawingRole m_stemSameasRole; StemSameasDrawingRole *m_stemSameasReverseRole; ///@} +}; + +//---------------------------------------------------------------------------- +// BeamSpanSegment +//---------------------------------------------------------------------------- + +// Class for storing additional information regarding beamSegment placement (in case of beamSpan spanning over +// the systems) +class BeamSpanSegment : public BeamSegment { +public: + BeamSpanSegment() = default; + virtual ~BeamSpanSegment(){}; + + /** + * Set/get methods for member variables + */ + ///@{ + Measure *GetMeasure() const { return m_measure; } + void SetMeasure(Measure *measure) { m_measure = measure; } + Staff *GetStaff() const { return m_staff; } + void SetStaff(Staff *staff) { m_staff = staff; } + Layer *GetLayer() const { return m_layer; } + void SetLayer(Layer *layer) { m_layer = layer; } + BeamElementCoord *GetBeginCoord() const { return m_begin; } + void SetBeginCoord(BeamElementCoord *begin) { m_begin = begin; } + BeamElementCoord *GetEndCoord() const { return m_end; } + void SetEndCoord(BeamElementCoord *end) { m_end = end; } + ///@} /** - * Additional information on the relevant measure/staff/layer. Optional for plain beams + * Set/get methods for spanning type of segment. + * Set spanning type based on the positioning of the beam segment */ - BeamSegmentPlacementInfo *m_placementInfo; + ///@{ + void SetSpanningType(int systemIndex, int systemCount); + int GetSpanningType() const { return m_spanningType; } + ///@} + + // Helper to append coordinates for the beamSpans that are drawn over systems + void AppendSpanningCoordinates(Measure *measure); + +private: + // main values to track positioning of the segment + Measure *m_measure; + Staff *m_staff; + Layer *m_layer; + BeamElementCoord *m_begin; + BeamElementCoord *m_end; + + // spanning type for purposes of adding additional coordinates to segment + int m_spanningType = SPANNING_START_END; }; //---------------------------------------------------------------------------- diff --git a/include/vrv/beamspan.h b/include/vrv/beamspan.h index 3747313ce47..6aaf3057cf5 100644 --- a/include/vrv/beamspan.h +++ b/include/vrv/beamspan.h @@ -96,7 +96,7 @@ class BeamSpan : public ControlElement, public: // - std::vector m_beamSegments; + std::vector m_beamSegments; private: // diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index dbbcdcea24f..56d79197ea2 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -1363,7 +1363,6 @@ class FillStaffCurrentTimeSpanningParams : public FunctorParams { * member 1: an array of all matching objects * member 2: the start object range * member 3: the end object range - * member 4: flag to decide whether to add children of the found elements **/ class FindAllBetweenParams : public FunctorParams { @@ -1374,13 +1373,11 @@ class FindAllBetweenParams : public FunctorParams { m_elements = elements; m_start = start; m_end = end; - m_includeChildren = true; } Comparison *m_comparison; ListOfObjects *m_elements; Object *m_start; Object *m_end; - bool m_includeChildren; }; //---------------------------------------------------------------------------- diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index f7529770a7d..7c433e8ece7 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -124,9 +124,8 @@ class LayerElement : public Object, * Looking in the content list is necessary for grace notes or imbricated beams. */ Beam *IsInBeam(); - ///@} - bool IsInBeamSpan() const; + ///@} /** * @name Get and set the layerN drawing value @@ -484,6 +483,8 @@ class LayerElement : public Object, Staff *m_crossStaff; Layer *m_crossLayer; + bool m_isInBeamspan = false; + protected: Alignment *m_alignment; diff --git a/include/vrv/measure.h b/include/vrv/measure.h index cd6931f0f4d..01ca6022338 100644 --- a/include/vrv/measure.h +++ b/include/vrv/measure.h @@ -262,14 +262,6 @@ class Measure : public Object, */ std::vector> GetInternalTieEndpoints(); - /** - * Add element to the list of spanning objects or check if element is in the list - */ - ///@{ - bool IsInSpanningObjects(const Object *object) const; - void AddToSpanningObjects(Object *object); - ///@} - //----------// // Functors // //----------// @@ -579,8 +571,6 @@ class Measure : public Object, double m_currentTempo; std::map m_invisibleStaffBarlines; - // vector containing pointers to elements that belong to any of the beamspans in measure - std::vector m_spanningObjects; }; } // namespace vrv diff --git a/include/vrv/object.h b/include/vrv/object.h index ba8ebdbbb1a..8461dbb018b 100644 --- a/include/vrv/object.h +++ b/include/vrv/object.h @@ -412,7 +412,7 @@ class Object : public BoundingBox { * The start and end objects are included in the result set. */ void FindAllDescendantsBetween(ListOfObjects *objects, Comparison *comparison, Object *start, Object *end, - bool clear = true, bool includeChildren = true); + bool clear = true, int depth = UNLIMITED_DEPTH); /** * Give up ownership of the child at the idx position (NULL if not found) @@ -1066,13 +1066,17 @@ class Object : public BoundingBox { virtual int PrepareProcessingLists(FunctorParams *) { return FUNCTOR_CONTINUE; } /** - * Match elements of @plist. + * Prepare list of elements in the @plist. */ ///@{ virtual int PreparePlist(FunctorParams *functorParams); - virtual int ProcessPlist(FunctorParams *functorParams); ///@} + /** + * Match elements of @plist + */ + virtual int ProcessPlist(FunctorParams *functorParams); + /** * Extract default duration from scoredef/staffdef */ diff --git a/include/vrv/view.h b/include/vrv/view.h index 2475fdc382c..97c922d567d 100644 --- a/include/vrv/view.h +++ b/include/vrv/view.h @@ -389,7 +389,7 @@ class View { ///@{ void DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure); void DrawFTrem(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure); - void DrawBeamSpan(DeviceContext *dc, BeamSpan *beamSpan, Measure *measure); + void DrawBeamSpan(DeviceContext *dc, BeamSpan *beamSpan, System *system, Object *graphic = NULL); ///@} /** diff --git a/src/beam.cpp b/src/beam.cpp index 3ac393da7a2..6b2425f8650 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -36,35 +36,18 @@ namespace vrv { -void BeamSegmentPlacementInfo::SetSpanningType(int systemIndex, int systemCount) -{ - if (0 == systemIndex) { - m_spanningType = SPANNING_START; - } - else if ((systemCount - 1) == systemIndex) { - m_spanningType = SPANNING_END; - } - else { - m_spanningType = SPANNING_MIDDLE; - } -} - //---------------------------------------------------------------------------- // BeamSegment //---------------------------------------------------------------------------- BeamSegment::BeamSegment() { - m_placementInfo = NULL; this->Reset(); } BeamSegment::~BeamSegment() { this->ClearCoordRefs(); - if (m_placementInfo) { - delete m_placementInfo; - } } void BeamSegment::Reset() @@ -101,56 +84,6 @@ void BeamSegment::InitCoordRefs(const ArrayOfBeamElementCoords *beamElementCoord m_beamElementCoordRefs = *beamElementCoords; } -void BeamSegment::InitPlacementInformation(Staff *staff, Layer *layer) -{ - if (!m_placementInfo) { - m_placementInfo = new BeamSegmentPlacementInfo(); - } - m_placementInfo->m_staff = staff; - m_placementInfo->m_layer = layer; -} - -void BeamSegment::AppendSpanningCoordinates(Measure *measure) -{ - if (NULL == m_placementInfo) return; - const int spanningType = m_placementInfo->m_spanningType; - if (SPANNING_START_END == spanningType) return; - - BarLine *bar = measure->GetRightBarLine(); - const int rightSide = bar->GetDrawingX(); - BeamElementCoord *front = m_beamElementCoordRefs.front(); - BeamElementCoord *back = m_beamElementCoordRefs.back(); - double slope = 0.0; - if (m_beamElementCoordRefs.size() > 1) { - slope = (double)(back->m_yBeam - front->m_yBeam) / (double)(back->m_x - front->m_x); - } - - // in case if beamSpan starts in current system - stretch beam to the right barline - if ((SPANNING_START == spanningType) || (SPANNING_MIDDLE == spanningType)) { - BeamElementCoord *right = new BeamElementCoord(*back); - const int distance = rightSide - back->m_x; - right->m_x = rightSide; - right->m_yBeam += distance * slope; - m_beamElementCoordRefs.push_back(right); - } - // otherwise start beam closer to the start of the Measure, to indicate spanning - if ((SPANNING_END == spanningType) || (SPANNING_MIDDLE == spanningType)) { - BeamElementCoord *left = new BeamElementCoord(*front); - int offset = 0; - if (m_beamElementCoordRefs.size() > 1) { - const int divideBy = 2 * ((int)m_beamElementCoordRefs.size() - 1); - offset = (back->m_x - front->m_x) / divideBy; - } - else { - // 1.5 * unit offset in this case (harcoded for the time being) - offset = 270; - } - left->m_x -= offset; - left->m_yBeam -= offset * slope; - m_beamElementCoordRefs.insert(m_beamElementCoordRefs.begin(), left); - } -} - void BeamSegment::CalcBeam( Layer *layer, Staff *staff, Doc *doc, BeamDrawingInterface *beamInterface, data_BEAMPLACE place, bool init) { @@ -1691,6 +1624,63 @@ bool Beam::IsTabBeam() return (this->FindDescendantByType(TABGRP)); } +//---------------------------------------------------------------------------- +// BeamSpanSegment +//---------------------------------------------------------------------------- + +void BeamSpanSegment::SetSpanningType(int systemIndex, int systemCount) +{ + if (0 == systemIndex) { + m_spanningType = SPANNING_START; + } + else if ((systemCount - 1) == systemIndex) { + m_spanningType = SPANNING_END; + } + else { + m_spanningType = SPANNING_MIDDLE; + } +} + +void BeamSpanSegment::AppendSpanningCoordinates(Measure *measure) +{ + const int spanningType = m_spanningType; + if (SPANNING_START_END == spanningType) return; + + BarLine *bar = measure->GetRightBarLine(); + const int rightSide = bar->GetDrawingX(); + BeamElementCoord *front = m_beamElementCoordRefs.front(); + BeamElementCoord *back = m_beamElementCoordRefs.back(); + double slope = 0.0; + if (m_beamElementCoordRefs.size() > 1) { + slope = (double)(back->m_yBeam - front->m_yBeam) / (double)(back->m_x - front->m_x); + } + + // in case if beamSpan starts in current system - stretch beam to the right barline + if ((SPANNING_START == spanningType) || (SPANNING_MIDDLE == spanningType)) { + BeamElementCoord *right = new BeamElementCoord(*back); + const int distance = rightSide - back->m_x; + right->m_x = rightSide; + right->m_yBeam += distance * slope; + m_beamElementCoordRefs.push_back(right); + } + // otherwise start beam closer to the start of the Measure, to indicate spanning + if ((SPANNING_END == spanningType) || (SPANNING_MIDDLE == spanningType)) { + BeamElementCoord *left = new BeamElementCoord(*front); + int offset = 0; + if (m_beamElementCoordRefs.size() > 1) { + const int divideBy = 2 * ((int)m_beamElementCoordRefs.size() - 1); + offset = (back->m_x - front->m_x) / divideBy; + } + else { + // 1.5 * unit offset in this case (harcoded for the time being) + offset = 270; + } + left->m_x -= offset; + left->m_yBeam -= offset * slope; + m_beamElementCoordRefs.insert(m_beamElementCoordRefs.begin(), left); + } +} + //---------------------------------------------------------------------------- // BeamElementCoord //---------------------------------------------------------------------------- diff --git a/src/beamspan.cpp b/src/beamspan.cpp index a68b24c2ff8..5cd21ef3f53 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -68,7 +68,7 @@ void BeamSpan::Reset() void BeamSpan::InitBeamSegments() { // BeamSpan should have at least one segment to begin with - m_beamSegments.emplace_back(new BeamSegment()); + m_beamSegments.emplace_back(new BeamSpanSegment()); m_isSpanningElement = true; } @@ -86,7 +86,7 @@ ArrayOfObjects BeamSpan::GetBeamSpanElementList(Layer *layer, Staff *staff) // find all elements between startId and endId of the beamSpan ClassIdsComparison classIds({ NOTE, CHORD }); ListOfObjects objects; - layer->FindAllDescendantsBetween(&objects, &classIds, this->GetStart(), this->GetEnd(), true, false); + layer->FindAllDescendantsBetween(&objects, &classIds, this->GetStart(), this->GetEnd(), true, 1); ArrayOfObjects beamSpanElements(objects.begin(), objects.end()); // If last element is not equal to the end, there is high chance that this beamSpan is cross-measure. @@ -113,7 +113,7 @@ ArrayOfObjects BeamSpan::GetBeamSpanElementList(Layer *layer, Staff *staff) ListOfObjects nextLayerObjects; // pass NULL as starting element to add all elements until end is reached if (endMeasure == nextMeasure) { - nextStaffLayer->FindAllDescendantsBetween(&nextLayerObjects, &classIds, NULL, this->GetEnd(), true, false); + nextStaffLayer->FindAllDescendantsBetween(&nextLayerObjects, &classIds, NULL, this->GetEnd(), true, 1); // Handle only next measure for the time being if (nextLayerObjects.back() == this->GetEnd()) { beamSpanElements.insert(beamSpanElements.end(), nextLayerObjects.begin(), nextLayerObjects.end()); @@ -143,9 +143,9 @@ bool BeamSpan::AddSpanningSegment(Doc *doc, const SpanIndexVector &elements, int [&](BeamElementCoord *coord) { return coord->m_element == *(elements.at(index + 1).first - 1); }); if ((coordsFirst == m_beamElementCoords.end()) || (coordsLast == m_beamElementCoords.end())) return false; - BeamSegment *segment = NULL; + BeamSpanSegment *segment = NULL; if (newSegment) { - segment = new BeamSegment(); + segment = new BeamSpanSegment(); } else { segment = m_beamSegments.at(0); @@ -153,22 +153,22 @@ bool BeamSpan::AddSpanningSegment(Doc *doc, const SpanIndexVector &elements, int // Init segment with placement information (measure, staff, etc.) as well as begin/end coordinates ArrayOfBeamElementCoords coords(coordsFirst, coordsLast + 1); - segment->InitPlacementInformation(staff, layer); - segment->m_placementInfo->m_begin = *coordsFirst; - segment->m_placementInfo->m_end = *coordsLast; + segment->SetStaff(staff); + segment->SetLayer(layer); + segment->SetBeginCoord(*coordsFirst); + segment->SetEndCoord(*coordsLast); segment->InitCoordRefs(&coords); segment->CalcBeam(layer, staff, doc, this, m_drawingPlace); - segment->m_placementInfo->SetSpanningType(index, (int)elements.size() - 1); + segment->SetSpanningType(index, (int)elements.size() - 1); Object *currentSystem = layer->GetFirstAncestor(SYSTEM); - if (segment->m_placementInfo->m_spanningType == SPANNING_START) { - segment->m_placementInfo->m_measure = vrv_cast(currentSystem->GetLast(MEASURE)); + if (segment->GetSpanningType() == SPANNING_START) { + segment->SetMeasure(vrv_cast(currentSystem->GetLast(MEASURE))); } - else if (segment->m_placementInfo->m_spanningType == SPANNING_END) { - segment->m_placementInfo->m_measure = vrv_cast(currentSystem->GetFirst(MEASURE)); + else if (segment->GetSpanningType() == SPANNING_END) { + segment->SetMeasure(vrv_cast(currentSystem->GetFirst(MEASURE))); } else { - segment->m_placementInfo->m_measure - = vrv_cast((*elements.at(index).first)->GetFirstAncestor(MEASURE)); + segment->SetMeasure(vrv_cast((*elements.at(index).first)->GetFirstAncestor(MEASURE))); } if (newSegment) { @@ -195,10 +195,11 @@ int BeamSpan::CalcStem(FunctorParams *functorParams) this->InitCoords(&m_beamedElements, staff, this->GetPlace()); - m_beamSegments.at(0)->InitPlacementInformation(staff, layer); - m_beamSegments.at(0)->m_placementInfo->m_measure = measure; - m_beamSegments.at(0)->m_placementInfo->m_begin = *m_beamElementCoords.begin(); - m_beamSegments.at(0)->m_placementInfo->m_end = *m_beamElementCoords.rbegin(); + m_beamSegments.at(0)->SetMeasure(measure); + m_beamSegments.at(0)->SetStaff(staff); + m_beamSegments.at(0)->SetLayer(layer); + m_beamSegments.at(0)->SetBeginCoord(*m_beamElementCoords.begin()); + m_beamSegments.at(0)->SetEndCoord(*m_beamElementCoords.rbegin()); ArrayOfBeamElementCoords coord(m_beamElementCoords.begin(), m_beamElementCoords.end()); m_beamSegments.at(0)->InitCoordRefs(&coord); m_beamSegments.at(0)->CalcBeam(layer, staff, params->m_doc, this, this->GetPlace()); @@ -224,7 +225,7 @@ int BeamSpan::ResolveBeamSpanElements(FunctorParams *functorParams) Measure *measure = vrv_cast(layerElem->GetFirstAncestor(MEASURE)); if (!measure) continue; - measure->AddToSpanningObjects(layerElem); + layerElem->m_isInBeamspan = true; Staff *elementStaff = vrv_cast(layerElem->GetFirstAncestor(STAFF)); if (elementStaff->GetN() != staff->GetN()) { diff --git a/src/layerelement.cpp b/src/layerelement.cpp index e5cf30e5bc3..da5ab61ac87 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -248,11 +248,9 @@ int LayerElement::GetOriginalLayerN() bool LayerElement::IsInBeamSpan() const { - if (!this->Is({ CHORD, NOTE })) return false; - Measure *measure = vrv_cast(this->GetFirstAncestor(MEASURE)); - if (measure) return measure->IsInSpanningObjects(this); + if (!this->Is({ CHORD, NOTE, REST })) return false; - return false; + return m_isInBeamspan; } Staff *LayerElement::GetAncestorStaff(const StaffSearch strategy, const bool assertExistence) const diff --git a/src/measure.cpp b/src/measure.cpp index c38ed0861e6..2f474246dbd 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -155,8 +155,6 @@ void Measure::Reset() m_scoreTimeOffset.clear(); m_realTimeOffsetMilliseconds.clear(); m_currentTempo = MIDI_TEMPO; - - m_spanningObjects.clear(); } bool Measure::IsSupportedChild(Object *child) @@ -655,16 +653,6 @@ std::vector> Measure::GetInternalTieEn return endpoints; } -bool Measure::IsInSpanningObjects(const Object *object) const -{ - return (std::find(m_spanningObjects.begin(), m_spanningObjects.end(), object) != m_spanningObjects.end()); -} - -void Measure::AddToSpanningObjects(Object *object) -{ - m_spanningObjects.push_back(object); -} - //---------------------------------------------------------------------------- // Measure functor methods //---------------------------------------------------------------------------- diff --git a/src/note.cpp b/src/note.cpp index 4b1cccbeaaf..dba54fc31f8 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -1180,8 +1180,8 @@ int Note::CalcDots(FunctorParams *functorParams) assert(dots); // Stem up, shorter than 4th and not in beam - if ((GetDots() != 0) && (params->m_chordStemDir == STEMDIRECTION_up) && (GetDrawingDur() > DUR_4) && !IsInBeam() - && !IsInBeamSpan()) { + if ((this->GetDots() != 0) && (params->m_chordStemDir == STEMDIRECTION_up) && (this->GetDrawingDur() > DUR_4) + && !this->IsInBeam() && !this->IsInBeamSpan()) { // Shift according to the flag width if the top note is not flipped if ((this == chord->GetTopNote()) && !this->GetFlippedNotehead()) { // HARDCODED diff --git a/src/object.cpp b/src/object.cpp index 92c7ce778e3..1f194d4ec15 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -583,15 +583,14 @@ void Object::FindAllDescendantsByComparison( } void Object::FindAllDescendantsBetween( - ListOfObjects *objects, Comparison *comparison, Object *start, Object *end, bool clear, bool includeChildren) + ListOfObjects *objects, Comparison *comparison, Object *start, Object *end, bool clear, int depth) { assert(objects); if (clear) objects->clear(); Functor findAllBetween(&Object::FindAllBetween); FindAllBetweenParams findAllBetweenParams(comparison, objects, start, end); - findAllBetweenParams.m_includeChildren = includeChildren; - this->Process(&findAllBetween, &findAllBetweenParams, NULL, NULL, UNLIMITED_DEPTH, FORWARD, true); + this->Process(&findAllBetween, &findAllBetweenParams, NULL, NULL, depth, FORWARD, true); } Object *Object::GetChild(int idx) const @@ -1424,7 +1423,6 @@ int Object::FindAllBetween(FunctorParams *functorParams) // evaluate by applying the Comparison operator() if ((*params->m_comparison)(this)) { params->m_elements->push_back(this); - if ((params->m_end != this) && !params->m_includeChildren) return FUNCTOR_SIBLINGS; } // We have reached the end of the range @@ -1584,7 +1582,7 @@ int Object::ProcessPlist(FunctorParams *functorParams) PreparePlistParams *params = vrv_params_cast(functorParams); assert(params); - if (!IsLayerElement()) return FUNCTOR_CONTINUE; + if (!this->IsLayerElement()) return FUNCTOR_CONTINUE; std::string uuid = this->GetUuid(); auto i = std::find_if(params->m_interfaceUuidTuples.begin(), params->m_interfaceUuidTuples.end(), diff --git a/src/system.cpp b/src/system.cpp index 3e992c6c005..6f2183fc0d9 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -312,7 +312,8 @@ void System::AddToDrawingListIfNeccessary(Object *object) if (!object->HasInterface(INTERFACE_TIME_SPANNING)) return; - if (object->Is({ BRACKETSPAN, FIGURE, GLISS, HAIRPIN, LV, OCTAVE, PHRASE, PITCHINFLECTION, SLUR, SYL, TIE })) { + if (object->Is( + { BEAMSPAN, BRACKETSPAN, FIGURE, GLISS, HAIRPIN, LV, OCTAVE, PHRASE, PITCHINFLECTION, SLUR, SYL, TIE })) { this->AddToDrawingList(object); } else if (object->Is(DIR)) { diff --git a/src/view_beam.cpp b/src/view_beam.cpp index 9b8c9eda75b..20f383e4710 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -29,6 +29,7 @@ #include "options.h" #include "smufl.h" #include "staff.h" +#include "system.h" #include "vrv.h" namespace vrv { @@ -419,37 +420,49 @@ void View::DrawBeamSegment( } // end of drawing partial bars } -void View::DrawBeamSpan(DeviceContext *dc, BeamSpan *beamSpan, Measure *measure) +void View::DrawBeamSpan(DeviceContext *dc, BeamSpan *beamSpan, System *system, Object *graphic) { assert(dc); assert(beamSpan); - assert(measure); + assert(system); + + // Draw segments for the beamSpan + if (graphic) { + dc->ResumeGraphic(graphic, graphic->GetUuid()); + } + else { + dc->StartGraphic(beamSpan, "", beamSpan->GetUuid(), false); + } - // Draw all segments for the beamSpan - dc->StartGraphic(beamSpan, "", beamSpan->GetUuid()); for (auto segment : beamSpan->m_beamSegments) { + // make sure to process only segments for current system + Measure *segmentSystem = segment->GetMeasure(); + if (vrv_cast(segmentSystem->GetFirstAncestor(SYSTEM)) != system) continue; // Reset current segment and set coordinates based on stored begin/end iterators for the ElementCoords segment->Reset(); - const auto coordsFirst = std::find(beamSpan->m_beamElementCoords.begin(), beamSpan->m_beamElementCoords.end(), - segment->m_placementInfo->m_begin); - const auto coordsLast = std::find(beamSpan->m_beamElementCoords.begin(), beamSpan->m_beamElementCoords.end(), - segment->m_placementInfo->m_end); + const auto coordsFirst = std::find( + beamSpan->m_beamElementCoords.begin(), beamSpan->m_beamElementCoords.end(), segment->GetBeginCoord()); + const auto coordsLast = std::find( + beamSpan->m_beamElementCoords.begin(), beamSpan->m_beamElementCoords.end(), segment->GetEndCoord()); if ((coordsFirst == beamSpan->m_beamElementCoords.end()) || (coordsLast == beamSpan->m_beamElementCoords.end())) continue; ArrayOfBeamElementCoords coord(coordsFirst, coordsLast + 1); segment->InitCoordRefs(&coord); - segment->CalcBeam(segment->m_placementInfo->m_layer, segment->m_placementInfo->m_staff, m_doc, beamSpan, - beamSpan->m_drawingPlace); - segment->AppendSpanningCoordinates(segment->m_placementInfo->m_measure); + segment->CalcBeam(segment->GetLayer(), segment->GetStaff(), m_doc, beamSpan, beamSpan->m_drawingPlace); + segment->AppendSpanningCoordinates(segment->GetMeasure()); // Draw corresponding beam segment - this->DrawBeamSegment( - dc, segment, beamSpan, segment->m_placementInfo->m_layer, segment->m_placementInfo->m_staff); + this->DrawBeamSegment(dc, segment, beamSpan, segment->GetLayer(), segment->GetStaff()); } - dc->EndGraphic(beamSpan, this); + if (graphic) { + dc->EndResumedGraphic(graphic, this); + } + else { + dc->EndGraphic(beamSpan, this); + } } } // namespace vrv diff --git a/src/view_control.cpp b/src/view_control.cpp index 052634f3489..9d6e953e712 100644 --- a/src/view_control.cpp +++ b/src/view_control.cpp @@ -319,7 +319,7 @@ void View::DrawTimeSpanningElement(DeviceContext *dc, Object *element, System *s } else if (element->Is(BEAMSPAN)) { // cast to BeamSpan check in DrawBeamSpan - DrawBeamSpan(dc, vrv_cast(element), measure); + this->DrawBeamSpan(dc, vrv_cast(element), system, graphic); } else if (element->Is(BRACKETSPAN)) { // cast to BracketSpan check in DrawBracketSpan From a66f5248cf3063abfa12246cdfe9368df980ce0f Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Wed, 16 Feb 2022 14:06:03 +0100 Subject: [PATCH 384/403] Update VerovioText to 1.0.7 * Add repeat glyphs --- data/text/VerovioText-1.0.xml | 163 +++++----- data/woff.xml | 2 +- fonts/VerovioText-1.0.otf | Bin 63580 -> 69016 bytes fonts/VerovioText-1.0.sfd | 589 ++++++++++++++++++++++++---------- fonts/VerovioText-1.0.svg | 107 +++--- fonts/VerovioText-1.0.ttf | Bin 27932 -> 28360 bytes fonts/VerovioText-1.0.woff | Bin 21052 -> 23748 bytes fonts/generate_woff.sh | 2 +- fonts/vrv-ttf.js | 2 +- 9 files changed, 563 insertions(+), 302 deletions(-) diff --git a/data/text/VerovioText-1.0.xml b/data/text/VerovioText-1.0.xml index 580193a475e..d0df9ec77ea 100644 --- a/data/text/VerovioText-1.0.xml +++ b/data/text/VerovioText-1.0.xml @@ -1,86 +1,83 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/woff.xml b/data/woff.xml index 5f06c67d5e4..2b5daa1c7b1 100644 --- a/data/woff.xml +++ b/data/woff.xml @@ -1,7 +1,7 @@ diff --git a/fonts/VerovioText-1.0.ttf b/fonts/VerovioText-1.0.ttf index 1160fd94df8eb78c7e5447873ecd8026db26519e..6b2ade9611959858ad36213e0865a0f828c391ab 100644 GIT binary patch delta 12423 zcmcI~349dg-Tyo@vom|&_m#bObM0pD&9%8U8$uF7?hwv!1_~rL90FoQL50$aKD=tx zBH}9^tw+(mwYAb(eXF&Kw$}HpT54%u+rJil|E<%y z5V~R0YPgO@;C$JN4Z~wUvh4E_1bG(5o?o$LlZ{C66a+y(2iNH}!{cM;&cTz3jaR@q zf6e-BtKDz!?k5P|CW2UTdSun`#7g%zj}0!KhAlP%BSlZ^yznp=oV!LgY`XlpXHQGu z93F@w>ql1%^J|J0!Lwh0>-TLKzI=@M7W)5iZ4R8blSahgbRqvQjytss)<6Cz2jB$Dh+Aa*sp`Vjo$ zhq;ZHgnd1X0mkGLx!=(1VeD(L?YdyQBR>Y?=q_R>_K}w>`6mcMvXdahdV*la&pj@v z#mC466VCw1oFdHxP22~24`G8N#xwf+)>E&XdiB(Qo_g)n8>dd5dh^t&Q-3`5)~P@L zVdY!3Z*{-3{Pa&iL4;?+@0(A(T=2eSZ`t0O|IU2wzSnLpddgaDt+G~H6V|vjW{p}S z*042X4T>#4FlLOWHUF);i9q;9%J=AMibWGyDiCGazY$_L@k6wo)RQ+;K58ZP0iB|+ zr=Ow!!1M6F!}PNrzEw~nOpEr34vAhDeJCyy_ll28e3Cn)O6f}JPh^B_x#Fj)pJ;}( zH|bXDYYb&Zx$!yEuPxn0jrK7^10<#l^-qt zjbH5_@?Y*h?Eh0B61X<-Ulopuv5Nf_$0~jsED3%!_(JeQg5)$vuH^Lrlq})@E+PUo z$5@(pH}qYG_uHCd6bXmKcPVa|#|SJ+deE#pGBW=42@XTI%B z(JykGAd%k89023m9%Ion)?KXv)WoV~88j3|#abCpZbTBN%YQv!1?(lfI6Ydz53B^{8j!&b0^s~Y4%o`79jzp8kc%*FqL1&5J7c{fT4M3b-NronMic+stTv;J+NHumf7TIhRpXKRj1FG<7lTLSCEZo{yBCe7fni|jr3Wx)e z2yW7GuxFv=MygS$h>Ua4dO=s5QdmZ#21W2@0i9LE1c!CBk_W&lWo=ok2QsG~$sD07 z&*Qvr<5+bqd3^MaX62oK9OP^?$VWLZ=%yN(Qg^ELo<0ub$J+`1}rZC{u6wUBS5f89;j z?poBzlPevWKaJN_5B6T2ip`149WL(C<*_pbTqdtXr%^f0PVjKReuBD_-b2(8ZNva@ z-vJU^dB8ptMj$x|=sYic7>LYa>hU5cg55+k!r_p+DS$lGr#EZS6c^#=AGks)W5m~5 zS}bExd{O56*LE+xYfJN*YEMe74wZ$KMZ23)nO_Z|<4TZR3ZRH@Sj+9jTbtUfJSsWJ=Nh zw2v$v-n+PbDNplak7>45pEWr)HIWnLxxd zy4CmGBc+6qJFXmTUzkWlhEl17R;lC(*n96qEG=Z^j^ZBw$#}50x}{-DrV$;lu8*p_ zG+pYz!c00IY2KfC2K_M5)3V;|@#bY=O=6(FyuqMIxRtUx zfP{waZ}cwlpNM(HI${@bD?p>wfz{)H$b~1xYKb&EHE(ue6y79?lL8t)B(mCs?pUx@ zUt5_l2*?tPi1e96JZ`dPGHj@BTNuFaiE63ZD}*>8wu`D4H2Uj|jg8&S0bD0F(Vm7H zCtfP`;|Ih_6EKXMgmeYbONF>n=uU!;$9ursUo>~IIXk}EHH`aHa`pV8I{!X zre0c7x}Y~e2^^uaIXX$aNNna=ix&*__(jgJzgZ_L*P2BK#&b70i(%P-@JoC%wka4ssk4Ga zRvIIT7GI^3;4Vcg{<=a^1|Cosqq~EwfTvOmghCl5t+UUmZ>w_k@4lyf*_Cs)eS6WG zS{ch1uwwkGVx2>l2oD(s^>P8v`i+;eCv9#u@45}!YMQpQZU&i@c%{-tF)|6hUb(Zb zc6EG#W!U0Jhs8zS_y@JC5(~`p{g9h;DL)d?UsJ}2%V6@~A|8Utzd*cB`~}9p(=?EBF>cei-J!0AiYB9cfm)1ys??Vx{u=744>TDj(2H8V zH~xMQ&KeE)7LBz{yij8X$%&n46S|AMgAhO*kHoTZ+2Pqau%*9$^B~Dq4-HjUEm-iS zvfW2lXzwG@JS;Y}QY`%>F19%F4ugeHN8}-6&>h5g8S4CGvDhiq3*qf(a`Nm+dM=Y7 zI^cxS>O%1(szWLW6%a(>7?K98GIo#+F1*s%L}~)~+s23poqHUzkrL`2q6(ijS_J%f zk_v}3QiL@ohmvMRtejCXTFM^p9w_M~X`D9MNv0Pp#uNNC#V;QB;IdI;GdadXaHwSam$#gR-$nc=-id(en#C#?SjCN4GWNs1N+a+ zH?fdUlcTW|-eLAIt6R1Y49W1Di?sN-nX#gC$P#krkub@5XPV@tqA(zGG5>rUW;z<@uN-g+xix|J>Re#RjGr^$`yr@H5+NS$* zXHc?m1~zLVAijI%(rz-Ey!(^i6@K?8&wtK%?~KWQ?hj_% zPcCa83SGYcw&q>I3Q1V%lou6wE%-#45g)hf@DJ?fY1{jD)x@H(d#rS#YJp5uD{O1wx0^Y?wH5CU?49XUcWQqZf zWW;O4`$&SgrsYfr^%>st(y8@NAd`GxHg9-^J>8{}=AX+GntuTugr9;v%P(C57ygL^ zfC`4wv!p1i=Ld*qh~E)}qL7*c>O$cTAMfx^Ma`CM>CT`eiqE8pyTBOr@NAV$X{^M0 zk+73j3jV!I!-cIbORUVS^eT$TSk>M9%K_v9&-~;Ug~u;Y$TWTU6tm(1*3Y+d(WA{A zEiJ0G)vwz#=SB4L7jW{NMNu5m{67QIYRHvtz=zA%K^iUb?;-nr_-6kVb&c(o25&Z3z>6yS7EWbVEpfx-hBPncGFxR&i_CfO_xbq)YXRGN@8+7^x}xeh0%`0Ud; z)<*rv=^$Bqk`9O16T>~jqK<@8V|4v|97!{;7C%4OGd!@rxou-a8wh!mZR57bN2OJR zQG8X@Fj3V)D?>4tBN;4$eO+Jei)Ry$UAO0GqT92)e@N(Z)hac1*VbD~$$5tE9XI`W z%@N+*k$=&Q&)rfaV{OXGm-c4PP1b(z{;lIac5r`RxIN+4u5a$V-GDwwAOX7hYive*lQxrtB)fc`X;jN{SmUP7;0Wyx9&FS zcTm)nGbc(SYpz?;KX^^Uy$P*o?nf)r+LR_{FE!lq*!}p=af=q<97D2a zP)*m{lluEISHxLMWqmn*xyryEIdpJj=-M^-uT{k@s}IV@nsj?~=T#3qy7cGY`;OA4)lbYBmw$8Z znrnxaXa3`nz4*>l`2xe8ZHa|4nbsX|kM!>!VBOm{JbV}V#$@LC(M_DM_B1Q;SF|OTMnVh;Z+hqvM6b_m$~^h?q2(0oE^aHYwCPB(T4@pBhwDNX zg5)}9>I2|(2hs71#BT5s9MNF8H}46g49jD=cy`_oKo=Ck7zJ)xWslmqAXbQxUyie3 z9H`M5FHTzgMt#*k%+hjc=AoHcl=yrWRUZ@MUp8phn`?Rp*2lK&(-x;?Kl$3`*!qFq z8uRE0SlZ3}McE;bg|oz7%Sg=ur;Q`FlwWVLh4GH1N3-0Y=K${4)%wF1a$mZ*{XF+8 z53l67AM60`k2R`I!2Obd6u5t2TUVC*?c4L*UxFWMtXyv2ROZdmJT}@<4>a%V`;`}c zRByb1=4vWc-PI~SPxDHPkpg!HG^h04X`nfxq%ym~>!~p4R1DCZaVq7O8h2^BSi5fv zUffiqEQ7<@S(G4`MZuyEKHj98xWLJsBX&IyY+JiL{%i6WiXUi3RB2&Lxxkq03ku(I zsm7!(WKH;{RMr2f2?doDXF=@WAStXMT8YEC>cfDS^*}nyGSiC-XrFT50TjsVOL8{G zeR~0G+;Ld-E);GVRpo9gwxn&6X;lbrPg|*c>aRFY+HC4SVl?14f(G2#=iyH!xA-*N zp3C=5vI{cd-D#x~Ul}r*Al_vC0&^OqD$XXm*;JOv^{M5M^%fMue@Q~{j>Vh$J0DM3 z@LyYuD!nl!N`722)AkCB!AFNa?Tf2j)*gRya^1`trl3q#5Q!i_Q9KZ7h$|8cmRB?< z0j_O>&kb-(l+WJZga;1PMjZ>n)lIq!$QjRYMB23&ye2C!lx>;=z$V_In?4cu80iVu6 zLVmm>+D1Z5VVO@;NiMC2q&-`=L!!ccBb6iB1&OJY&8MZXj?Jx+lN7W}A!h*vCh`iD zoUUtXpVil=1kj2sIDQg;GS6U=Cxks4z6!nl`T^+eZ#t+pnxnqj>W&guJ$`RqXh5N| zv$TliGnA#)SmB1ERW6~BS7xd%ZczO4Y;kSL=FK~AY+EXoO6;O02bZHVYqL43%42b8 ziXU6oNbyqC@zOHovu?rGH}n6ehFc(!j}?zI`f8gl6@q zZn*^KTL2>W6ht|PC)NW-#n7pH9l^H&=UKw7fL=7RaBZ)m+2yCbP$->&mMD*w@XhSX zs%yy^^d*{2BjJWQtFncqHgh8W;%K(8%w>XSPkk=!B-3ceE$Ut@cwM9cXOYZ`a-Rt_ zdG2wDb(;X_KH|VdVjYJm*H0ZPD>}dM&2mj9pd|WDR;JHvDVp%N78#3YuaYB;JswWG zDhFlgx_j}vBI-qAHGFWbK|Ofi+N1UC=8bDZ zu~;gp`F%XUPvrNNIJVB)n!78Q%3TenDzjIEsmA<1`}F2uD)-c2 pb1*mF9M13azi*B|npyV>!mq5?qi%e9y;=Rn3s1rq8`HnG|6dS69|iyb delta 13294 zcmd6O349#YnPaISk&#La~v#RfIN!?Pn`qI&otkaf!%93qiW6P&Ze25q@MbzxTcG`+xuM`^rB&g}(U@Xo5l%MH#7UDTZ3o)3bcx#EAt*C~7-&Ql8$f z?j9;meU+lN{S>Yviw9Hb1%JQUN>OMfT(8@(eRTY(<L!_vJ04yT;F)fp4O= zorH1CmTiBrdEQg`dWuqcC~E!HW1B`dD%uwtVC)z0&W(+2ni%!J9;Xh`Jd73KTHZ0bebeCX*9IwS%R%V- z$@tD)SA5N;|0jytIz~~<=JMuXgAe}TzaLs_YWbMbYv4ADI=Q7`4{3k)65aGLHluua zL3!#ht*0t8Xc$H1zIHMZ{#ey}cpGY=e|Zu=iu@Dn%AFMbC~U3-qwVl}kAWcm7Tzg% zLq9E7)?IFIsb24!ZJDpb`1JKRtNqjSsx5ke+RMOR=nYf}eMXh&jZ}#dsXE+3k6E=( zQWOs-Vffz^rQUVsIh}}~rB}`01}8vH)kCq=5@^lvf-|A0U;fiO8-LaMt7X4g|Ne_` zPNe7LJL`TW|7yu^mQ;Ft8Si)9$n{&{L)+aHI{G9dA^aqxnK($jixOxIUN^z(RrD&o z1YW1<)67ZcBnvOqJF0g$nxi#K;57!X|EPIU^UqqJ_G{V?bz{1B^lANF`kxq@_;)Qn z>$~tTV>gK!2MDXN}>wieuqxhzc0k zd90DDp_)J&(xPCo^C%dIw4x*(R02H0*BBGL#;7&f7`<#deN-=5@zX}xpfzdj#v!%E zWAU2sTShOQG~U%BQK0AfKqT8(Qf1N(O9sA;W7LA(A!gF~63RA4Bf-GCoA&Wa{lJ=i z^S{*5%9*8Drf>O9Ek4G(wR|jBEEO^l;plt(`$)Bb+Du)8e_?L2GeY@Wm>hfstSq1w zd@QcBI}w9BEjdwZH0l^8xsc8TmhCR7?S^2owpGNpS)3|9;`He7BbFAA(%Y1jX_ZE= z8bfWSz^eYn!IH?-%`eurxbPW^6fnhIGH+@Foua4@*?oq0LASP3H&FM2XheqqlEJ^Q zg^&s(yA8YS2E^hCYo22{+F{YE@M4QApz#OOHO)e6u^?&bgjY|;+S^j2epy(f zVQUaMM-{FS{T`JcCfQu4so4LZ9#YJXYZK0(nXw(@s9)C?ZYscRcy$PLPNyUo7 zxLxCmkBkh~OT9wVN)u{~}KIC+=8kL^Kf9t#~YzSvkosN}G zvsUH1{k6(ff7q_NdHY|qbnfB8YGe=$xL1-{hU0bkGHGvDdTD$8Jol(Ki4Gb3(fmi{ zYuAz_z%@a6q-Srj=BO*EyFr7Vpn(*v$HnrHB>E(I=* zxSWj2A>wbl92U^79Q!reptjoeDz%PN;orKvoJJ03YFk8Xb*Cm6wTfkQaxyVbEX6cB zj%Qh#*7$Dwv9XX{<>^WD8sCA}bpAjpRuK3lR@O?cVSmXU$GE8R-F3V=rYxr6Aj?Ck zZZag_c9Mvp+hI-xc^zBO#PscZH6a#h4Q8#5Te;%CYq~Zy;pf~gu3=fRIo9OFKXrGg zXcdSUyFKBF#QaPSj?%mejP?6gXQJ>skWi{qnn1@zXEgu&I63{i7+$SLuQ;6H{KpL- z&`#Gi=(tUaw0uCs+3B)0#!Ma%D5CbFE6@Y`Gmrkl*p#&-nx0L8iT6BnhWCs!96CPP@j5-4W8#bw3sv37lv0{r? zJR0{tM5D#{q<=orV3#~ktBzaaQcQ`(@kY5V!zxCv$zd=OjG)luRwA zL14BG*@D?jE}w(X0K?!5UY8fLiaB7#veL=wRbB_)q%;x^at25UlVJXa%2O0JuXY<~ zau<_H3!onORV853`Xz~DmHe_5iN!Qc<0(asWEOcHNv~VOC=Jc>CWGWM$aSq@*NWod zvR4L*!2F16$9;hU?Xcr(137va;qL_U-W>?JTa7}fy!12IoOzk~7PF5y4U~peJ}~IU za!}8Nie6k7j4%z0lK6pszn`pg*O?dCEzFZtH>|frx1kbK-kj(tY4KgbS~nAnX$}fL zt;yuOJeF(Iasg{l47tNf#D+a`&|`iU-N$q;(4V%+dcE509&A^+d5ISdCXEVjmV+&h zss9A4;?69dd`NnQIZAoZN^~W<2R)1a9(@QaXavs%GU3z$2pMFgh2LiaktoB#${Pv- zZjbAT+pT<5r;`YVL`OzYvSr_wN7)n#@U#i3IUW&!ICln4)r$UVrC2|a)Uu`Hy zRE8WS2&i%i2!GZ!hyazxX&5I54jrm;2UG3vF%DwwXKw*+DslM|9d1mj&fXc9-&|s# zn>n|eOa>`T3juzGd;?6K(+QH%fMlGnw9SiT`L0k1E$SLpG!C6vt!LGYie@#Zir34> z^csQ3DB@!(t(1wZnr}a*H+gnV-qkPoU^;qCCwgPvZV(P&)b zB4C@l@97D&ieWxGrnUKM-4_}z-`_TGp{Fb`A>{WsM2mLj>nnH9j1z&nwN{m$;TVS1 z(CY?9T+XX+{YLk-sKHrpjF{cL!zy_dM_|q5w+E7wukcnIgDtf#rqT+v;er=>1M0Cc zt6nm(4~rqaCtKrhmD?}7vG4fVqj+gbQS*`~=CNZrRx=?tH#)CZud7d|qYkz(QxmC+3)qZB*XP;t1le4lD=s7x}9yiZ(n$v zUOl@5DegCB_@LSEk9yrLaf1*FcpN6}%mydwXNJY3?ALl55?;&9=L&(vA-!eJ zbCqX1Q~RIMo6h*kf0g?)ub887ebY{Gt}}S+Ja6{@z~9YrWPdJKwEA3M^!b`J`S{t+ z<=@2h%<(IKR__omy9bsiuF(&Q>!OZQKc;?PC5O|rh%g|m#J%{y5?l83cpPx!ixa`c z>@-n?P&j`+84Cjep3A$+WQ=)Y2B*&92&eGv$wci@r$sm4ONy^rDB?^ zfv}*9snBQtjqnvTvy^iolkk-)V$AitxFhAlPo((dMF>XA*v*TV?HSBmfS$Bh=t-5n zpp(S+U+m<|cs8?uDlx#frCscuaFF=Lv>m^Y9^` z`L(jH*fZ%8!Y3P7BtMhSRQFO zp5fHdB#X_f+_*2t_FPrk$-f5N5`6;z~RSxI*V=1$$Gul@1$9lG24BT1+U8|@a1wEg5c@cnK`rg z^eN4!u;;ZDhUCq8yM_n~UM@6e%RV*PGbCSFvSp^c8OrG+E(b(8 zW_7s5Ypw`{vD>#Uw+2F1rDvJ5Dv6yRAG8JhZimfeU`#Y?G@4kGL-O-d$m}$0So}bt zd911oRa!&Tf%m5a6@4h1yT-~I7>;H1=LqZh*vR^k+fXOEb=$O*SS@c6C9kCzt&IeI zK8-_in2ET=fL{PT7ZR8gXadPAL2G582)9<8JyxDz1FTfm4w z&jZm$62oRmzL!x1MXf8VlL>(qe-p`zL1P>t9$d;PH(G|CL_wQ)b z39e|!RqEd*Kev-_N_5J&qe+^Gw)$ynIv4UZMxqWroogFvJ$}0I^vyRul<2Mz*AI{A zLZMcxpoDhcQ$sHjI#%ww;qZ#Xss&?r3%eq{g<9Uk$=1o&_J4KiyHh`yIyLgh?p-l% z<*h@(VqH*nn6`BW`aLtZ+9S;{o{en+6_K00VE*O{YX&u|$fv;`xHaQXc zXdIb-fLfORdeZr=sjuca-lZf{-m7+Oly`L2ML?1{+q}YR$Mfhk>c6yR|Ka-%j*WC& zHV?0Ci!YgX`GB4?+FX8H-Rdr@=yFcIJN4`RQ>UMtS~m6TC$}{%7P*&l?PEKu0_JIT z8-ffK2pClK!V-0J71b<@wf{n5or97fTTuQ$l8H9v+8_x7(@6(tv7qSSGYj<=un9=I z`Dpy}R*!4;D8Nk4J!HX)e%{ved6M@sRhbW6Nai#T&>M09;PkICnRtbh(++3QZRIr# zB&zC4C95S6v|0viNSHd2JF&ytvV3@3{>r~Jdg9GNPlMlzUoQpvXU=Qs7tobYw)XYk zf6+t4g*G2kJ*&YBp4BX}uPn_o#i9&tw)nmF-qAqF<3nbHp{6xjGd0+mW>i1Dxa+4D(BqnL7o=C&W?0BGd@JJuUQg8fUi*Cb0!V0qcS5y>R=>e z21*bVGHS3sk`8{gUEv~8sCgt2{$0Dhk*ElXYqFp-a0mPx=#3qcxtV-P4NI~@IytZK zDl&`X)xjiPVsN2jaDo-RGOu@eEeH3k`JdU@onde6rsy7}8@ZlP48Wy7W#n zXELqnKlt%ZZ&vnAepooPNs01;TnwukYL;&Z4mSP%;iF3@{{a1ROm8hNROjk1sY%lI zXjf{*;p;D7*)B}}A+)&vD?y)N4Yh<-+2r8pB}2A{ZX7Iwxbhc+`QYY` zode&0W9k#q?Qo0ol?#eZ?zX{A>80J_-00rFx@Xa`XCAZ4qPgpm`a-k$>sz^}uPe$9n$sK2CL4!e?o4}W zlJmD805`CX)}2dSaKnIO!bcOLLYEadNkAQ}sK>#9M3OPOO22qwXI5;6$?Ol6ZG4jpv1Y7?@Lp0x>B z1y~XB?M&G$;KvYtyQ^tKBwIEBAXh#Ii}i z>aD;g!1GmRmW_f0PbC#GDlkPL5`eHh9X>NRb>u99iXZ5fCL*PzPs7uClTF_x2T~rB zdMrcm(2)px0~SAn9G0n5`Qtks>9*cQBgw1&QjGVQUcBYX=;F@Kd@gR=c_N3>Q}5{# z^?KgrmWF=uiZ$(6A7!bZA3}Sm{$sCqIRLB??wLz_{y_ zOA;xDm}&oQS6w#L+i0EqgS9C-u!l1lje50Ubv1-UbvC(d{pz8IZrr~rQSeN?t^FCk zsV6aEF<)VexLCcB*AhGB-SKQ!v>i-!Xz0gL^hvvGR4Q94O&d(+kkL+in`8OzfJQ7l zT(Q=o*M$&`ZrakApc$dHrpaXuA%-_8QZ!O8Ic#d9Q?0i17Cq-}3D@+*#bC#1b8g%4 z@)qyT(%!R?8FSlIH(>IqLL*3v=U$gS)zPc3)Q)j4sk4iPI^A`0+enLNm@&}@K z-sknEBVMR1BA+K@i8Pc#({K@1GRcNwc!`#Vuyz_+lvTS!Iupxn@i^un%e>Ocq8RZx z%$i}bv8^{A=vmXzL7>DSSVZqc=Y470G$t1J6cY|Eyl49p570lKoO*TVRQEVR8CoSeoCIj<`qS3- zk)HP4OEXAA(+nb5^CV(Nr+)eR)W7VQ3pED2)vMKd>|QBgi43--7Otpk+rA{#(7$zk zbN)^GNmQ7${e18TOApfJnYwy!T7r2xo8%8hqA`dk83It;hY$^9CV%65JjdD@!B5NxYtg=Xrj+$jhnCPC|#V zWpSMGM*R4WKvWn;E+!+N4?J!SNiz^Oiq|bnu>O2lz~d`xeX}KQc#H_bwWrIcJwQE5 zy;n&NNq5b6$meGW&O7z<7q6dLyyi{(!f-Nb@?`@3<$Mst|D0z!{@4A>b6;q0q$>aT ziu&k9qWaTsoPBzr`4`#r#O$WYqf4hx@kGa6RF?V{(xU;;bV7IuQJt=yL){pa>&EAH zLav`K*VLyg=ecUGAM&9324%mHy0X?P{s`=EI)?syM2aDsmauM3H0?O1^9JISU*;s4y!UWW% zEi3R#OB*iLSuIYE)pKCV-d0zAI4UV-BRJZq$=w|9u)Kac-kP}b%Ds2`8WW1B;*E;F zGf<{5TPq=*;&ZuePF`dyQQgj0-nweP5btpomZ?24A5rv)ilU!YOrEU*1=bj6OSF)+ zovzT53bPoj5i2!jC?~^nd8C?LO~~4k;Rf6IGriMwVClZEBdy9u zmkk>nN{y=sks-K$wLTD&!To!^5EdGv`P@KpsA14_VCt30#cxbq2flyhKnm^b&G_>X zJ2BVT9L*O8GHt}1Df!?m2P_yLiiH%1uRvX(HYGZxvpVej?^|3 ze2#!mhxIEw5|rn84Xv}g0-vhCkfruk4yS^=CdqEnsTfXmLHMOZKF%n(%vQy1)1M2# z7dK&Ljvy)~ycz`2KrNzfqW&ie&p?+oOibtO6eo#@HThg6VZ#3j;+h3E!(ITkMABQA zxZgI5ZpprsI0xQ7^ZYqvT0y_W+NFDzXCOU33xbdzpOf3Xhd8@`6Oj+k5jlD0^zx@oUm%j9A+!k~@cnznw@ODxPfXug49|7z#@uU<`$$$Ig ztoQu%H$11S(;1CCZ_-F1UxQCGmLa4~t0-O#5~ofCFTZ<1IW?7Q9_WReTkP?%;c8~VF+Cw#|K0GvDd-(Bl za_X#3Z!jA4I*kgkthzY~ums#N-nZK^wri8;zz?T-rv~pRC#zCRwzrX>6zu4yAUBQPY$~5nl{&jB z)R|Wx5_W~4K2VXqzCNMDYcH*hpYu>45|n(VCsbTPXwq4-B5c`HCU_Nqo+F9A-M+uR zGm6ogSn+e7CuGPDbt3FAP2EntOss;iW6)$04G`LFr>Bj8RIUD~y=#5}Y`><)r~o|Y z;rY}uV|JJwdZN69E&q{n8NQfY(0%YMV`)om1xGGIoN0^KUe>ukNr>*x5#rG$YyX#? z*+Ol`4=@56#=~EFNR5`EL9`sVY>Q4ba#!xy+TGBVt+u&po3FNoYFn(f9o2STwe767 zUDdX`+V)i1?)qxmP;JxIHdAQ>-PHwjR~OJ-T|jqr0o{e8k8OJc;k`RtXbAs@9Ul9e R559FPsa($fFPEl={}1nCm>K{8 diff --git a/fonts/VerovioText-1.0.woff b/fonts/VerovioText-1.0.woff index 610eb15b96ad6d82a5ac5a4289a1279bce7c4f09..2d81ad83338bffcf69ed054fa18167d1751b71c8 100644 GIT binary patch delta 23669 zcmZsBb8u!)u=X3N|Cw>glI@x~Hd3 z)l|*t?h=rp4iKQHqJ)H^nwla2pf?170{{RZ2nhg?Z~6auL?tAM0RS*D06S;QMiiit}A0J?Rf>lfd0N!4>!)ydJ-?Yj^r z06-9c_H7{kngdvP<(L|o85sfge5=lmZvSx@;8e>HCS~eT4ZyN%yqzTbj zAY8byGlYr&>`w54$^0M$8nl4EC}U^X3&hz+G5vZgu1q>-YWcVYnud0nqDy_cGj*Xbbpqv%4RzNF)GExm$X& zo~th5g!=q~qM7yIdAkACaEDRE$b;;L1ypu%iwE@Ol;(uxbmU~_ROUqHH0C7c6y^lw z^j>&W3aZqLZNn-Cc7{X$9vczr-ZO>;0AF4u>AyGVznUxnAzzj_3)tT~$;trA@y%W8 zLwTtUKjmkeB~t_`r4d`nDG4JZ2T5TZETB`r31NvV^`k2F2g6DzGp0ot_}!on6}X{G zqpK+?t2rn|VIzZs3!}h^)2VHS%Cmgk^Rjw+E&}GuuRn;k1GX>zcBsze0J+`Q*~R2y znBa?D`m!bd3fvuS)VH5*b%mi&z|V7jX(S3xjS&&10(IR2E;HUzi;>jgq$9DIP4UXs zJ*ZT;>uz3)+LF&}i*Uo3otIG@CHrT8{cHz)^buEAmd#-}iySEm zv!a!AZfsY385VL5X&3)X4ZOlYij=!e$)L)^Y8v9Z&GORqBTkFvYZSJ_*pA>g$$ybY z$6=NTRvxS{U1G<@mXA%7@GXv>A3QPDGuN{$!5fV2ihYj_kNpt?Gh$|%bz5{B)i~$1 zI>xSnlaHH^XNa?nCx{Cb8%%|Qft8A#ik^z^uAx?3aim;(vPxaG3gmCw{9B}6U3XTW z{ni!n*~!k^SNdjK`l(ah$8lCq|C!}!U-p?*-G_O`DF4x-2CQAqXPDFea90QZRl0Ym z^5Rsl%cfb4ooumMmiu7W1kx`VX1(ze0qJ$wRDsjWhH#JRWuIlJ;i zXZ6W%=QW?56@7JQ!0)uCPP%24PYY_k)>S=h%LZ9CjPfn%W$Uu4m!a3iuW7GMuMjJr#M`plwAt?ijK9bM8i&yv>p5{7l z^DnoQ90&cgkL76{$BuMM;tqROT3J>2WhO&Lz!bX^BK_r7@MX&!Jw+0tbZ#P-VqrouR~wyR=Cw z9sCL=GfG(Z(BPh(T8D!URoM3Uut?v9CR{E4nc(=vkyz95f-{#Q>b7AWum4{>Rs;`Dlnp7V(mY^?OV zBxaCD%YZsgk7mvg)W)rbB6`)aS;epAX>!k-fbNQVdE<~Gim*G~#*RxHAV5Pe`1w;t zQoUn1Wq7zRf_ytu?WouQ+#7h-YxhK6TL1DR(5)9e#orgrrcI(da!+j@2T#t1_sBSE z#X#1+9w=ZoQ9-||MMz!6cV(rP+ZePZ=02eGfW~oX_{dXg;GJOPRfo5{^y^ph+5J_z zvSb$bf)z*19Mu(zo9AJ6GIWM6o^GXH_T}yHMS77s>|u=`#^dn@MA@Y<67}j8CTQ_& zPs!Tn$_X(^x@h5u+?9hutfu~4^XB(BFe5;yWj_6@z97=VIQp}bX_oH zZ6S0letcmu6#`XZ%%Ai^WJq;Q&Lt29IiZTi;)S#2W;JV44H@0%qDm+69aw^W<~^N= zgl=rRx)JardIVM~<mMT73dnm0)#oKNLZdi)xxYD$fLaou zdwkB@zva|ETezZh9n-gm@;=tsVOvP z8dbj-p#4DC=(O9MrIEDf6>LBTf>5@eCE(p2LGsWJ3I_{n;c7w}=7K0aS&| z9Z@N9sgO>3m)c_&mk_)QQjG?Q9kLl5N9Vn^`H>WpnVx~%H|8;(Vp17}Ni~tGn+0C! zvXSitj@^|=*v09F9q!YwFXxmp29b6ts2JUV+Sr2W%>kL(+N20^JJpe)LcHsRC9 zjU_Z@Zc;ao@W?Y6_nN_xt#RDgC9u3pAVmi5=ESPJiVM z|HT4>vuMUkZq{yI7J&PprrF5sd$Yz`&I)V1)6Sg!9(iqVp`lCbdgQFc5mEyRjqF46 z_kvFT&mKv(ur(9}J_?8Qni1!;p~S=C!&~X)!_n@t$S{2I&!Q*X6l(+hD%T6E{$KL^ zQR1g*16^AG!1!k}ZGa-(cUoF{Vb`3|;y+ADBBlE;*z1QNia5LDvIA||?B(i)DfeXU;|EE9 zp{(v{Nwc-WlF*|+H&KlA{Cq9G8QiaH&l{7&sUeBHV#-HN{Icngz^ay#z)fa|#!CbI z#b}NCBUU^>Y@$Ur5n$#HuU?H#@r(+Z$3vddijFfWPhj@wD%9N|l_I&ak11OW|4Ru+ zz%H?;M;i%C8WtFCUZ#ng-b}W@TWNzN4X(GeS_YYcYl1N0wi5;kD=8Nz|F&7NcHFZ>u!BLMQH z)IONjTBx?DZ%9{B#lW*;OEbvJiXK#NF&e$;)~4kz#q<)HiH+lI=T<@<%H?NA_vYu{ zra>ecrv1#2^mJ$$E=Gqmr@uwwCs|lo=2tGPZB7Z6#}^J{eUe9xO6x19SN$pRWl+l1 zWrTfY{|o~!*elo~c+69UmZ*!v{wz|6)N61|W!1!2&=Tt7Ze>Ra4>Cno|GnrcoUH<( zARVVGSpSLS$|et%J6GMP!RQxIjKDh6;R0Q4KC3cbxDg_3|JHUJO3aw9}cWXC2-6e4vGkZyg4to_f1N z9hQwek^4z1 zRj2@#R}p-M>FA<9fkT;~3CDynSue*{j{n?>Ofgd(1v0JJcX$NdGm8LnuFwZXVV`ae z!$1xQ$oOUTY<{p!<sGz}Yl4_tyc{l}SP8$ZR(L>LYZRSvcnxf3r+H}xHq)ck_+eo?ik;|9rz z0}Ss?1)E0ZgA;O7m~xuT(Ugkb9`v?@zDb?vqa?p=(7!#Z@F__S#-5~bI$@D#UbGS5 z70Gidd_gD*?qh!(lf|pT!v44 zbq`MQhR&4J3U97JpE1<_MbM2>XWG20Mm1Dxc|HYKv77v$2^9`7O`s=D#ne3@O_H$27C4#dg#yL~Mb&MJqu@#~d#4t_e zk0L81muQ@!y^dPDt;i;rb!r%9I>9nw1CNvul3|X73Ol_pg?dS4@uw_Pe4^Hh9R?@T z`Y0x^Xe2M(hi6}v1V(JwL}r}bx3ji`Y{tA|XyB)cUwAnPImGO4A#*c&jLkmPdNktS z(afZh+X}K)2muNZ1u# z1*9bzbv--2LG*!v$c!UbY6XawY3!2`^cfuXur6+CRjryMk~ES0y z`Dfn(hS(mCY-}%3p*lv3K3#5zI?hUDZ1xuuczw2x)tIJSIz>farl}po9ky>Mq=R9^ zO~+uuU5zSnpM5}U4|c-@iABj;4pXMAb6lm?#!-v#HM(XQFsRBx)QT2_#6=Eyh)rx1 zlo&ug!YkrRG#|+6Y(Bml)M&(a0Soq;R~iFu$d0p^t-=qiM-AFQv#ZT5(o?VNHy^vA ztVF4}ctrSxqsw7Rle}MC;S2kM4b9M*g@rKPnX_SJ9SMGM z1*mAI^eF_8jW6>lf?7^G`2l(~Y$PiZZve$QBd~HRqH52ImzM7+nG0U*k8e+m;Y$%8 zn_xkntZ0Zd>V~c2-16wJoiZ1L*xq>Q1xt~U1Q=F{NJr3jC-5MbtlY{VvwxhfdX;eY z>>g10T zTb3)T8X3(iywSE9!@Y<&TiAJ}MzqqT;=DPjRmq}$nq*&X40n@(w9pNU z9gHskWYDnMrb40lJ5zhshg!>Ohg(z+L z*j8(ibJq~;YG>AziJ?cFDuiO2B;`z;1;e&Yp^I{Fep8hNI`f3x@*AVNjvDxux23WL zK*-Z#F!Qh`m1*C{HnLu_kaEav#3o+)P7cEZ57^r$c`cGgIg7a;9qSZeRNG{U8el=D z$$6FFnkPfVY^F;$6-BiS#@Dr#ZyDwK-rcSxd^>*qE@Hm#0hlE4M2QaJ{T`hEf3$&W8RI_9wYR(TR9bm$AyWz87aP~qaZT|;UlV(w@{hwG7)+>s#K{rZEl1&uGLX_nXZ^D?G*&UrfxOBZ z`8s=^$sjTO7L_7LRN&K0c8IDDtcpKt?L5=rSO(eGipwJGrz!70mGrli0aziTI5#n1 zY*t+w7vyDnJcbll+p`NO*T=j zWpu`t_g(TaN}ZXJPbTR>+fpzXFsZU@xO6$jpq@gO5M!uGeFjVnaE$+mQSM&H(23vZnFgkURYV5Rvsb*GTeh zGWkd@t0b2SG+j>I@cR&9NIaOSv#|M7&j-p;_B%#qXFZvZ;m4qy8BLg|?rQ4kMSHG= zb-Bjs^j%!oxpf*|wRtMR=@vt#w`?_Z5hk@^Y51O*>N&xx!#{0J0iKv2_Gch1fRf)ej?V5k0-jE!_MI(+rs>h0 zW}xtPni7(9ORVW=xww-5W*L9tBy^z(H41kfKnAa0n!fj9MfKpJNc;_^hC=!?T|%Vb z&AEjrY14e8dH5G1KDJk`$trwQpBlkl-caQvg@hE4X-BW=y$Y+z;IwWRj<&v(ZHl&x29wK*Ao9c|BBaT=$=TL4uh-V4J;vg9w}BQb(@C9&6N0n~m1U@;UzHOCij!=wh;2&*1!vWTjeLl z9*0PL>OPN+rjOU@Oy?1pW7e+qUNHyJ(_a~PkA-<_y2gqowyUzNbnKwB1unQQo2tnQ zt?+n+!bFC&ld`fCwYfj&=Z}GZEM`3#AW1#Nq;uINDkPv$w7NX9!7XFoM3aW-LTu{O5mTMGoeB z@WL8sXUDvZuchLAVu)#_K?7nIh5nE-vKbiQB@b z4Ai0O2yRW+gu7ejdTA3Aw4#3&5J0qkysYT%UjA1c=gAVTcqyM5j*Fg7jb!nptmeL8 z+O8eQ`WQmf$j@;I$6<)89d+edzr3*Q^0t#(w!hXDE^u%Ksk~Z?v%1$U=FX%jp$w^Q zE+m|zZ~Cgrp1(k`sy>>|drZ0J2XhT-R^zoJnplTnJqUD%7&v^^4ufgnpnwU_+s~LL2pS`izl!+j&4ZA6ZgP=OQ{EnD?CUGTjBP90$nI7@xE~6P730S(zWfowTv- z#6BQT+sU7x4DTv1`yp=lN%m0#A&W!72r6u2MPA`-i=wR#JpKMx=sQHhAD9o6INHgp z(40Sa+@ys`b)@C@(WIrd#ekcAMYS*NCeR*r$V|iOsx~)OZaKq~qt+eyD;YHDet>NSxzisbo5q|-(qmhOQ2pX?3kzWwR~gb-IZmHX9$wx3&OOPsB)x;FLn`s zceU8q8E2-03xp4UMRbx}fgtt~fl_B7stj0D1V?-QQtoz?-S@(2!NhMpe!VU(f)ruG$@RTMR^n=nr+{ycG}{UfxU%+viYI zuNfgbLvvRW-1VtaFl#mhb3+)(_O_<{OML*kJCA%^kMe|^L=BV+ANIY^DQZ+X0HbM) zo{)&OOeUryyz5IuBX7*fkkz$az4L9qku5gRyJzn|0nNVQE16ZaDJ8%x!7I2`&3 zk|_JwR*Ir8g!m&UUl{pP#4z*j9Mt_@$+X9v&*=)RESM#QWgwExRNRK?0Ww}(2mIb`vpQ7AKTWost2UmR z>(2t;EEEB~NbW_?-k4a(-GYdKV>ZFRP!EEct0CE)8z=S+qy112KDl!yAP1$i`O>YT zJ+n@LPJ%J!*RN7rQVdN@!uB)33s z69(PMU=xf(^3pCRc43s~5C%a6r%5p_q!c4WQQ>hAR7LCwE$LYH2a*j`GzJ8%;`|(AuHN`oWToX|JYk5a-ucGdS4y+C+&OQ8y4l z5tKIX;2L`VM$nilAw@CmQpc*mus0}xl26gf@G@sMu)&mB4$miZMud`qMsKQlnpKtio8qq0_{F0AQ$2DJ+8=>_HR>JdF<@8T_zS&?o)G;WY-HsMC?2k{e_wafFiv-|m!EiU zzG$|3xrc{9+H-$zAF)X=KN!Jz`bEt3_y7ZY$6VBxWE$YHNE~h;e@Jn|{;oIOH(|n{ zy(@G`^M2GiY77&B7b~LmjG6;)SR#;$f@!EM?cZl(_`ng$i$eW-q*HL*!-ot}{L?-o z#FkE;Q2YwJlesYQ+T9s4>6Q|5I~cQ%D*knv8FmkBv)Fv8YmR|zZH&yggE*Z|lmf_J z$RnD?$*wiH(vFvYY&9ja%ktR*Zy^%7LLQQgGd8pkxkP~eg+|x+qhMy-0S%oiYE8N@ znnctq@WX(h7-g=@FncE=m!#uJKa0E^m{sL{+OX2hFSfFZO-q5jfFN z$2mmr9t1lLPOg?`5SkM)ow8IG;|l9v)e&(@v!+%zEpC&XA^46%l}Za8x4r7}`~I`J zSl8L@LX%mTI+{u1MHDl-}xZKUEehpzcy@3MbYe%zT z58vF0jI^l~4y%YMQl^n-Iacqjt0>Pr`}lrn#gCJ%@vF~+I5A_e5e!5O#8#RLwGDvi zMxAT-T);-E9J$4mtv=tWeFV?fUjR7FQhvJDN(kx-w-*-X4g@F0jOdhPl9?}wu!)%( zk^!;a`FmH#B*$FubjjJHpErT?d|S^t(Jw=?WOVx2aSto(1gYjw;gL2i3OXKN&S{&G zuVmArgb^AH7twMpgKCH3inTl7XXlE#^YyG$T3gAu-v3Bw(Au+2g39R~O2#6?T)F^yNH(NI8;72o1k(V+Q!hZ<-*?DL^gP&tDs4quJ07yjLJ$r@v86b$I8u_!|0DG!pVX4Zcz9YX{85}O8iUlJ zuL!c!su_4Q#9JQ-+H&TM`?&0Q&YnLa2le4qE)Rx9$^Hh8hDnFxzm_-h=K+>v9!xn{ z2S<-7)syJt5(cjGhLBXYe&eICC!%IlU%Z1bbYa%R~vr61uwn zXcM;{7_{1r^iy|tVYe1bSD68@CMY|a7pu5{d}k3o*1vD>);(Sag}H1CH&BVS;S9~c zY6^q`b;N;*|L#_VOIaj0z~oO2i#4$winK2{_^A2uti%IcB$PqAN)!N7aAtFOuWbti zE#`qhcryBjHdA&&jZmA+Yw|@aagTHvu}pA8FTGoLeK>q{Yu$;+{UbhjwgPbr>&J1? z`G$qE9Y0TZ3*)c`eQ`5m5w%ulI3be1ushH_U&7JTP_FR_W~>c)taBCKeneg_uGU?x zPynG`t3neOAN6c}E4-tc+{fYz)|kVE=dg2J_WFHDX}pjtb8a7+-=GOQ!&)}JC#q52 z=*m{j@wvqjd);v zDFK1;F1Cl~c>MytJ!fh8y?wg3!j13+_f6o>z%fNgRi?Jg*XwOpfb+ldOCGKcxb?TM z2F)WDKl8(=74(vsLew5j*ImsF7v*dG!?8zJDO$Y)L$)> zCYWFb5I_U3zaF2!U=gl&nu*>$0U4m&wd5m%eCb8{)nU-bdamh-5W~{E-K1?N=;`B) z{jXtLp&izyP)=rUivX{3k078~KW&hYT>zBLSVhws$&~9uCPuM!=jprjh#nO9knq*G zoZr3CGUo#yC=rua)L-*IeXOaSn1)haUw{??(@v?>y^l5_BgJQm-yD_;zCa)utihc! z6GZwA=MX@kDaXv=u|oeT4N zQ|S3XSNc-NEGh7wS5R1in0^0->dMe(QJQyZj!4SAF0$(55LhVDq8(dijB5mktDsgk zDyehC+ODMFP=kk7M1jKjb{rtY2V@ZUjdI+}B(qPk4>v{I^XCIOh|}TXk`@ENYAa4C zJIN|<40F@`MPgXaFZZxI3|($?l~yqKe8=UB#n)-OM|o`TS$AQwR8!T?S+eS8+E-4y zyC%=OdAj`^#W(cBgQ%w+(8zoZx~i+$Z{!t@`W&K1vpcBQOR%(4X$s6qf&$H%3j(O( z1yNt(YaE1npxdUvlAa5o`z_@%(XL`DpKiP>*%_y#?!BwXn-5J*yC@LWyc%jy^Hb`{ zX`I9z9`LCZ4Q#3~7U+yBbCYpw-X+AKVWBltn>&*nGSv0^I>yVj$BjH5g0qAR2#QW% zU8a3~|9Jw_DaCR=Bm&lRF9^^zi#E9*{;7Rd<~*YoA6oQPuCziS?Fl^WDD{LH%==It zI|({PDboMvJb%?*^g&h*I^QeNV1?Bu+pJ46@9-)7ADv4+PK0u4A=RAygJwOqINHM* zecs`xSeJU9l^`eiIxDGomt*~-W5QJ#?dG=gMB>$ISV@;V5dQQELRdoP6Y4rl)C!S-di*25P?viPjEnDbst-M;VUll=vo z%E~bx?YUJ1+!?Pm`glWshxR>R%@d9{tN|-F`<(eRVJfGgVV7Zg)qyvBzKhmsmeHi2 zm!*YlxCbajH!Z};vOTSxQIaV}L4`_+xz01xj2c~-Iyq=>S#X7cyZJXtbuX$uKe$>M zv=M=SAi9c1jU{LZ&+aCJXL50TOR@e^7p|yb!s=|`bCO!se&?$?dJY{4HW}s{GmZu50@zPz0&p<;41L3J z0x}&qM9$_QO*2lB_F#)C;Sx|<7 za%DlEP?O|a=T+<34oSI3e8PN7irtK?YDA!4@=;PW#XGUm6oQM(~4nu-Ogmv#? z#8!=hQuoZ1-0X1UcMEXz1?cLG4?rVmsT(`DmNvFmY)X+YkSZgD-fsWLO|{AH_!pY0 zKi4RFwmkFI&wV2BtHonos)Zl*1L^+nHKpBcyBlS*K#_G3gccFF`rmm`9jXEhqZY`F z<}ApRp)h#Tez=~ zK-pyyZWNwUI1X&ELc^n>k}yEa6Qk3rHJlrDAi^w9)hF{&l+=T?bzTI1KI`DF3j68s zD40|;V0|Sa8pl#HStyC{8O3)XhE1C$Gp9;Qz6aRoc`085elU>12?6tybBEpH#C4Y) zsa%)$>0w{y7=p-`>0up?wLeF_Hs5;P78!@J3vL?eXerhvG+0!YXSOaw3RB;@0PwuN zAx%ydH!NJ8*v(O0OI&W?8q=XhQX-oo@mw#dEl){vNw+FJjDUxq8XVgx}T z%f%b1g4c)_`Z-)_y2m8?{WBCqOo*U^TJ^-0&Ed!C7VpnF~^{Yoze`mt99|jMZ@|5-hbyF);yL4bB zS6=0NxjUk>H^8Z-j=$c-fQa~n3Zy07-%EANME`tCKZOkV_=ycG*3GqQ|mN(fn*?Cq2syS@7@~S8>uRp8{ zz%xvbRTLQwBq92SJ-xg3SP!c6i#(-6!p zE2iFQDg%I>*J_@(@8;iiq!PDmyh-!WW1Ey4cxXNlJCh{k4}A_6xulfWeY@p=TbtI_ zj5n{eNa{+1&eO6+N*cOwT?j?=|6EWiP54@;csC<`2Mt2C6c?nxR)5NZ5T zx?*h$kV@)a`T$6~f6i@lrU*}Y$Mx*qg!4Rad?u+NOD%09B3c28jotkx>&uk?%$g2F z5~z4}p#zufNE{uijar?$PiHVeXSUgOPeLu=hMBQ~&F1@)kB+2W?*)hcrrfzq6$mJ$ z{{ouX6=_8eBRhY&+?=``m&m^w8mk(xr}MP#5+AIpR2`SrV%Fq`lA)|9UObPsddIY) z>z6?D4m>EU#md74T|MAp&Fyw}cx75(#>pm`3?+lBokN1ps;a|yYJ%`{#18`) z3qHF)TBQo>y7}|=zAp(Kc%+;H?m>oE_<>T^U5q6;hD(7LA34FXT@_K2Tab!FJXd91 z9PLoC*CzY)(R`wQ3|Tm#5I;FSPHqjA(RmNq-MmBRR#_tLe=o7sOn-`P7R2##B<>_R zhd%oHsx}QWFqzL6%0fqFJ5Z!;|BWJ^9GUX?%BRBqq=EQu&OY&j+1Ou2D0-1Q$p%W! zZ=`RPuS*KKHwzG8N0e(xct$-22RI-u^BD^;HE5N9f+bV$Hfb*nQPw~Q+@pXrFeEQ{ zc!ERPsOVf-z;XmAs_Q+aRWjcgaVEI0=2!N|GZD)pM8ztwKJxot1&9Tmy2;KOJbEQT z)(&#e*!Pl`I5&zicJ>I7ZFsY%C;^pmYj7=o^&6p>z+4b)qw28#c*V;p{g}h;Hpj25 zy$M)pdRVihgh2B|zOde;s+|__aq}@&p4&vd+>LI(DS;P)X2;Z2>bg2qLeN5K1Xvna zkj0>KI;}v|5!+u(n6>Qi#@nk|n4%U0w2)sA>^(Q^@`y2#R4+o1Yc{-H8UTM{IPa&| znzJv$Fj{S6>#X-iU;in#Oh4vcTn&udc7((DmnF_~FEvS5?UYk%f4f(DLi5sbQpzq8 zo!{wqy9jQj*HWEt?&LKIJ}O22(!#YiygDDoR0Rc>=ET31CnP2=Grr6RKWhY0tMW|F zzI2;(^Cu#Wtm0SCVkKF*p*+x9R!4|~!QpHzpw=5JtW{BtA-0pemEvmuFuT9bu;}5l zG*IoKPIf*nem;9fooc0tmVL1nVYsu7j1FV8L^M313c4=vbO-&&7Hr?`0U3L*7Su^& zNnGO5$r2k6f+Sc6>g0PD@u-OlJWPU~C?Mb-ntM(!_lPj zcp3h%wU0Wpm0(=uClmHnN|8I`OcL*dk1X$oT~ny3=5?%~M(5dEzaSQMUcwyFsWtX9 z&YU)PY$wj)}$UtiQLn*h{lwJI4Gs=5{_MTC`#b15;PDScaPb_vD1d&VmSme zol=Ha7^YqSN{3FTF|*441xo*3ujfmw!m-0IJ+HSL{!AwEn#;b%m57}Hxe-Fgnq$gc zQmwXuX`2q_G6?s0kEo}$1)PDuwR(fvpAfv*it;^P|AoD+~6;_{yQMCweD4YzC>zBi#k z(YNZMPF(H6GRfb?-yXJA(Bv#y)!X=nwr2mZR8+LFWIGq0>&9YSHih@o6@5fxH%US( zrh5GIsgg6pClWs(geCL^*3f{ls~r*I{x&x-(X1>22$KD5+BcF)04?rs;3PwO2Wi#A zng`LBBLTc#l9N}7Sf8yEZxrpRY;6_^TnXG7>62CRx5>_;5wV&ngAZGs>oPP1iv%jf z-y4*y?NaPKrk^q+X{W6eH!F^tBtmEnXTd0b?tBy!+Xh-(U~+TiXZ0R%#9TeI+CmMIqm-w#nM@qsk|_o^N@wPvMx9H9>qap=*f# z>jZGs*mnv?65Xa&YU5I++ELv&Z2h8*Zi_A2IFszHI_kcvI+M93d{6bKbFb7>+{VOZ zc?MWYNsZtZCXYzw(y77?(=g9oeD~9&1z1QuwQ*+cLz{I=YGTo;Q6>S#?tB_L?N>PU zZwyDF&`gM$b-OLzP42duIR5(z;Lm|KSnRziOm z_~V~wnD9Y`@`7gwrA(si!bl3A8f9>8&M%-UN~7>44;-3o0nF67ANJ%uPrgzl4bv|y zetGrW;Nhc|dSwVO#5vQ{rktXdU)XHu_@{hUDv) z{8%4(7WKKIPU%0{8i)_|&r;~ubc?XhQtgR8x41LIs0JX6Y(4_lrD4|S9b=;Ad-@8| zBV!|6FvdE}OS%U2*TO5_hb-%Xp$L$RXs{3c@HO2_eWY*5_UTyvONA=t4U~YuUHIkp zHN(IVP$nTBS4Oou|4@W+Xs=V+EnipPJesM}I0_TK2+y4}!%Uzc%bm0GEviEYtqGQQ z;iq5Yz=cLHopg-D7pZ4=V@k?@A^yl`GBSLQ=gOhbS3Gpei*+gSAVU29{vVuj(X=ZjA4g+-+tC(?$qH5=0}kkBK+^sSPxli{nJzYwT2frc-=ejrlkwTRk$dLvS2 zKChGXEIAV_REM4?Y)#2(0(;`2S4qO;i}4p+J}R;iLAKy@vq}k6wtM4dZh1-_GwM`f z<5js!UkBV}prBW&#lKQjc}A&EQvxp96{ri`a#dIdsE0L#4^#5?z6rgeI|7nluPv%P zlibSXOD?$!?_%5vmFlpWD~4AoE1WH=S&X$w3YE~@r50fdl}6=2wuNU$ED=|C308=W z(F|Z~pETL^TXxyG;~U-Tww$vb&^788MSbanWl}2st|OuKYj`}LI9IMSEt3G(quW?g zqkz5OM=aE=>6=uC`OAuE~2u%$%JTqer>iKRr`c@3L((k?66Ouo0p5P=3&y~_U? zo4UUpPo{uUKF{!IehHKzhGo$L#JS5@unq$)w77D(G6^9!h-Z3$vN#vI+m zf5}`-6C?Ren!5fvM)0c^{R21`jXr+Jn4p=d_mlF{aNG+k{|$yeG{ zt+*h@P#3>p;``ZQ(e3D3?v+U-wlF>P5!!qk+VoGBRAH#AA{(Z@s7P@#A*^&pW#EeD zF)zeuAq|nzyR?vx zE!n+fuxRwc_a{AZug%4To6h5^yPLQF3Dg@aN?$Z)mXSggUW;ahu0^ws?^-my9>kN;N4?7}@?JDc-HT?q z_oDGtZU5mAGr*y{=e(sZ$yDM)xR)HN1B&K`ox0Jku9Of{LW-p>e}yRW?7Qh6edmiY zzxS4Nd4Hf&uA;2q@<6BD%L6T?7_G93@lU_{v3#uPO*`dY{YbK*#NCfp=m}ES+(;t%uci>M%zuU~`U#M4Qhp5>{J-MT%$$vu^phSLhE;;6*^6lBvLuu_pa*1u)6EWGy zo{yWTK1-*jq1T6Yj2_F>4O|hjb)86Cw|J&IH&mgmYldxItCX$lMB2J$q^)a}XX~0F zTi4OH?hMf*p1Rc{UKVUf*Ve9Y>(QPi?ih@#eYDM?Z5Y=5Gtb&ZLl)-@oCTGta475DM)AZXWf{NS{Yd4U%FW{`g*%4c-u&lWhU4{(t9s3wZoDNB!P=0o6x$qi-Rd-7DU=y*Fv4m|uR+yy>yogRB;mfwtM;Bzt52{%O>a zdKz`?ADl*=?U?b@r%tRdt$$Mb^2GVy>$9DcGT@{P_uvZ;UZ6;7r4$2+++uyRYjgeiR741RFT3eR|fB~gBf;VY=5}O*7E{O?7*jX zV4W&*?}y1APplr?itDqTH>G$7*?LnpF%ZF>oJWPd{Z?}+ z&heYU?%tV17gSKn2Y;zCo{&2qRsW3O#%wDLnm5qoNCyHn2ldX#c7h2~`~&aOQSd?= z^Ab7PPFpFjMCylBdo?M)p^OdfAjr2q3Z6^Joiz9s;Ns4WrH&Ate1sg25Qu>*?7(SK z+~zmGkmAd1h_7?-?j8g+DRXt|#iQ9^zL!ycJJKhiSwdf+mVYfC&y${)i(ZS2?+dZ>!Ef;01vx(lsH_DdcG(1*9 z5RTPC4Kc`4-R~zbPR-7-IZmEtcFr^8W%~Up98cUrFK_i0w}`VZlk!k@&W)7h$NoMQ ze&X*(cwXT5KY#8Wp1*2t95EiCiptKpibN5r{60G;%MB0WU0rT2jo?m>SrljgOM*bC zBNT+XNmvLpJF+rxjtX{Fq!EpFXQS>#{(e&Q#N$l}!hf;)czd(IAAvTUv67B@ziLFO z{Q%j!e*b4~IA;@8au$YQJhI9;=#k7u!nagFzQ({I2*+09?IZ--Q8Cr-ed}S|e4CxK zd7cz)07EK*dH|#ig3j4Fn@Ce2aR9ZmiGb>evbz9OOH`VNcj4Hnc)Ms*Kge4KY&>3V zL@opYCgY5%}zCDck8o`$XiGi2n-ms531XBK% zdAgKGZtnjOsk7UNkq%^hM~1@)9PsV(=K5e_@SDQ!aYq>!uW$eV>d<&A9-GmhC&#=I zs8*xk%s^WEKoj3OX*9D$pb|-k53_S#C-rEFX@8J;sD3wxzck8u#JbMHc&ZNGoLlwY{GlX=-WIXy`fA)ysu77YE(v+W@nT2h}2n>%{!R#=WX&&Q)J^!oG~)+ zL!ge4|3jc^*kP$jycakA&ya?4#v@yVp~?ZD){sG2HIntKbrKnUcce+RO2M!R7?Qh%|8 zJ&Lld2Ih%f)0uUp{L$}UNOTT-pMQ_%0=)0U=$^r-e-xD6-0wdOlO)Hh{wOmsTva_X zYgivjaUohJep}&&O#dw#i)Yg4OAsMvpbzX!`(n0>4-|TWYjI>*~-M< z_C66vmc{-+YM>qYr`~V=5@{smmsQ4)Qg50lWz4~cq!_&Z;8Ve5DStkCttE}$K+=B? zUiOJB{%&^b{~tojCAVfH^2j}`-z-Urf-^Uh+n04W84Dv1Or%=oks)%yy{pNKy%opR z?rAdl_XF{D%reZ&o!ymysC*Nt{fk#f(Wv$(WR4$+eN)D4NjpSM_sArazxC2reC%S; zqwRvdW%1khulQ?}1bf65RWXrGZUIE|!0e`k7|0J#lS)iTCh2DPp z>Ey%T(UY927UT&fO&d>4ddK}iY4{eTN>RDV{6CE$3*PBUgOf;|&%eAe_4M?&$$k5| z2KDsZ>j*6!`;+}X@TIRv63*H|PTgrAPNC}LM{TI>n&%+a9I-PII|s4Tj-jd&?^#vw z(4PF!uNdnCeSh+w3-pYZ(cKAK)rkTx_4|L8qCumaK$IOIS2TGD8^2xH6jxyjwtdgw z4ScK7iC+;w+Cq#BCx`P(B>arvb9TtGbDo!?yEg8XHz694_vTf9Wc_DnuOh=fJ7xE-*07z^KF7r6PAPD)e{DrhZpo)(AS{0S<54)bBloB^sHDmdJk~>C*VJ2ralX z{|LPxXUr0X5Bv>ytyXy}`FNibHCM|RON1=1rr54l#6k^+lFTW1W~h`G7>8NMT+?`` z6tkP3Pk*c?4)`e8zZJ3TDA<>U*vl0B(*KVRjg&p6ZMNZ2@1t&YA<=S66=JlBkGJv4 z;yJ}>Qas+W2`ihQQaegHTMnQi*H79c<)Gw$kWT9HBaN(RO*J(5{`5aIa*4??ivo>} zz^{SY(MQNv>X}sZWGuVp*Aa6EKb|)Cjy5sB&eXw$D)@6+Rmn zP6poaVAVezv|4xENYt>i8JR~AQ}O3NKrGnqVv<^qtfsN};rb`Yj(sKYYn*RJd5{`^ z3xCd}^uK?aEGpW1r7YglnJD(Q`tz7teyRHkF?IX*q-_876|(4!54#e)QoMHY4jEN< z{w`_MU0henfA%>Q#4f$HNhS_{;Y%sD?p`jV=G;(^Pk=g#|p2_0y2lV=c$X@6kuz+5T!0NU<6pFDtP$XohNQVp&B){9cK z^_warQxG%OO%c%J0x8B|%6Sf+{XpK5O)Af|UiAkiq72I$IjT*sP3q_;lvxc}T-dzB z3YI3_H5_Pm(lHxhUdMofSFyC%i0W@)iGc)GwxdD~a=S)Y7rBrDZ|ygyzq?S1vwyQ4 z6;dGtK2+3!dvzIy7f^kq=*>4Uzv6g(`&EQ;q7SQ4rF612$S}Lj-Vj(0rk)&c;f;Ng zat5!Ia%Hyj9i+60**1E)oMFX^!5Tb%ne7ZFLATUz-hugSRGPzBp9*-+23}r67qCJh zKScB4*fou)mT!Q}VcfM0hI`N^3x5;e^u9Z)=;Y_`*oPiSo&iz+pb|gYdR<{RTDZg# zBs?$ln<|uYK5D)MSomkQ^EHH=`3}S%Ro@WR^Fqa0sD3}l*ZG*5^_%PMFR0pHsCEZ3 zbU{^wr{!*#oo&6$D<#xPo4Yy_ZG7W5I|DI}3dv>xn%|@hX_Vy+G*}zSynkNP+;8^u zCJtDb|KP5IF&`PLNF6;K7!WO^Y*JN$q{~Pnm4;oDlS5B z1t7T=0loYRe1Ho${r=ZkL91}uL7V5n?LfU7q%xm*Tox zE~JX0F1wV1hlwSkdViiq!Q;ddQ5XF{fxYbakMG~A?5E8@!Krk5sy((zr_7;#1;>Cm0E-3F|7~Re5pMCRJ~%`bqUCs~6Tdw?-FV zJzu|?Z`b@Gsef_OwMjSEdhe8f)HY@G7)$g|E_f?0aEBDjE#b*qN&4tKpa=^i?86Ci zSGFzWKYP7*3@3Wn@mwtB_sCEe*r69NahJ9gnsWU|x0Ej{G0k{xV`D{N^Hd0lIJ672ko1IxLTUD(T$5bVp%(EG{E zxm>QeKjIU0f9>FX>~zeh7uV_+L+#)_oXBXQ7dE1*RpSwI{Q55Q6ee&AKgR{4bWZUd z$)zZA?0=0HC|lHgH)W`u-&D2lNeJ}SJ!uo{dxa-KMmF3Gfbi9t?t0Pj)-C3fP$M5Or5qz5ROPH5iFyLkn!C*zI|974_9AE zQ-3!D9shxJTOC{GF9fLDD)4OpK6ss=FLelCWmgp~sIO%GflnMJ9PPyOc@k#a8BwI#3a~k%4 zabZ5B!Ux;8^VcExt8x74SN@P1@7CKR9Dm&km*$;U08DO0IUWQxD1Y9^1{2h2n~0N8 z`i}WE#806+T5PRh_lscIkj&M$B1;}e1}Fn-+}I)qkqze z^}f?b*!1-)I_9WzNeTLBU>*08B7LX2I?1#~Y|v+wy1J*!_)7bPzi=0(S@Cg<<2cNY zVXp8vMuI-NcYBrK3bh`qC)(`!8)nx1J_z#M(Si-hZ9?C|?(0`Kg3}qU4 z_}>aqO|vXSGpsN~_=cf^=u69mXutW_KvXLP(abPJ|8bO=P?9v6*uqEJ{}UlT7Qlb( zvK1$E*@`H6*~*`(F#quVu&`c^=XlrOuw9)8I0O1?7as_&=u%m4iCyca3s{}WxnlHa1aFJ zr1)x@lUm;Qy{zAR5bPY>nKZRGUOz={Y`uN-c=JQh(F2{bU-2q&*>dTxc$GTL5qa6N z6}oKMDd)0faa7{BPK5ZgoCxAK|77A1AKB>dgoxi_;)huLgNHWuJAdVnzf&RkLx!fb zvwp`h$At2o9QPwF>_EWf8=|p|(~lngQH&M(J{P5$^jE3s>T4dR>YE`*2~Jg)pDo~Y zzBCU$1PbN)HP7sFFHTTZ@x^{$>$@Vn+J%Yd&!F_bGw`y{G`4{ZED|I-!6C5D^g0{F6V@9mlNgPE*H8c z(&prVG?%J--uqU0Z3V&3}my-eyHko9W(_p@nxv zWZh6;|p-18ySUB9`m?6g@ERCjaP@WV>LQ+0 z_v3Ny2SQ;yd(^~%W>`JaDG76_n|^;5NoAaqkaKyZ=S4oE^V+6v@ARId%Rh{l`t3EY<7>3aR!flw~2PWKsi7$X; z2~byne)?B4QdeYlC%ez$R{A}0DvrloRx=S?qd$IE&7z~1Ve}?#ZOB}$Ij=e_!WX%F z!z10|!NLjcOpmtNq)p#xlSkUdF7w1OkH2Z7SLf>wu1vivr`BCLeeQhx<$N>}8fe@D zlTRc0{|%Vv1L-^v?X#$7EP@XXRK$Va5Wu4N6j^0U%;_@$bgQhQhxT6%kxAOWCfrkE g000000RR910Nc#HO#lD@0MKVKdH?_b0Nyg7mTX16NdN!< delta 20952 zcmZsCbyVKW6Yh(aQXGoAzesU+cXxM};tm0dySuwn+)HtHch}-tD02CJf8KldR@-Up%iVRWjOZ#lIzGcx_S{;x9oe<1n%o5}Kn{NMyXbm9+?6ZK(H zTiUsJd^AG$pS2iN$apMA)A756C>hwsiV zAMO4HfdoM49|q!gYmoW>qW*}yJ-+pu0W$AB=*xe70D-10n7sazD}CIhug@==ID=?x zA1WLO^5dMy2SK3y3Dg}8_Yu7!2&4)Ed1RRw8u?Ce1_UGr{8&hH#e{+?du(LsM`=(uGFs~RxECqjJ>XMg&01Kd42dHWIyK_l^2NEl*MXpp}KV(owKe?mM1 z!w@&vJwBKrAYyt@5V2=SC<9?JZ<8wW97WpVRpJkgzQxK29NZcJa&kZ-L`At_qN+- zoo{UyHEY4BWC%>e@8x7~tJ6slPU<0Otz^9QR9lulI@o-+}?dy*twTz4AHmf&b63`w_NP{+o71 zxB4lA-mByFVzqWzcgksP^0SNvz%65Qza;+Jqz0VN8+hL@$-TO20DSWX3inGgua2?W zrIin}YThRmT`mjy?bZx>O{q1jG8*T_|2Ms)-2_Z)H%({g9GB?3sW5bSGR!S(t(?|2 zJ=+w%tyXlqoz`|e|0#KEuk0o~tu1~2Q~cJNxq)%m0Umc(NxPgW6dOCF&u9tXt+iA~ z@AX(tlQexUGr~)Z8j9-1NenlAx97FzHR83BWy>MGc@2#>ljX=^&tWo00Z%cT<4xf@ zM*(evyrh4QqMru83__Bv4U?c5Skf_L;>kp%Mx}@!RM$hZXSYXS(o{F-k*c}NXOeyWE8e1tgB``&mX#fc2sbmDeo);w*=}%XkZKq0 z%HCFXYdLif9etIuQNe@K$UINxw=7K!O#;9};a~Vem zq;-7DWOPuTnIp59%uHss**xpTN-=E#X7rtAXA=#&o)^k%YkZp=o)&6jJ@z6whF*c& zzT~0m@!{;72MHUmt|hyTJ_UdkLk#{*NfYWg-tXi*x3QN}Edpzj|#?y~t%kwbp zW(+<860uLvzH~+%$kHa&Qpn!)@Wyoa87wl6HDrNXf6#6T;z><%>O~7M!jnV}$#nb^ z_W5PzQ*ZE8$Q^Vkq?T0cShZaEq{{(FRaTVqT${>S&5+cL-oXZ82>mS zFWWd~g$Tdni-DN5Q9iOLSr*io!uHALVtkRy!MS(+MrG6TH@UbQJ(v40oi6}11YZnM zBKW|5XzT$h-x=ZS%ZO?kJ_`l$frNihJEw6<5)VqLe5^*cI*yGMg0#{cTEI4;9`xVT zT<%@6z$%VDjX5G>3?W-D!9n;4ERK>o5}*7_*MdPy;q>eDyia8>btHMrrQ)$;s(h3q zPsozj5#V(rWen{*3l!cBIY(d{4cyL6`taKcMhFvd?fKYgI+TuQ!`NHIkTmFA#DSf>deZTtVZqbb2{cOH-wp1j5tz>v+I1nvb2 zGG-MyV7?TUiPXaXD)7rjILi*BxwR~sTlHvCEe%L7uFU`SN89vFhfo&qO5<&X3wg$% zulY16_^F6{*#Je#2;QYq&+a?E~jHj_L~=d5(XtwNVj5G-Qp z_9$6M6M;Tt-CTqn_e!hZ8A={8KrpCNMyZtSA4R86c4bw3rW0yF zk;zBCx(dMLR7MiMDms7}yZ(!7%tIhIt^c=L%+f?3NpxAqk)P32q2(*A+B89ruEZG< zxk2uWU4Xbu05y=7gtlSxJ5O_m{-Q0aXKm4ACb6BLTsIoE3Pllpw*Zbp9qnEZH+Zst ze=PA93(FEdQRbde(gef!RSq?a-XtZHv}v>fjO*c0tw1{tSo-CDt#&?Rvg*mN-{!5{ zS5$*^VVGYCAb#AY)D`b}E$MR@LN-KoD5r|-M^7mLy#h73#;&}|s6#vjIEaEN!A2e< z^G+haEWLDvUMI2)Y2&Dt3)vjJeO8ZpW4VQ+E+m968Kz z#gYUz6944pRkX#eNsEW!ql+@3&xC{E1S3XbrV%7vP=3SNQF96Z#EJUH7f-y^m{g5Y zMY1)c%<%ln#usF0No;g&)1d7;+r%eox?*GLG6E?C|)1GtSMkh3K z1$UswDDCQ6%^*u=j4SVo8d(!fvoJU1$q0kLEiAi^i{N^J7a^99XJY?AEn;z;#yeK( z^<7b0fip7UTiVmPP-47}x5SoE?rvaVi;H^4jG^+*zr`5jQ$0&{3V0s}7uiAzA^T&Gky#)?Wk^;u2$dl8 zWdMdYlCs|2Xf8jQGptAickM7^tE$D-qJ6>M(I=1DPREZ%Dr-$5W?5$8^Q|1p%xpE5 zto#cbf2#jLvOyWCNYA-ODJ;pMMD1>ZwmsWZUGF?5=XjUb6QOol4Wbm?Asf<`EzW=9 zz!?Df$8>ygdx{{;BufjLSGs}3;l$$16yWBwiseNf#HY;4T}625@Qd4n186_F!IX~X zDrp`k^Zcyvf3CSJ^@i}K#42or+NbJas%PTO>b7UhDA4Gfs(F;Fg{Ae=xsxZ@ftpmz zj1dfmCGr+N3hAQ=^=q3rmSoXef{W5hQBzTrHj4r1XR;kpdC_t1DyIJyZy2G<5dqjQ zvT3+PSsMw@90uLtD6JAijK~lZs%zCyHwQwb2Z!;OpZHU@%=oI|o-8PL_}bm~pmeqT zI+Dhj(9@JvnGI67>NV6{voI|!>0zr?$u1{x`bx9}ORs(Vm3)f4 z(iwY(=D9oM@o@w0-K>x%y*Ar~8CvE^c?mNeN6!4GXZ^qfQtpv&15OPk$AFSqiir&M zZ`A~B3WZ|Mt)p`16|{q6%z})>#J~mxDdl}5UIhkuiclbfVi#i%V&OVt6E8#mNP4OWXGpPAbLxX6Esn-s^6B3jD?!ndjS^wN7DB z#FiapKYt|?| z*fc@KF@>jJGfnpT1&9iRn(!=Lo_V{S_f#phj*a+DQOKm(ms2cL-k|bc;V;qah+C6(T0oHG>SGfrVC zAtAJv67xDIxQv1~ec)naGA31?jgkxHhT&bH$AQu7D&<`^57D_LQCgU(l=UsiwK#+; zUGj}%8JNY-e`FPKP0p(t<)?RtA4KC5`adS5oT9bV3FRVBQD%zumkt;OHRTED-W9*< zFZqGCm_Eio@M9=*3mNBg)%&65BiuE8SBn*YCRQu z1)vFZ_40Ya;d8lxXCGN|n|ehhh2k08vQVQ?U+m|{zb&n|tmXz65H)pkN2xBHk zBznFz{L_u{XbZ}iWj>lSBt=OA*#jAdiq^jw4Mo&{j>1|nU+Mi;e5y31CTPyBEz6bE ziO#BIu|%JEzL2sdEkbq96)@|?X-PAw!2z;nqgLtzP0*vNg)c24CmK&6v37Mwxd!R7 z)`ucGw2h2_cwHmUcDaemWYzD@wX3Axw6sqdy1hrESFZIia}U7HWedxe)rUy_(vf<@ zk=nL=67#q{E<|$$9AZQVk#+oiJ`!M}s3UmkC&SJZ)c~TwThqDo^5P}NF04^3THsH( z(xd)Q(YN2sZ<9gS4R7!FEh)`$Y1CPW3^T*O zZ%7D+Dce!t<12rcWg}=Jb0%^Q<-h`5;@n0PPe0ur7I=V1vu~+#)({GnVLpu~Ok90pgn|)6Qw<*_mJCMvybiF0*>Slew zD*nv6u7ca5vO$Z`Qo<@f5R;j~ObLN!GC%HxEOV!<;!1ODA0g-Ujykm!@4p5Vai}<4 zQQnYg3#?2?<&c>0KoZw`BZAvCcj>LLJ?eVV>fm>m_0x)Dvkk+A%3*3L+Y3E>>G&@< zij}j1tIknfgr-ATpOl+;oKy@UyQ3_izb)AWj)&QzH^i+EhaiseNHq0NMVP7^+XexA`9X>*Ch3)*B|Y2H*2%uDL{OJj86k95g;U1~useQz zG(G85I2UxXf%R_d$k4zycAW}AL0a!x*XX$7man(NL8he5k;oWL89Yj9osBX0*7u&* z>E`!+-T|}zF;XGt#BGN;E$KizdZ^q~m+k-o*$~byC&HYue0NtUOrRX7GYcJJBBL(| zqIKGk&mQeL#TTd~d!=bI(eADY`?Duv_I%viu2 zoMC(&%=k@b`6_0^Ay1jtg1U9R-8T*?wmh79$*is@vJK5cB zNOmh*{kZA$zO%^*xAW8!`{hmj=k+#*j_@iz(g3V`a*>wUSAVKvj8DmCYht{f?SkK% z_gCi7l@5lgm^L?hN>&2pAPUM%Nn-_KSH70jJ21|i4$FB3MpRhB-r7cAcuDQUy1(j7 z>qryt3(!aAOp&1h*zrbECP2suJkBk~z(Au*B0?7eY5Cf0II=O;Tmx|=)G)pvMHFDJ z3GL{NL74Il^Lt8x66OF;Y3B8QwkgWCh5QhRn6vt8aS^G_sn^Z`N)|a-Qk>T61k;VJ z*c8?GJ)}8dF>+_wPxLp2f$aCbRI@Z}C>lyY_j`q|6Y>H;2Z-exG;{{N_R3JlWu1a1 z#>&2OMLP|yBVbP(ae=3#1WA?)acC+r7Ic(GFOLQFjL;;dJQ2ut_W7h^tWuBqY144n z9d%Re<>s$&OR>-7jV6fIs7|=jzPXHQ`5$}VwWInUx*v1bF@&1uu>2UN@6(M^R9ub$ zp;u2U({2MJ^O{9T+@5jLlI8hzxM89r>|(T~D6*uee{G}I<2C8n7$(O9%Y+W1$1|fc#o}$2RQiJobW$2&wjk>rKT^j?K>3Bq+IEuadp6i4ehN|lFca&=c z*(j{B3Dq(}XVsxAE3`t2(gni<4W&aKo$&K^PwmI*A$8RP2gy#+?-d1hyh8j&EW06( zaYK?|PAKsW_aS#?P>yP`9vskUWJ3o!ZnFx)mG_}&t_hN()5qzAOcE+-zh}gZ{wa>c zc@_gI6pZIdmqGnPo!c`Hsao>5OLSi%pQz48bu+1}jK&oYxV89pA_U7Ajit@1eV3{%Y(88!JAe=BskK4--&4af0n3d|fJlnrw z`q1envqA|mK_=&|#($~^Tqj{YM?;#U%i+@n82FU`ExC-oGxR?QTAo952WYmrb(II7 z;hJBxwAE|Whb0}1x+G{MiTsp|zd;0s>Co_%{bHEf=#XFA0)rAhjMm) z)RrTJu8F?}>Rbv;nraL4Y*H`}%Pi{bcQ9OHcKEr*XnmOTcyc5)Sj8`B6aiPd?LIqI zBR=)2c|T|@BXSSJ!PN+!A=nU`GaK1V+-n0tqB^vHkkF^f8#m}byVe6~_7ssL7FEb z5A>OlT93j#9_>P?;C>0RI1RcOwagFeLECF3qJ}HkF+jY3iGLn-VL_<)^wwO=5|RH& z$8%34h;SO}PAa9eU=wD{0d+S-&?6$r1oR@#{w+kQu7LQ|Jbfw7j1bVF?iVC)cPjlN z2cqo?C`tomYUA?y4HXMO53?u+uC0UaI@3QD7|#DhY;f-?9w{8g6Jelay@4W}6l4xC zb;oG@%jG%#Jw_>R{~APS@lsQ>!(7~>5Jwoz)(CHo9ckR}cYDW(6)J$4%ui1+Y z&Ug@7r4($bZCrRUdO5&D{U)L5ry!I)*GWn3fKityjMW!<3krqQHU#!gRI6P%2m6P( zGi7H6JTRrhk5&V4Y=@)Gevn49=Gux;M0lBLUC6n0rcnJ!J}kY_@h7=cuNwUcseQ09 zXvZ$M6oxXf0$+I8wVJ*$RAPl^9+|L3sl#$T>S1)u33EQL@CIy{+x>t_dl!AOFEU-F z{t}{1*$^=dx4;|pkYcLYvog#1)sZG?mKxmJ?5KQ2WI+y-t6L=|M_WxZLOcVR?SNCu z_JV6>l%}obcGzR+Gh;Y09m08U62jb%b^CANx|z_PCJAp=&)+B?JGnA2PLWasEmK#a zv@)Y?4eB<_K?Ep?amZyAgB2V=h--{R3C2|!^0y0yV#na9b9kgzk7!Hxox=f33#VQ3?WdU`j{u+9u~Ci zd$Lh!oK+QV*I+8W)1P#!%>(Uk7L-d_u(bqzDh4vzgRl6pC&czTPD|R>0w<_RrlNYE zszYx+X8?I?|4wsF4E+U@-n-KdtS;ogIhX0bYECk-?@s(16<;6+pW#15! ze+0nsL1=Lj(Krr!#XGTEwJu5xc)G48Atk8Tob!m<>3BPdt~qr&*?G&35hf=7&)xgN zF;|H=QiXVeN@BLiJTcq1XiJos)LNk!s~D5ckB!Em>01p61+xMsE;jHjO0jWMW0)$i zpG{^~yxR>B2NJz&AP+D}^V!~AJzsx?^Jwm3u+SB>L*c6UdVkN~^(#!9$HWTv4}zDc z+P&GA6m0F&S8`rE*;TH$G&BJkrxJMe^{8k~1JRFn&Mpj{bzZ3W7lqDScxuH;LJMUB zk!Jlnt5FxmIQLc78$;zn1xBNugqcv_+$u}176pwDg`zCEXMn}yF<>+2XX~d+lKQ)L zf=lmh)b;)9gIjpU@VUr|v>b+Smojx1y z!Crc7^O>>D<5E65rR>YmYQ`TnJ?E`<8=eq+_MXJ_!pU$S8F;dJrU`NHbm+raA>&hy0GbB#u=yjmg<*t7; z<{54Cf9*rCUG)$kAh~P~BjnqZ80t8i?5pt76XHZP6hO*9vbGi4<|B(I;brK9Jju!- zk0c!Hm9M+sy>e5$iCHwsq|SZ^rYT4NUV=Gs^c~MOl4^I1;iEDzSXYCuYrVL|V!zuG ztfBogV9Jnaq)>NHdn6ZY|COncNmcrXd%u$xp1+9O!z3#!wg%u1HO`#gIftTdcKh1( zk31zXx#QSzi%L}^H$Cau_j`nEMTCz`Kvjn`R%TS*C#l9Dcc<|NXkI zhQ{X%{9x>G#yn{MCV29?SGEs_FVA@i;?u9gPqR{peT}G7FnmL+V0nS)(%p*RPPb9H zz;ay7cUDVNkXE-3d2xHK<{?)Y%TS!pM@BstQZw+OH11BjM-KTZiLlnOe{>SVp2f`k zcXgJR%7=lSp#MjR|L|idpv2f6{B*hH0&?`3ZzjNBgSC4Fmg$^#zGLXlrUW*6s_wot zCDm#{d3Ba!!N}#7z}ss}Tuuhjy7w`VDoX3IHkPX{v5qdLglQq@!@Zq34TroL2$5v@ z;g}h)#ORwN6nSZsC_Q{}yZ!BVBFEfFK~%xKb`y~!=+%d^(CEVlz`d-{LD)PD46C09 zPG`d~v?H#(x!H`QsjQHVJKyDhE%Xe*c~KhFgMlU&z8H~3vvoSxxZ}+bm*N+HtH+IowXUo=$;A|1!XJ!~Yjy^d`THpG&R|x&PI9A1^4U}j03DVB19`NM!cG2LIxVFd?`AS!8 zxTuHW!?@LxiaToC>$|5-61in97f#Dix_nckxJ|PX4^|;VXiL{=27T-5DC z{vfTk{4nXQSs>R~#-!@GXKG$oeEo&)Xn7>#-7NVAYaNgZT;K@V6)I0k(tJC~nE!i3 z#=MqWO*>^vAVK}T><&fYa-b+*N%9U7^C)GL62bYwKzI;oBrM@e=Crv|Fju2=I+2{;Y&yrTT{aU-~aoB0Tz) zA05@e4+jpuows(C7>DjrtcyjVAa4*f4*hm5+5x=B9M+Y*Z%WEVlJrZRphK;zLvGcN zgD2C<>L1UhJ(mMBZe#jFDYDq9tMrlM7P-qAAlpa&1@B!kXu}S%`M&whyX6O07RA{! z7#wf|7BGf6dUkI8*3IbciQzl;XxNa|-LK4eN-jMC#E;_WfOqaSz#c9)o=85{$ZBf_T<>6`wlhf){M zKr@8K#a$+D2}Xp@PAt#&BQn3~rffeUD;@re0YtD23NY;{z2YAA?5Z=q3AXx=HOB>z?sB+pI`X?Xz`C>?X^;NtI%kmd*~S4y7L3S+7hDfs?9 zFdkLKg1UO*vW$=jJ_(WtwmNc;gU?0y=lDahUDq!fnqQ`^y10;HT)eNad7`sf6b!-l z1^6}3Log&UEJ_uy)5a29(DaM+XFH!{9aBqS8xjAfpV8i7xZ1C{U0v1e3opY<{^yrI z7*{w~q#Oc7tP_drT^9jGK51x_p>Rd=g4<3Bn>VeY*u z_#6cKKhskWuL;MNS5^zc4J8CM(_Ksua{(kRTOu=Np9BMu6>V`(khyM&HgQz=LWe$S zOL3PRRG=GJbHY|(amFOc%_O1B%frE2A%yHAxR7`HJ4|;o{M|8&&~t@UYjMD6AOED7 z9x3oJ8C$;SA^tu$iDBy#iM9_WCUj~)xXc9Kn^CuL-jp1Km|D}+pm(i_Ep~vwkjsylam3-51_9z*&a0e4Fe}{vTV0%Do73 z$PZ`*35}^#%G^Ft?B`?}P2h`J`-@wJSr3no_wqW&=bHNs>XYgz)ILP;%>!%M``9X) z{`2>|P7ZYH-IGTty|R3D%N>ekbVm2lql0Cn-6mPs-XK;Z+VI#tB(Z5sNFem-?wf4l zOLInGI!9uws zb(V8ny-C8xfGEt9$nX}*>i`IxMRNsVOccN6!RYdEs3Vwi``r1zxYDwtf6+lX%&w(Z z?TbTaPCo1 zvdtO?t5R*+BSpXYRLc&T5kmwK9GCF z7)KEP#-WQY(5fBZR`z-&%ql4*KfJ=|m(49JWX$t&iM%=L3g`l&4dnM1JtdcZx{pvr z_5Eg)FX_dy8bNHFzx`?pQIA{?Z^%0_)QRJt?j;h+pFR%%jw&zT@0`S}7V5Xa8xfY{ zw1cgiy?faPL;U1zx`WM?s68;~JjAOJ-V%%QIiz)Fr|;>QS(btA-k;q+0msSE9JWB(mpfm^&vquwxcoK${cGU6ot3nxC3pK%#*9Lm5st zLL$>wo1TCCsGTPoj--O?Pe5Q1Fpw*)B6%X1G+sK_6CRCd$kQ2S|EB*y$@X@Wis3xS zWi4O+mjcxP!@(1_l6~x<8UCkr;o&)sw(<30uDG;6m)keszVT6<<}ce*V!;vY>2CWF zHN9Ed)eD?$n39gR+wEB#$7;-B_x(C9O3zUmj`L0k-PCC+Bgo^eB8ML*r;;5Sym2_- zgtOCzOTh~RsR8OpGaV<6jYdc$H+v)3X)@@HsirUC&oMKWwoWthy3~Y=8FLP?X+OM^ z@|!IEy5k9~X#CW=A{a}8yD%?HT(X9wQM&Kb#n;Tj6Ch*uh1D(bI$H6Zlmcf!XlE}M zZ6{z7)&wRpHT#`hEM`pp#rR1p=WeTrqy%LJ3MX=ZP`|Q9*+%B6%O|FS}O9pi;BLou%*kXi)T*k zWNLe`X_&PV$L`x?E!3J}Exanl2^e3iy1|U=Cy`~zFvE*kxao}3Q(iWZnOj1^r2z@I(}SE^9q&*I9~r zgDxwHbl_Oxb6ImVT+UDo*?#oEMB^*`ah(|e3G2ahf7G-j>U%nBlL&qzf!wy@>qW zMxlC}B=-BaQ#>q!Y#|oWWIkoHvD8(iJDh)X`rXC9n%{zUUa1|?f%IF-U$K5!TO+Km zeKFm*rLw*vK#+9)VZ1jd=c|<4LZoB}@NdjEXdLlL|5$udp|Rs(=?37I)0@Srgv^%inuDbR>{i8HjuE}46a!S?{91X8)9oSk$X>vizm z9pCj;LuPrVM>Bf0r8j(gfVNUmpsW-FwqR@v zneh@qh~;KGzpoT|@oM_+nd`ar1)X3jw>IrGl{EZTwAER%uL2*M-ew={d}avwym_b6 ze?hxsy_FkW$zYz0lT|lV^-4824@7DdRBj&?94&pJ_rtwfP*BNpTxj-7>4~RD$0v(N zncdyy`4u}kR7Oar*^B7u4T<^{08=R3GV=CeG)iwI&MO|tkcN_J$Ciw`O%=psxo~yq z%)r+>dO8mwSxt0|Z}Br#vz{t1r(h5L;ppS-7Cm|W0xIY1h7jxE7X@!rs#JYfurATy ziMU^v)TD_S^G704L)C|x>j951!466tlQ634h7Asq{FW0(bhN?7gW(qfs>2`Xby0~y zm*jekB4mLa3@wjcRKM^MS(E;p%m#Zw1(e^{l#mjw{P`Lp)=v=e*eqvx(^J|l)DoGj z(wG(cVahdi5qP@_%;+gcV;M5an0At4Q|`bYhLt@0F@Ux zEYY9`hpx+X@3qt?=d{bh1pbZj=H!;;w6eQILl#;&13>cRnsDdr0a4{Zh32J}?!-m@ zhVN8LkafnWHAP=(C!2@q^ZFBnG&;B@aZvHpm;{eIrP_s51zj7sHH)qPsqP6WnSQqQ zSA85)43bi3-ed(coEWs1kHXk{#N_tf%bEax`bSFIH)&#_&#jl81DcJ-ENW|4$Xe^CYULG>7LCF|GFJ$C2sZf zhe;~K$u3OGc3d7<+}e^n6@C~!sn>8y4l9-)wd7}8;WS-#IA8yTo93>orUo()GTu*= zcQXFvTD-nt&db;QNa)}>>IKn=m47I8E zH4;6fJ~Z2aJhMvwR=`9@ozdRxWKhA|6ek6$Ct~B~h(dsYd=V>~O5(1{zY|yL=1ZRn z`Yx0_wu1R04!8rHxaqpAuR{p;=3ZtPMp6F9_w!;=GjI8O$YJ@5EGFB=2^BqnA|#Tsw`*6 zP)I)ZeVGEJ0d1%qiF=!czwCJCR5Qu;v6fV9u^t$F9J>ypVc2&iVqtIsXK|o=JQ%)~ zbEPo9HKLd>B~fSWx8T@g>x-P)4A2&p45GOmL{ELzx}&wP@4i4Mi4@?EsTe7jI`}q3 zSQ=jnC|5b+540=n=@Dq?$#LZlU}k(8S^PTH9Y6rjHlduD1l!(A8H&oMSDppEe4L@= zDN?uEJ&k{8H{sHSHQ|B8#3DkgQW&4n>OyM%OVQl#4xv<$IWH-lXkCQ6#Dipb5Ba+) zyJybGlgZkOLppV9HEfTEF=wcwAa3J`d)Z%fV0c?N@cHf_s4r8#VEZLTG5s?AtsjkV zktVQ8=Pn>@HQy~cIGkb{`p|V#e%mwqv0T&@du5EUv?6B6_%?(>wP)Mlr0%(V(!e3K zj=BRGF-m{gi6QXn!7( zkpnzM?LDPF#T*&v(~RCS$Zd5u`n=B?zdJ=-8Z_U&$`qv6zZI*EcK2&f=N=fqZ*{ZM z-Z4xlzZI*L17OlO3OZl*?MA?gaJ(B3)jv1TmN+#q#)778?7L#9{5}RH_2=fXGyJ2#rPXur-Qg>yu|{7*_*g42?Ax7 zQIaO44H7n52gz)K3m|S+i>K&t##wTta|!7LCgvzkpOQE9&P%_Y``!NvUwN5zl!SgM zw%wj+`+Rnl?mQ0m(Zv;M0qnbSm!<5HH42`<%2DCg^pFQX*JjOn%1f2r@eMgkLlhq+ zWhlvmo8f6n?>s(;9kk?2xcG_M>{+hK9q!_kqof%01I}VV9c-!%w5xb!lxNTSSS7ni z2VW*-eB~|<%$~K}>i!XXm=R?T|0~Uq&<;ox-@N6Jo7zIq&gs_Lx_+5B8BOU-paD{< z_ALPxzeQ9cuZSCN^d&=ohYPD*3iQBL|7YZ!edJx5s6K8s&9`#Yh8q>K zP#4V%*%4s49QDXD2lqPU>uTkEIqH}In{kS}b^nb*Gy>WuK04np331u?;jj}T941H8 z{+pPnxUZ$LQM^&{e%)Wi2{Bwxh(W2I?A@rM?H2WxqHW{?o^KDWhgbcBMuN2HKe;D_ z4}esEgsb@+Dpfj6niK|Ae1ozuAXL$@QSpg=nyh@E0HPb(i?XOv{|s6hmt_&JD##T zbj7Xj;bC^W(&j)P-a^SgAO7nisJ66=vX)ROg*xft8q}>YX@32nmfgfXwom*_(0T77T}$d z8l!RSF7O%xrme|iY(2i2v)DB9*-iXUoV~>zzE9Iv>5a)&{e5xt5r8ci+Vlpl z$SeSJH(O^lzaJla4(`hcyA>UdT}!@q;^Ev8uiI`D%H}VaP(`LpCZ@uD3!L;yrou7( zrssAX1&^}tRZoe;XYjW%aIz$#Za`hlo$pg@7Z{=I2gAymetz84qqBZ~i|A>3lPK^Q zaxyjTfhBdk*>7GB&6bMRwalnKrBZ!IiBY$vz;?mFN_Tg}g;}BJkU}UZpNGxB3VP;R z4yrCOOAi?;O4TwY9z_7E-18Y8t!e!5hT7cO7ImN(+PRnhX6O7pKt49&2ZAkN!;Jcx z7>7{DG!%c%%Uy?aF=q>XW|^nQg@_ZHZ+Xb@-t~4iY%r(G`K0cyPmsYpNle} z9qih7k7s^l1D((iyh_K(P#_52Q-x2#XX8+=?zrKLv|IA(cw1&mcZXrh?G1icXzTGT zU5+7GA1VvIX~lZWw8lK5WYeYd`GRmOqE|WZm@_c{*iV*us%C~Z+-o6feDf7&^$by7 zSD13XKXN!IqqWFJ*+D+KEWjoSBg-8%dZ__x#)EGyaL{H_?C7_LG(flI;YGhuWh#k1 zATd^Q6AEU#FgMfbLZ_{a79h|3%3)8P`SsCObge2g*rI{|48LX~15anw+?T4^A_0L2 z+3RAwvQ0u#u0Ny>K#W+$mceMEZ6+71=FXwER#Ph|QyW4TvpZ8tC}3X|Rl>_e6SK1w z#b~Nypr$E@S+d90@q%ALwm_vK|{15oNis4s0OtfJruIQ^SxK7AJiOCm%f5t4yHHM$=Rk<55seu zy0q@A1SJvjBq6gO&8Xm-t(!7bZh6~qoBR;D*Ec3SPYe$#l*Vk6myf^A-dJ8(wn$*% zhe99UO!wbcseyxsAc*K*y>EybEq!X|4yDPdm!H>juEblDb^g({#GXGiZp;A=>zDzi zkGdFK4xQhaFJ~P-@vQeFbqA5UJH!u7In~y0{IPumtC7E7QYYX({-ROQe4V`_aPz3r zOG5!SywbS`pZghh;Hjl|Y|2N+PO)veFihoM>J#cPt^-|J9v5>c_Xi`k!kd|Ji^1b8 zaKW+WJZ=);Z#|XOt>u;w^{@WR2Occ~YmSxZ<|V;`(o-ShrR&^N(vGgpw-Fe%WNS}J zatJ~Wv`0!iPb8Ja7#2a}4!OS@M6p#BN4?9Lau&Jq)ZT-(S8Zt_wSU{W<*@{0{P41{ z;Mu8A)&+tZ5irh-`#PpZ+*V~g!JEJ2ni3@*zna_}IpR(RQ@r1wz->hn~jNPZ|3+3nJ#0{JAAD$@#AYCN5A@|O9LsppP<5!?3R z>}TL&zSS)JVT%GTh+8;dORhI?ZTEM_1A#?qx=W+b_U}SB%zi#hulCb_wu~SuO zgFNF3zN^#MR$n$Ai#15_Dntk?G$Mo~5A;TZb8|w)@3EfwNp;8y+EKqxdD?}uyhUQh zRK%_;ivcLD2+OAAc0!Ed&-4a@&tx7^{ojy-d$EG3q;b%L@3rCo?8w_YIbaq3QvVCU zaIE-}T$}yN6CpmhOsA6a+L%J}SVx5MZU~_WPGyJZQ!d&<;|M`;ZrA=xQ zYH?$6gBAC9lkh%4(dmm7UFS+0+Z`!z+X^ogzjywtI)BQpg~;`k$-(@K%QkKi5(Ouz z((IMwFAAPar_C{4U$WnC7*eVEShc~znME)Cec9tz#@rKYy^>D%?6uY?fO%~F$kQ9*w?e}1F3qF2FW zGfrInOM}6k8kKUEB}7AR$qtoKZkhN@L7$1pstXga%zgD4p2QZF#uE(Pj=NnW z&|`@m5W$ZSylG;MG~Ei7p45N|&`cdL>B&EJ2zAY7e#P!ZZg76~+`(H}G3DPq#~;PS z7Js^J4l$>x|4cshYwoqD+G78GyE$g!orKL^T6)Ga_>to9h_EbES+%3JhM*?3d!V^b zp!K9#POG-?r+!*5lM`szW#2xm7a?e029<62~nAU zuM&5@eLAHK(Fv_px1-vsqi4HtYiUwq9JRxcnFO&eW>>*!1Pj;BhCxb!Q(7kprMjLV zl!=K5UOpygC)VNK`Bci!A;lC|LB4An*xQ<aC_t*Z^viZ{{W4Irm;p;AufE>x)M6}?}1O; z^Y6|gVf<4lG=`)vNk3MyazBE6G#iQS0i1<++zmP?>}H2=E*wpTi;-H$#sz9p?7y`aN0O z%rqAhLnuK=E&(G1aIZn#Z{pF5^&yE2R$Iz6{souah-y>NEGQx1QA(}+BDeZOZX-y= z|2b-j5AJX$g)eujyO+;MI8=YKi4Sf(T*?XVxWerpt{(0mo}Tb0k`Rf$QdIOui70Ro zD*E4)H>BdOA)j<~l{zx!2J&rX^6$GJaZ_b+$W3!QkcS%h>Q9kIQhru_0%`T;$x_Dc zy-$i^oAy2yPL<-FC9P@vhL8fh_rmvO@i%kZ{{IkK9=Wv`ok#xRX)S+Jq$oIL8~J@% zx0AJS=dVvvEepsJ>3G*Va$|4AnW;OPP5a|Od>OY2%Uh@SBp|9?M|!{a8Y!C8eV^>{ z0|~FlxR2BKQPbyT63SnF{&U{@zwE&d;qztjYj>~tbCd*`@>TayIOMI~#4JC?l9hS$ zGg5B*IDvRJaNa~&H2Z(MID+Em`n9Ddx&hEg0~yFa1l z=eANbZ#;*{uk(4-#+z?fmvV6H!7f(D+8$Uf#UrgY&?wY-l!_I7aWYwbFJ4c5+f$Q_ z`3-$4;M*f$TXIkm&m$AGJNeLGoOBX7@uT{ZSJjGKp_G}EiAjG)-5r)jaB-Rx)tW6j zY7ANMdQTdhWa@nW#Z9TFC%s1g+fTKqr)OS8Xz4nL4EQ0>e@>Ec&JObGPJDYhRVUwR zM{Ut-rY}F(RydV_%Ns2~I za@-i(C0{gkI9q?eJ=hjkVJkL%Pv(7a>(Ghc5J1{OjEp3Y^E15o3BgC~k!9yREkz$~ z-79xOG$Hpbp#I4G&(2;;mVI{43N;QYXbnfQA%afqzafakdLyAWf{XEZ9La{v7vsa% z5>!3W>g#BK5Q5Qo?1k8+2*?5tUrD)Yvs_?cT7XeUvQK|S{$7m#cf;0!mtfimI^rG< zuiHBCO@$>InI|oge^1J}No5gQaBKbnN+55{5{38t2k=^>+IDjCJ|b$aF?J#mvb>yP z-?bqYYCM8uPQeo+r0i(yXB~4z)16YxZFx4an)o$H!7tkpyNZH6S%|$r!Ow$^bZDeJ zZ{{`|F7Q)aDEjLsrMtkz%b^%#DuQ*+bhg&yeW%FZNS1ISp!BphxsavHSntBoG zr1SnoBP-fc4UN7%>4-)yIW=yX+thG>bL++)AYZ9(O3|YU?3-Uj%n2FsIfCD^b4GjN zPKe5XqOmR7sSGT-8~YAIp%2KDMPHi%ic|oVf*^kqV^fA5Pq@>8{62Q!8L8p+Ze2V7 zoYeTv@d}(;?h?29rEcAzqd+Qr${k4t-pKHAM;){}qpl@t*x7>2BZ#S_v+p4m?9iK} z)&uKkEPlB95wc@nbbm_>&Mps9<3EBkDMN3aD2s}=Un+}tbtj6w`LqR0Ek8GSk(j#E zn^J#v`tlN4^zz$130^6d^xh$38Z7!w8V!~=kn(T+PXMvYKwXlF!=Cv}itXR8mNE0L zX-M+$?bP@xZ`X3GxGnMryQhWeKe(&l{GUkTeyk_Y`-2G`XmgXN91yNk)0R^v8-c?Pg{#KS4LSSV( zD%2o%Xo8iIE)00vkU8s(rBa-p?Wm9nAqb+P&fKdDIqXRFk)k(W#srHK2>zlXloNk_ zScfX5ldVC9*=?Q=f#qQC$q5u*+dm~|*t=4`o9%o9DQ#l9jS^QgtXMKwkH^olona*C zR))+`n9xS0IgIrgfai4JWeK`~B?|dAnvcY;XhOAo1!UgDT^q}A58Y~E=9|*{po(rG z{+hb~K=KTTx`;~r%hn4E-=l?dEkS?6vrEWSp_GeI^SQvn-?E)AA>_>0A^xcP#;BfG zDo#c9zkqz5_o&&Bxyk;7s_lnrcOXL#R7H4N?S;bAjVN4 z*(^ZwE0iIfvb>B2>*6&p*t86peFMpZm*(I5UBQHRjJ2eW?so^r${3qem79NZ9%-Z; zDjstYIaVFrD(C^RSO?U|^SbguR*KWNhOX#zR;ROw#w-!8Vuw$mms8lE0z1#fvPO64 zp~ZL?i4B5vvkfxkR+hP`Y@elNXHS;mlXd zadR`)J;dPb>{+ZVpL6THu4YNaIS4KRBv&G!#LvM8xCJs4dWjXZ3TN)Mc_Q3)8(t&D z{gxoy{r^Jq?pr2Pbom`*Rjhh|DtGe8yGglA%1_>FNGc(=-JMdb>HL2*1g`PyglDC^ zV!$GJBooNkEdEdhf+_KbKSHFY>k$f1oI{QF+P#f9^9FLkI=?xG z)KsgF$b1>v^&Tnjbdp)3SFOKDimPtuLKVeacmW0X6HCPOJ&}Tki6vsr`GEp^)gK?< z|ERLNa$S)uuGeynEdGD0b*z;4Z|K0v?)weP3DTAXOt+SOWYNkE2UyvCaQ8GBGvWBH z(x~#_^-|ont0|+VSxp+0x#P)mTJ*CmV^SaZGCujhleP1ArqoZ0ed;t>t;+M&lH8_A z+n#xR^5m&Ao_IXBTD7%RUwPuGX^(%FmG$I1Z&a&ZKPf?0tCfE$+6P6`7-5JD#M4H= zu#B%`I>g=|J2P%f+`{G8c~%u|*~B-aU8-R}@K0*;ta ze`LZ0^(b9auwQ?fCX22|PWCZHRa0b6t-l~)Do3Yq`LwE;uP5%8u=)=I@hYc?WFEBIrNjXwmNUgcblto_PEuYPmESQ{I85x`gOLdl^xYQOG5Xb zJl$k?^}T;zU!d_S=*XV4h2DzH-+7M%=$uc*@Qx3_s#|q&wDcfnS0gdL-Ti%>w&f$Y z+tRUZhzs)p0X~uY1>bAW-@D=uSMn#Ic(?Q};pkSlG;i1eU~)Uk@gS%{IeOnotEx^q zM4dv>w_~p-e)4aZ#Ld}Bd||TshIn6nPtRiBK~#TV?+pJn%TZt89IG)@m|@`_oSXE% zcYX9~0bf!wz(1_P`?U1cD7a>)XNHx#*!w6EF7a5LXseS-YP%DTaOlSQ^nViH-t3)W z(Fdiz(Z`4M#SuE@s52o|^|7pa-t{W_HfVK_Wpg1sT#314^&{M-u=#lwk*S} zUsa#f)Mqx!GFydbHckJ`rgLa#Ht|-U*))F-`OK#JfMAy6oieS;XU6pK=p%{hbcv~J zFXu>N$>WHoe;m>AiJ`*7fm-BN^^XQR6&?*V{iA_6k@#6Hdbx201>14u#M*U08a~Cg za)SVEe|r-_G`k-(7(OjA_6f=~WdFYvB7EbwG(@wl2t@e$nu6#v%Y*0_^Ur~(jt_s) zvk{2?a+F!MBxy3SMUE5y6(K$tz(;mVgyY{5Axhp7aWoa?5#MYH>*Y{R)cgl_Ir9LI zh5q`E4`Wtz9cG}!W@pp#HalPK{P%5k7XK4BW&WAwi-?#n&L1~lq7U#{zWHL6HeZ|y z%@?z@`C^taUo78zu}YaQS~`?6U#x$~S@|;Ni}1}C3s}y4&8grR1jtQ^hnY@Vc^_D^ z{^${+GjM0kjPsHFn2<)pJ@k0}eK0kKIAuShRN}VV(w|W(b(A6cwp+`;?ba#hwp&pt z4_k-B!&y!g51U7sha(3T201 zl??WS;JFUh*v7fJc>Ps^HTp^rrD64Ffg0$W0%qvT1&H-#sLQ7o^LxIv46YCg<%TrR zeCM6LS5@)NYF}n~oU1&sB>oP?K>oxX?q3M^Nz?Z{tm01`v0>K0yTU>NwnaIDT2Qfi zLkxIoJ(u2Yzm3wHPKLI>9jJf*XI-;`)Av=q+r7FwNB^7fRyntOnUUMQtjO(NW;wTe zS%-S7Mme{8dBKnBbHJvaBG9*cReH#|Dwo=%kTHY@TyP4Bt|ExaotgFwY}K!)eyT$g7w`f8TYBn_F(dv1SNobVkXENtLJ zsOvN8`QIc{ckTFh_G(+0AckH1i1*Dx{jt>*DsVKnl9m`goQF81KQ{#N79V{zh4(=+ z&5@0852v1cX@CzV!gS`ZeuDMW?6K;DA4R>gEcYhpQN9HPE~UC2WQ%_%&MLm~lwI)K zxXq^eyOPxKdf1Rq`MQ60b(c$;_w_FC3ym-b;*|lR8CH*U{i^e+o1st^No5=okn?$! z<2gQ`vSjPP;k+YixVJ+J0q>1klAU8WqKvO@4Xq^XWasSj!d+P1xPezUZlX+IPJMUQ z;=n@QE>392R5|Y!AC5WuI9{66TdzcOOus)C3W3Z%(Ay-aR!o1-WA7g}WZT{efEAdQ z=lyxxQSSicjKqFwlCzVl9)>oO$b!WNMC_?oJLWqgh{VoDRVR5{3Q?{n>fPdlv;Zdy z{3t0@Bu{2+@iql)j(?QTR6H{Dk)b4;kn?+B35Seifgk*g1WZ@U-PqdW^)XQO{{TTu z3CDPxV_;-pVBmiNVlf6e1||kZAPfd#7N7_d5HmtB01k5iq5uGRoL$T@O9Md=1>kqL zn@e&WViY5GmT7|c1F|XvF^y~)J2@3B?9@_3Q`%@L*jOqSfe4;x>u<0X?1P%;7oA{3 z%<6Litb{JCqKno~4$+acz5%*gQ2hV^000000RR910M(=3i~s-t0MKVKdH?_b0NKMj Er`_(CLjV8( diff --git a/fonts/generate_woff.sh b/fonts/generate_woff.sh index 8e83f239fc4..89f69e9f530 100755 --- a/fonts/generate_woff.sh +++ b/fonts/generate_woff.sh @@ -4,7 +4,7 @@ font="VerovioText-1.0.sfd" # Generate bounding boxes for the VerovioText and move to ../data/text echo "Generating bounding-box file ..." -./generate_text_font $font +./generate_text_font.sh $font # Generate woff.xml fontforge generate_ff.py $font diff --git a/fonts/vrv-ttf.js b/fonts/vrv-ttf.js index 77d0bd6cf49..0b0c5feffba 100644 --- a/fonts/vrv-ttf.js +++ b/fonts/vrv-ttf.js @@ -1 +1 @@ -var vrvTTF = "AAEAAAANAIAAAwBQRkZUTX/OSq4AAG0AAAAAHEdERUYAKQB8AABs2AAAACZPUy8yStdmEgAAAVgAAABgY21hcLJUuPUAAAL4AAABcmdhc3D//wADAABs0AAAAAhnbHlmQrI3MAAABRwAAGJ4aGVhZCEJwDEAAADcAAAANmhoZWEfwxcqAAABFAAAACRobXR4wjbrDwAAAbgAAAFAbG9jYedt08wAAARsAAAArm1heHAAoAIOAAABOAAAACBuYW1lU3fPUwAAZ5QAAAHUcG9zdIgTC+gAAGloAAADZgABAAAAAQAAo8TfoF8PPPUACwgAAAAAANBnMXoAAAAA2cM6p/35/N0ZxxI2AAAACAACAAAAAAAAAAEAAAZm/mYBmhmC/fn+9xnHAAEAAAAAAAAAAAAAAAAAAABKAAEAAABWAgsACAAAAAAAAgAAAAEAAQAAAEAAAAAAAAAABAXrAZAABQAIBTMFmgAAAR8FMwWaAAAD1wBkAhAAAAUGAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUGZFZADA4dDswAZm/mYBmgkLAqQAAAABAAAAAAAAAAAAAAAgAAECYAAAAAAAAAKqAAAFPgAABEAAAAOsAAACuwAAAi8AAAKqAAACIAAABGwAAAIgAAAEiwAAAiAAAASBAAACIAAABIEAAAOZAAAEgQAAAiAAAAScAAACIAAABIsAAAIgAAAEiwAAAiAAAAGhAH0DaAAAAmMAPgH7AD4CZAA+AxYALQQ/AD4EWP9QBbP/YgNI/f4DLf+4ArwAAAOp/38EEv90GYL/UBVE/1AREf9QDNf/UAi5/1AKZf9iCP3/Ygf3/1AGxf3+Cbf9+gz+/foQSf36E5H9/gfw/f4G7v3+BgQAAAq0AAAO7gAACbAAAA5YAAAM7gAABnP/uAoW/7gB4P+DAwb/gwRO/4MEAAAwBAAA4wQAAD0EAAA9BAAAWQQAABcEkAAXBAAAQABAAEAAQQBGAEQAKAAoACgAdAA9AD0AKAAAAAMAAAADAAAAHAABAAAAAABsAAMAAQAAABwABABQAAAAEAAQAAMAAAAA4ejiZOU95VLqYuzA//8AAAAA4dDiYOUg5VDqUOzA//8AAB4zHbwbARrvFfITlQABAAAAAAAAAAAAAAAAAAAAAAAAAQYAAAEAAAAAAAAAAQIAAAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQA5gEqAWgBaAGGAYYBygHKAlACUAL8AvwD0APQBNAE0AXiBeIHAgcCCFAIUAhoCGgIpAjACPYJHgmICfIKaAriCzILkgvUDDoO5hEeEuYUOhUOFewW4hfWGJwZuhtSHWIgKiEgIfAiziQWJeAnCiigKlIrICw0LE4sbiyQLMYs7C0eLVotoC2+LeYuLC56LswvKi9oL7Yv0i/4MCIwcDC4MRIxPAAAAAYAAACbBT4DTwANAB0AMABLAFsAawAANxQrASI1ETQ2OwEyFhUTFAYrASImNRE0NjsBMhYVBTIeAhUUDgMjIi4CNTQkBwYVFB4BFxYXFhcWMzI3Njc2NTQuASMiDgIBFAYrASImNRE0NjsBMhYVExQrASImNRE0NjsBMh4BFUUUHRQLCR0JC4MNCB4IDQ0IHgcOAeFOo4RVHkZtpmp4tWk0AQgTBRYiFhIcLj0eHSIeVBACSIFJHi81JgL4DggeBw4OBx4IDn8WHQgODggdBgoGqA0NApYGCgoG/WoGBwcGApYGCgoGMytJaTowUUgzHS5QYjl3oIweFSJLPxwZGCsSCAgWWAwdRIlbBhAl/g4GBwcGApYGCgoG/WoNBwYClgYKBQcEAAAAAgAAAAwEQgQNACsAOgAAATIWFREUDgEjIiY9AS4CIyEiDgEdARQGIiY1ETQ2MhYdARYzITI2PQE0NgEVFBYzITI9ATQmIyEiBgQkDREIDQkPEwMLIA/8swsZEhMaFRUaEx0RA1UYJRP8LU5EAqKMTED9VEhABAwUDvxDCQ8JFA1VBhEcER0PSw0UFA0DvQ4UFA5hPSIgXA4U/hpQJS9UXyEpKwACAAABCwOsAzsAEgAsAAABMh4CFRQOAyMiLgI1NCQHBhUUFhcWFxYXFjMyNzY3NjU0LgEjIg4CAeFOo4VVHUZsp2t4tWo0AQcOCCojDiAxOCMYHSdSEAVIgkgfMTQkAzoqSGk5MFFJMx0tUGM6dp6KEicyaCcUICcTCQkWWBQUQoleBhIkAAAAAgAAAOMCuwluABkAKgAANyImNTQ+BTMyFxEzERQOBwMGFRQXFjMyNz4BNTQnJiMi5mWBDiEwTF2BSWtBPQcQGSgzSFRvCdcQHEJUk3hfEBk7TeRoXBxBTkpFNB84BnH4/w4oNjk+ODMmFQGTfFgTHDVhTmEmFxQ0AAAAAAEAAADrAqoJbgARAAABETMRFA4CIyImNTQ+AjMyAmw9VoSlTGB+SHmrXGcC+AZ2+P9GkGlDZ1hKjmtBAAEAAADyBGwJxwAtAAABFhcSExUUBgcGIyInJjU0NzY1NCcCJxEUDgIjIiY1ND4CMzIXETQ2OwEyFgK4L6bUCiYLEhYLAh4FLi5j4FaEpUxgfkh5q1xnPQkLDBEWCaHV5/7Y/tcQSLsYJQMSHxEKaYaFfgETLfqtRo9pQmlYSYxqQTYGtQ4GDgACAAAA8gSLCb8ARQBhAAABFBYVFh0BFAYHBiMiLgEnLgE1NDc2NTQnLgQnERQOAiMiJjU0PgIzMhcRMzIXHgQXHgQXFhUUDgEHBic2NTQnLgIrASIGFRQXHgMXFhcWMzI3PgEETQM6CQURFgQFBwMJEAMOPyFIQUo8JFaEpEtgfkh5q1xnPR4kBQkkNTFLGTMwORkWBwQWFQUDFwI2I1JyNxIJEQMONC1WF0QlBQoTBAYJBa4EDQJzdilHiAgiAgQBAhkSCwVcUqF/RGQ7JQ4C+7hGj2lCaVhJjGpBNgbCFztaQS5AGzc1STNBKBcuNndDCQXCDRpcUjRWQAwGBAM4XTJVGk05BwoJJwAAAwAAAPIEgQtPAEoAZgB+AAABFRQGBwYjIiYjJj0BNjU0Jy4EJxEUDgIjIiY1ND4CMzIXETYzMhYXHgQXHgMXFhUUBxYXFhUUDgMVBhUUFxYDNjU0Jy4CIyIGFR4EHwEWFxYzMjY3PgETNDY1NCcuAyMeBBceAxc+AQSACQQWEgMIAxkSQCFHQEk7I1aEpEtgfkh5q1xnPQoMCx0CCiU1MkkYOzw3GQkCKBsLBQkNDQoDAy5NAjMiUnc+BhQMIy4sPRYKLy4DDAcOAwIFBQUeKVhZUy0JIjIuRhcOJhgcCgQSBLo4P3wIIQMMJwxnR598QmE5Iw0D+7pGj2lCaVhJjGpBNgg4GhsOO1lBLj8bP0ZPRS4UJ25sNEEyFyFHOi4gAgUICwVoAT8PIllLNFM+FgMtSTksPBoKOUAKCQUHIAGsBx0ILTdFYDMVOFdALUEZDykaIA4PPwAEAAAA8gSBDOYAUABtAIQAmwAAARYXFRQOAQcGIyInJj0BNjU0Jy4EJxEUDgIjIiY1ND4CMzIXETYzMhYXHgUXHgMXFhUUBxYXFhUUBxYXFhUUDgIVBhUUJzY1NCcuBCMOARUeAx8BFhcWMzI2Nz4BEzQ2NTQnLgMjHgQXHgIXPgETNDY1NCcuAyMyFR4EFx4CFwRLLgcEBwIXEQkFGRJAIUdASTsjVoSkS2B+SHmrXGc9CgwLHQIIHyMyKzsVPTk4GQkCKh0LAigbCwUODxADHAIzFCw7PUsmBhQPNC9TFwozKgMMBw4DAgUFBR4pWFpSLQkiMi5GFw42IQ0EEgMFHilYWFMuAgohMStIFw03HwwFomx6OilZOwYeAg0kD2dHm39CYjgkDQL7uEaPaUJpWEmMakE2Cc8ZGQwyUDY1JDUXQkJSRS8SJmd9NEcSJ25rNEIyFShbPDQBBQcLzxIhVk4eNTUmGAIVAzdcMlEaCj89CAoECB4BrgcdBys3RWIzFjlXQSxAGg87JRAPPgGjBhsILTdEYDQWCDtYQyxCGA87IxEAAAAABQAAAPIEgQ5jAFUAcgCJAKMAvQAAARYXFRQOAQcGIyInJj0BNjU0Jy4EJxEUDgIjIiY1ND4CMzIXETYzMhYXHgQXHgMXFhUUBxYXFhUUBxYXFhUUBxYXFhUUDgIVBhUUJzY1NCcuBCMOARUeAx8BFhcWMzI2Nz4BEzQ2NTQnLgMjHgQXHgIXPgETNDY1NCcuBCMyFR4GFx4CFxM0NjU0Jy4DIx4EFx4FFz4BBEsuBwQHAhcRCQUZEkAhRz9IOyNWhKVMYH5IeatcZz0KDAsdAgolNTJJGDs8NxkJAiUYCwIqHQsCKBsLBQ4PEAMcAjMULDs9SyYGFA80L1MXCjMqAwwHDgMCBQUFHilYWlItCSIyLkYXDjYhDQQSAwUeIUdDSUQlAwcVHh4pJDATDTcfDBwFHilZWlMuCyMzLkUXChsSFhARBwUQBaJsejopWTsGHgINJA9nR5t/QmA5JA4C+7hGj2lCaVhJjGpBNgtNGBkPOllBLj8bP0ZPRi4UKWJtMz4SJmd9NEcSJ25rNEIyFShbPDQBBQcLzxIhVk4eNTUmGAIVAzdcMlEaCj89CAoECB4BrgcdBys3RWIzFjlXQSxAGg87JRAPPgGjBhsILTc3UzUiDQgqRzYqKiAtFA87IxEB4gcdCCw4RGAzFjZUPSw9GgsdExkSFQoUOgAAAAAGAAAA8gSID7EAXwCAAI8AnwC0AMkAAAEWFRQHFhcWFRQOAQcdARYXFBYVFAYHBiMiJy4BNTQ3NjU0Jy4EJxEUDgIjIiY1ND4CMzIXETQ2MzIeAhUeBB8BHgMXFhUUBxYXFhUUBxYXFhUUBxYDNjU0Jy4EKwEiBhUeBRcWFxYzMjY3PgMTNjU0JyYnHgMXFhc2EzY1NCcmIx4FHwE2ETY1NCcuAyMeBR8BPgITNjU0Jy4DIx4FHwE+AgSACCQOAwkZEQcwCQILCA4XCgYMEAISPSFIQEo7JFaEpUxgfkh5q1xnPRkFCAcLBQslOTBQGCIzLjUYBgYlGQYGJRoFBiUZTAU4Eyw4PEYjDQoNCBwfKyU1FDQwBwoIDgIDAwIBAQgei9IOODNbG04nCwQIHo3QCh8hLyg5FXAUCB4pWlpTLQofIS8oORVwAwkHAQgeKVpaUy0KHyEvKDkVcAMKBghYHiRddSsmKCE1ezMSChNpfQgoCkV5CCQGAhoRCwhrQ5aGRGQ7JQ0D+7xGj2lCaVhJjGpBNgyhBwsBBhANOVxJMUkZJzY3SkEoFCpndTMxFCtpdDUuFC1qcDP96xoSVlMdNzUnGBEKJkEuMiQ1FjhOCAoFBQ4LEQGDExgqN+wFOVsvTRxWNCABlhcXKjfxKkgzNiU4F35LAYITGSo0RmM0FipIMzUmOBd+DCMZAYUXGCszR2I0FipIMzYlOBd9CiIYAAAAAAcAAADyBIsRGwBoAIMAkQCgAK8AvwDPAAABFhcVFAYHBiMiJy4CNTQ3NjU0Jy4EJxEUDgIjIiY1ND4CMzIXETQ2PwEyHgMXHgQfAR4EFxYVFAcWFxYVFAcWFxYVFAcWFxYVFAcWFxYVFAcWFxYVFAciFRQWJzY1NCcuASsBIgYVHgQXFhcWMjY3PgITNjU0JyYnHgMXFhcTNjU0JyYjHgMXFhc2EzY1NCcmIx4DFxYXNhM2NTQnJiMeBBcWFzYTNjU0JyYjHgQXFhc2BFIxBwkFExQJCgYMBwMOPyFIQEs6JFaEpUxgfkh5q1xnPQ8HCAgFCwQFAQomODNKGSArKDUYFgYEJhgKBCYXCwQmFwsEJhcLBCQQBgQuAgIfBTg1mFENCw0LIC8qQhZGIQcPDwEEBAMCBR6QzQ43NFgcUSkPBR6Ozw84M1kaTyESBwUejs8PODNaGVEfEgcFHo7PDCUzL0MXWBgQCQUejs8MJTMvQxdLJRQFh215PEN6ByUGAQwVDAoFXFWcgERlOiQNA/vPRo9pQmlYSYxqQTYODAYJAQIBAwcOCjlbRzNGGiUuK0ItPCEkFWCCMzIjFWR8MTYjGFyCMDQjFWV8MTYjF0qOLiQWNGuLCgML2xkQWVBSdhAKLkk8K0AYTzYHCQYGEBYBgg8fKjjrBTpaMEweVjIBtg4gLTLzPGY5Wh1UJzQBmQ0eLTL0PWY4WRxWKDQBmg8fLDL0MlFAMEIbYR0uAaAMHyc39DJRQDBCGlAuPgAAAAgAAAELBIsSNgB0AJUAowC1AMMA1ADiAPQAAAEUFhUUBgcGIyInLgM1NDc2NTQnLgQnERQOAiMiJjU0PgIzMhcRNDY/ATIeAhceBR8BHgUXFhUUBxYXFhUUBxYXFhUUBxYXFhUUBxYXFhUUBxYXFhUUBxYXFhUUDgEHBhUUFhUWAzY1NCcuAisBIg4DFR4EFxYXFjMyNjU+AxE2NTQnJiceAxcWFxM2NTQnJiMeBRceARc2EzY1NCcmIx4EHwETNjU0JyYjHgUXFhc2EzY1NCcmIx4EHwETNjU0JyYjHgQXHgIXNgSIAgwGEhQLBQYKBwUDDz0iSUBKOiNWhKVMYH5IeapdYkIPBwgJCAsFAQggJTMsPBYeJxw2FB0NBAUnGwcFJxsHBScbBwUnGwcFJxsHBSQRAwgYEQcDAzBQBjkiUXM4DQMGBQQDCiAuKkIWPigICgcOBAQCAggejdINODVZHEYyDggekM8KHyIvKDgVDlASBBIIHpDPDCUzLkYXcBYIHpLNCh8iLyg4FSFPAhQIHpDPDCUzL0UXcBYIII3QDCUzL0UXEC8jDgoEOAgoC0B9CCQEAQkMEAkKB1hXnn5EZTokDQP8UkaPaUJoWEqNakE2DwoGCQICAQYQDTFSOTsoOhggKx9AIDMuHCgTX4IwNyMVYnwwNygTY3wwNyMVX4IwNCMVZXwwNCgWXXk1HicgNns0EQMHBQwBaQFFGRNWUDRWQAIFBwkFLUg8K0EZQkMHCQYFDgoTAYATGSs27AQ5WjBLHE49AbUXGCg39CpJMzYmOBcQWRQMAcISGCo48TJRQC9DGX8BzRYYJzfzKUgzNiU3FiVcBgHHFxglN/UxUUAwQxp+Ac0TGSY88DJRQDBDGhE0KA8cAAAAAQB9AXQBoQKcAAsAABM0NjIWFRQOASMiJn1XdlYnQyc6WAIHO1paOyZDKlkAAAAAAgA+AH0CLgbHABUAJQAAEz4CMzIWFxYfARQHDgQPAREzEyIGBxE2NzY1NDY1NCYvAXAzNFQuLzMlOQsKcQ0nGCIiE9wysDlJLm1FUAIMDxQDRhkWFA0UHkA/Yn0NKxskIRLFBkr8dSIn/htsZnpYDSIDGiARBwAAAgA+/sUBxwWgAAgADAAANxEzESUwESMRLQERBT4uAVsr/tABMP7QXAVE/iI4+ssB0aIrAbgvAAACAD7+4wIrBaoAGwAfAAABETMRNxUHETcVBxEjEQcRIxEHNTcRBzU3ETMRFRE3EQGSK25ubm4rvipsbGxsKr4EBAGm/mYj4yT+ZB7kIP58AXg4/n0BdSHhIwGhIuYgAab+aeb+XzYBpAAAAAABAC0A3ALmA2YAGwAAEzMVFzM3NTMVIwcVFzMVIzUnIwcVIzUzNzUnIy7IKdUpyJ9ERJ/LJtgmyKJGS50DZpIuK5XDTGZXvZQpKZTCUmZPAAMAPgB9BAgGyAAOADYARQAAASIGBxE2NzY1NjU0Ji8BJTIXETMRPgIzMhYXFh8BFAcOAw8BEQ4EBwYPAREzET4CByIGBxE2NzY1NjU0Ji8BAvo4Si1sRVADDA8U/jiVLDIzM1QvLjMlOQsKcA02Gy4X3AkcKh00ByA43DIzM1QLOEotbEZQAgwQFAM8ISf+Gm1lelgXGxogEgdTZwOl/H4ZFxQNFB9APmN8DTwdLxXFAfEULTQiOggnLMUGSvx+GRcUTiEn/hptZXpYFxsaIBIHAAAAAv9P/aYErwOzADEARgAAEyM2EjcyFxYVPwE2MzIWFxQOAQcOASMiJy4BJwMHFhczFSE1MzI3NjcBNS8BIgYPAiUGBwYVFDMyNjc2Nz4BNzQmJyYjIlNTd9GpICEkVlpBRIKeBBYyK0y7ZS9IHTIWyQsOHXP9kksWHRULAawKFi9WKCckAkNBJyRPRFcgNgQZFgMODxxITAG+5wEKBC8kPTIvGcmxS3tWNmFsJBIkIP3HDiQEaGgSFh0EpxYkC1dEPUi0cJSiPYEyL1oLPcIrKDIaMgAB/2H/vwYFA7AATwAAATIWHQEDFBcyNzY3NjE3MwcGBwYHIi8BJjU2Ejc0JiciBwMhATQjIgcGBwMjATU0LgInIgMGByM2NzYzMhYXNjc2MzIWFz4IBL08X+MrLTEgGkgyU1cff0ZgXFQ6EimlHBsbWEbm/wABFT0zHBst5/gBFQQSBRBgjhswT3NzcKw2PAleRDtRNj8JBikSKRkoISgpA69HNxn9bUYFNiQZfpPiUn9GBjM2KhN/ActTFBkCov1xAwIvJyZV/XEC9A4NERADCf75MGfslZBSQVQfIFNABCENHQ8XDA0FAAAAAAH9/fzdBEoGOABPAAABBhYXMjc+AT8BEyM1MzY3Njc+ATMyFx4BFxYfARQGBwYHDgEnLgEnNDY3Njc0JyYGBw4BByEVIQIDAgcGBwYjIicmNTQ3PgEzMh4BFRQOAf64CgckZUQkSBIyn9H8KBknKHD0lDIhECISGQgODiEOMxUzJCAdBzI2GhlBSGU2GUgOARX+zkF3YVpITIWMhUU2KxpIJC46FjMy/XwPFQSUS8Na2wLtiW86YT2irQsFHRckITlPSEEhKxIHBAdBJ0FlJBISLwoISHdB/DaQ/o3+jf7WrY1Wm2lScFpTJyxXSBkySFAAAAAB/7gAAAMqA6UANwAAASImNT8BNCMiDwEGAgcjEzU0IyIOBAcGByc+Ajc2Nz4DMzIVBgcGBz4EMzIWFRQCuiUtAwsdSUA5LYkJ2M0dDRcOFQgZBCkxMgkfGRkHBCE3UlcqTwICAgEVITczRiQ5VwJyOi8nLBlwc3P+KhsCuhI6BgYUCB8FM04dFy4dGwgDITE7IGUMGRoMIC09JRpXOaIAAQAAAAACuwPMAEAAACUyNjc0JyYnJicmJzQ+ATMXFhcWFQ8BBgciJzc0JicmBgcUFxYXFhcWHQEUBwYHIi4BNT8DMhcUFRQGBxQWMwEkOFIGHRIzdzIxBVaOVWU0I1IDFhMqWBAONSExRQgnQR2YBitoYnpVkVoEEiQuVgEaAzMgd0czJygeI0dCQVpXiUcLER4xaSQkIARWRBkiBghPOigoMhl9EzZXJHBSPQs6cEc2LyAPbgEBGz0NFSQAAAAAAf9+/8YDqAOBACoAAAEyHgEVFAcGIyIvAiYjIgcjNQEHDgMHIxMhFQE2MzIWFz4BNSInNDYCbyQ5HVZQt0QdKz5NGy4+cALx5x0uKBUWVmwCqP0IR0YdvQkYGkQLPgGeMU4ueldaDxUkJDI6An0EBBEkFxwBOXP9tSFGAgIkHlMuPgAAAf9z/78EZwOwAEUAAAM+Aj8BPgM3PgEzMhYXPgkzMhYdAQMUFzI3Njc2MTczBwYHBgciLwEmNTYSNzQmJyIHAyEBNCMiBwYDjAMjKAiUFR4JDw8ecSg2PwkHIhIjFiQbJSEmEzxf4ystMSAaSDJTVx9/RmBcVDoSKaUcGxtYRub/AAEVPTMcELYBngNDSgv8EyALCwYQG1NABRsOGQ4WDA8IBUc3Gf1tRgU2JBl+k+JSf0YGMzYqE38By1MUGQKi/XEDAi8nF/6rAAAAB/9P/aYZxwOzABwBWAF1AZcBtgHXAfIAAAE0JiMiBgcGBwYVFhcyNjc+CTc+AQMiJicDBx4BFzMVITUzMjc2NwE1LwEiDgIPAQYHDgEHBiMiJicDBx4BFzMVITUzMjc2NwE1LwEiDgIPAQYHDgEHBiMiLgEnAwcWFzMVITUzMjc+ATcBNS8BIg4CDwEGBw4BBwYjIi4BJwMHFhczFSE1MzI3PgE3ATUvASIOAg8BBgcOAQcGIyImJwMHFhczFSE1MzI3NjcBNS8BIg4EDwEGBw4BBwYjIiYnAwcWFzMVITUzMjc2NwE1LwEiDgIPAQ4BByM2NzY3MhYVPwE2MzIWFz4CNzY3MhYVPwE2MzIWFzY3NjcyHgEVPwE2MzIeBBc2NzY3Mh4BFT8BNjMyFhc+ATc2NzIeAhU/AT4BMzIWFz4FNzY3Mh4DFT8BPgEzMh4DFxQGBwYBNCYjIgYHBgcGFRYXMj4BNz4HNz4CJTQuBSMiBgcGBwYVFhcyNjc+Bzc+AyU0LgMjIgYHBgcGFRYXMjY3Pgc3PgIlNCYjIgcGBwYVFhcyPgU3Pgc3PgMlNCYjIgcGBwYVFhcyNjc+CDc+ARjHP0ImNQ5EJCQBTkRWIQgXChAGCwQGAwUCBAjdOYMgyQsIFQ5z/ZJLFR4UDAGsChYdNiwcEicRHwI2OqPJOYMgyQsIFQ5z/ZJLFR4UDAGsChYdNiwcEicRHwI2OqPJJllJFMkLDxxz/ZJLFR4KEAYBrAoWHTYsHBInER8CNjqjySZZSRTJCw8cc/2SSxUeChAGAawKFh02LBwSJxEfAjY6o8k5gyDJCw8cc/2SSxUeFAwBrAoWFCYgGxsSCycRHwI2OqPJOYMgyQsPHHP9kksVHhQMAawKFh02LBwSJxE4ClNtcmSuJEFWWjxJdZAWEyclEmSuJEFWWjxJdZAWODlkrhgwHVZaPEkoRzovIxkHODlkrhgwHVZaPEl1kBYdORtkrhIlHBJWWiBBJHWQFgoTExMTEglkrg4fGRMMVlogQSQ5X0QvGAE1PqP73j9CJjUORCQkAU4vSC8VCCAHFAQLAwYDAwYE+8kECg8VGiITJjUORCQkAU5EViEIIAcUBAsDBgMCBQMD+8kJEx4sGyY1DkQkJAFORFYhCCAHFAQLAwYDAwYE+8k/Qk0cRCQkAU4VJB8cFxYRCQggBxQECwMGAwIFAwP7yT9CTRxEJCQBTkRWIQgbCRIFCwMHAwMECAJgTFoaGHiMmkWAATEwDSYQGw4XEhkdIRciXf2xTC79xw4SEwNoaBIVHgSnFiQLHDUrHz0gQGqFSM1MLv3HDhITA2hoEhUeBKcWJAscNSsfPSBAaoVIzSU4Hf3HDiIGaGgSCxkPBKcWJAscNSsfPSBAaoVIzSU4Hf3HDiIGaGgSCxkPBKcWJAscNSsfPSBAaoVIzUwu/ccOIgZoaBIVHgSnFiQLDhkcKBwUPSBAaoVIzUwu/ccOIgZoaBIVHgSnFiQLHDUrHz0fdxTWloMGYDAyLxmbfyA7NBiDBmAwMi8Zm39cS4MGL0MeMi8ZEyQzP0gpXEuDBi9DHjIvGZt/L1QkgwYcKjQWMi8NDJt/EB8dHBoZDIMGEh4lKRIyLw0MJ0Vgbz93jk3NAlxMWhoYeIyaRYABGSkfDTMOIxAfHycdGzwpDBUkIhwXDwkaGHiMmkWAATEwDTMOIxAfHycdFi4gHwkdMSodERoYeIyaRYABMTANMw4jEB8fJx0bPCkMTFoyeIyaRYABBAkNEBUVDQ0zDiMQHx8nHRYuIB8JTFoyeIyaRYABMTANLA8fDR0TIyMZIl0AAAAABv9P/aYVjwOzABwBIAFCAWEBggGdAAABNCYjIgYHBgcGFRYXMj4BNz4HNz4CAyImJwMHHgEXMxUhNTMyNzY3ATUvASIOAg8BBgcOAQcGIyIuAScDBxYXMxUhNTMyNz4BNwE1LwEiDgIPAQYHDgEHBiMiLgEnAwcWFzMVITUzMjc+ATcBNS8BIg4CDwEGBw4BBwYjIiYnAwcWFzMVITUzMjc2NwE1LwEiDgQPAQYHDgEHBiMiJicDBxYXMxUhNTMyNzY3ATUvASIOAg8BDgEHIzY3NjcyFhU/ATYzMhYXPgI3NjcyFhU/ATYzMhYXNjc2NzIeARU/ATYzMh4EFzY3NjcyHgEVPwE2MzIWFz4BNzY3Mh4CFT8BPgEzMh4EFxQGBwYBNC4FIyIGBwYHBhUWFzI2Nz4HNz4DJTQuAyMiBgcGBwYVFhcyNjc+Bzc+AiU0JiMiBwYHBhUWFzI+BTc+Bzc+AyU0JiMiBwYHBhUWFzI2Nz4INz4BFI8/QiY1DkQkJAFOL0gvFQggBxQECwMGAwMGBN45gyDJCwgVDnP9kksVHhQMAawKFh02LBwSJxEfAjY6o8kmWUkUyQsPHHP9kksVHgoQBgGsChYdNiwcEicRHwI2OqPJJllJFMkLDxxz/ZJLFR4KEAYBrAoWHTYsHBInER8CNjqjyTmDIMkLDxxz/ZJLFR4UDAGsChYUJiAbGxILJxEfAjY6o8k5gyDJCw8cc/2SSxUeFAwBrAoWHTYsHBInETgKU21yZK4kQVZaPEl1kBYTJyUSZK4kQVZaPEl1kBY4OWSuGDAdVlo8SShHOi8jGQc4OWSuGDAdVlo8SXWQFh05G2SuEiUcElZaIEEkMFI/MSARATU+o/veBAoPFRoiEyY1DkQkJAFORFYhCCAHFAQLAwYDAgUDA/vJCRMeLBsmNQ5EJCQBTkRWIQggBxQECwMGAwMGBPvJP0JNHEQkJAFOFSQfHBcWEQkIIAcUBAsDBgMCBQMD+8k/Qk0cRCQkAU5EViEIGwkSBQsDBwMDBAgCYExaGhh4jJpFgAEZKR8NMw4jEB8fJx0bPCn9sEwu/ccOEhMDaGgSFR4EpxYkCxw1Kx89IEBqhUjNJTgd/ccOIgZoaBILGQ8EpxYkCxw1Kx89IEBqhUjNJTgd/ccOIgZoaBILGQ8EpxYkCxw1Kx89IEBqhUjNTC79xw4iBmhoEhUeBKcWJAsOGRwoHBQ9IEBqhUjNTC79xw4iBmhoEhUeBKcWJAscNSsfPR93FNaWgwZgMDIvGZt/IDs0GIMGYDAyLxmbf1xLgwYvQx4yLxkTJDM/SClcS4MGL0MeMi8Zm38vVCSDBhwqNBYyLw0MGzJFVV80d45NzQJcFSQiHBcPCRoYeIyaRYABMTANMw4jEB8fJx0WLiAfCR0xKh0RGhh4jJpFgAExMA0zDiMQHx8nHRs8KQxMWjJ4jJpFgAEECQ0QFRUNDTMOIxAfHycdFi4gHwlMWjJ4jJpFgAExMA0sDx8NHRMjIxkiXQAF/0/9phFXA7MAIQDwAQ8BMAFLAAABNC4FIyIGBwYHBhUWFzI2Nz4HNz4DAyIuAScDBxYXMxUhNTMyNz4BNwE1LwEiDgIPAQYHDgEHBiMiLgEnAwcWFzMVITUzMjc+ATcBNS8BIg4CDwEGBw4BBwYjIiYnAwcWFzMVITUzMjc2NwE1LwEiDgQPAQYHDgEHBiMiJicDBxYXMxUhNTMyNzY3ATUvASIOAg8BDgEHIzY3NjcyFhU/ATYzMhYXPgI3NjcyFhU/ATYzMhYXNjc2NzIeARU/ATYzMh4EFzY3NjcyHgEVPwE2MzIeAxcUBgcGATQuAyMiBgcGBwYVFhcyNjc+Bzc+AiU0JiMiBwYHBhUWFzI+BTc+Bzc+AyU0JiMiBwYHBhUWFzI2Nz4INz4BEFcECg8VGiITJjUORCQkAU5EViEIIAcUBAsDBgMCBQMD3iZZSRTJCw8cc/2SSxUeChAGAawKFh02LBwSJxEfAjY6o8kmWUkUyQsPHHP9kksVHgoQBgGsChYdNiwcEicRHwI2OqPJOYMgyQsPHHP9kksVHhQMAawKFhQmIBsbEgsnER8CNjqjyTmDIMkLDxxz/ZJLFR4UDAGsChYdNiwcEicROApTbXJkriRBVlo8SXWQFhMnJRJkriRBVlo8SXWQFjg5ZK4YMB1WWjxJKEc6LyMZBzg5ZK4YMB1WWjxJOV9ELxgBNT6j+94JEx4sGyY1DkQkJAFORFYhCCAHFAQLAwYDAwYE+8k/Qk0cRCQkAU4VJB8cFxYRCQggBxQECwMGAwIFAwP7yT9CTRxEJCQBTkRWIQgbCRIFCwMHAwMECAJgFSQiHBcPCRoYeIyaRYABMTANMw4jEB8fJx0WLiAf/a0lOB39xw4iBmhoEgsZDwSnFiQLHDUrHz0gQGqFSM0lOB39xw4iBmhoEgsZDwSnFiQLHDUrHz0gQGqFSM1MLv3HDiIGaGgSFR4EpxYkCw4ZHCgcFD0gQGqFSM1MLv3HDiIGaGgSFR4EpxYkCxw1Kx89H3cU1paDBmAwMi8Zm38gOzQYgwZgMDIvGZt/XEuDBi9DHjIvGRMkMz9IKVxLgwYvQx4yLxknRWBvP3eOTc0CXB0xKh0RGhh4jJpFgAExMA0zDiMQHx8nHRs8KQxMWjJ4jJpFgAEECQ0QFRUNDTMOIxAfHycdFi4gHwlMWjJ4jJpFgAExMA0sDx8NHRMjIxkiXQAE/0/9pg0fA7MAGgCzANIA8wAAATQmIyIHBgcGFRYXMjY3Pgg3PgEDIiYnAwcWFzMVITUzMjc2NwE1LwEiDgIPAQ4BByM2NzY3MhYVPwE2MzIWFz4CNzY3MhYVPwE2MzIWFzY3NjcyHgEVPwE2MzIeAhcUDgEHBiMiLgEnAwcWFzMVITUzMjc+ATcBNS8BIg4CDwEGBw4BBwYjIiYnAwcWFzMVITUzMjc2NwE1LwEiDgQPAQYHDgEHBgE+Ajc0LgMjIgYHBgcGFRYXMjY3PgclPgM3NCYjIgcGBwYVFhcyPgU3PgcDrz9CTRxEJCQBTkRWIQgbCRIFCwMHAwMECN05gyDJCw8cc/2SSxUeFAwBrAoWHTYsHBInETgKU21yZK4kQVZaPEl1kBYTJyUSZK4kQVZaPEl1kBY4OWSuGDAdVlo8SUdwRiUCHC4po8kmWUkUyQsPHHP9kksVHgoQBgGsChYdNiwcEicRHwI2OqPJOYMgyQsPHHP9kksVHhQMAawKFhQmIBsbEgsnER8CNjqjCHgDBgQBCRMeLBsmNQ5EJCQBTkRWIQggBxQECwMG+8sCBQMDAT9CTRxEJCQBThUkHxwXFhEJCCAHFAQLAwYCYExaMniMmkWAATEwDSwPHw0dEyMjGSJd/bFMLv3HDiIGaGgSFR4EpxYkCxw1Kx89H3cU1paDBmAwMi8Zm38gOzQYgwZgMDIvGZt/XEuDBi9DHjIvGTxoh09SelMzzSU4Hf3HDiIGaGgSCxkPBKcWJAscNSsfPSBAaoVIzUwu/ccOIgZoaBIVHgSnFiQLDhkcKBwUPSBAaoVIzQHQGzwpDB0xKh0RGhh4jJpFgAExMA0zDiMQHx8nHRYuIB8JTFoyeIyaRYABBAkNEBUVDQ0zDiMQHx8nAAAAAAP/T/2mCOcDswAUACkAkQAAAQYHBhUUMzI2NzY3PgE3NCYnJiMiBQYHBhUUMzI2NzY3PgE3NCYnJiMiASM2EjcyFxYVPwE2MzIXFhc2NzY3MhcWFT8BNjMyFhcUDgEHDgEjIicuAScDBxYXMxUhNTMyNzY3ATUvASIHDgEPAwYHDgEHDgEjIicuAScDBxYXMxUhNTMyNzY3ATUvASIGDwIG/UEnJE9EVyA2BBkWAw4PHEhM+6tBJyRPRFcgNgQZFgMODxxITP1xU3fRqSAhJFZaQUSCTzgSOzZpqSAhJFZaQUSCngQWMitMu2UvSB0yFskLDh1z/ZJLFh0VCwGsChYvKxYpFCckDAEJCzIrTLtlL0gdMhbJCw4dc/2SSxYdFQsBrAoWL1YoJyQC1HCUoj2BMi9aCz3CKygyGjIycJSiPYEyL1oLPcIrKDIaMv645wEKBC8kPTIvGWVHbWBGhQQvJD0yLxnJsUt7VjZhbCQSJCD9xw4kBGhoEhYdBKcWJAssFTgiPUgYOzM9VjZhbCQSJCD9xw4kBGhoEhYdBKcWJAtXRD1IAAAC/2H9pgphA7MAgQCcAAAlIiYnAwcWFzMVITUzMjc2NwE1LwEiDgIPAgYDBgcGByIvASY1NhI3NCYnIgcDIQE0IyIHBgcDIwE1NC4CJyIDBgcjNjc2MzIWFzY3NjMyFhc+CDMyFh0BAxQXMjc2NzYxNz4BNzY3Mh4BFT8BNjMyHgIXFAYHBhM0LgEjIgcGBwYVFDMyPgE3Pgc3NgiCOYQfyQsOHXP9kksWHRULAawKFh00LhsTJyQcaiJ8RmBcVDoSKaUcGxtYRub/AAEVPTMcGy3n+AEVBBIFEGCOGzBPc3NwrDY8CV5EO1E2PwkGKRIpGSghKCkVPF/jKy0xIBpIYTc+O2mpGDAdVlpBREdwRiUCNj2gExk7LUwdQSckTy9HLxYHIQYUAwwEBgMLBE0t/ccOJARoaBIWHQSnFiQLHDcoID1IQv7+VXxGBjM2KhN/ActTFBkCov1xAwIvJyZV/XEC9A4NERADCf75MGfslZBSQVQfIFNABCENHQ8XDA0FRzcZ/W1GBTYkGX7qal9MhQQvQx4yLxk8aYZPdo9NzQJcMkgsMnCUoj2BGSggCzYLJQ8gHigdYQAAAAAC/2H83Qn8BjgAXgCuAAAFMh4BFRQOAgcGBwYeARcyPgU3Njc2NzYSNhI3IzUzPgM3PgEzMhYfARQOAQcOAwcGJy4EJzQ/ATQnJgYHBgIHIRUhCgEHDgQjIiY1ND4CEzIWHQEDFBcyNzY3NjE3MwcGBwYHIi8BJjU2Ejc0JiciBwMhATQjIgcGBwMjATU0LgInIgMGByM2NzYzMhYXNjc2MzIWFz4IBGAkPB4REiMGGQ8KBBMUGTElJxogEA0DASQSGjosPBXR/BcYJiUWcPSUTF0PDgcQGAQWHiYRGiQNFQ4LBgNoM0FIZTYQTRIBFf7ON81vHDxUV2w2dooWKUaJPF/jKy0xIBpIMlNXH39GYFxUOhIppRwbG1hG5v8AARU9MxwbLef4ARUEEgUQYI4bME9zc3CsNjwJXkQ7UTY/CQYpEikZKCEoKfg/UyYZMh0wCigKDREIAhcgOS1LKSUHA2JabgEJ0QEfYYlBQV1GIqKtRkM5PzsuMAsdHxgCBAQDEBQeGRGERiQvCghIdyv+/UWQ/sj9UNU3YmlLMaqBLVdNLwSnRzcZ/W1GBTYkGX6T4lJ/RgYzNioTfwHLUxQZAqL9cQMCLycmVf1xAvQODREQAwn++TBn7JWQUkFUHyBTQAQhDR0PFwwNBQAD/0/83Qj5BjgAXwCTAK8AAAUyHgEVFA4CBwYHBh4BFzI3Njc2NzYaATcjNTM+Azc+ATMyHgYfARQOAwcOBAcGJy4DJzQ/ATQnJgYHBgIHIRUhCgEHDgQjIiY1ND4CJyImJwMHFhczFSE1MzI3NjcBNS8BIg4CDwEGByM2EjcyHgEVPwE2MzIeBBcUBgcGEzQuAiMiBwYHBhUUMzI2Nz4INzYDXCU8HRASIwYZDwoDFBRpVBIiJBIhRlIY0fwXGCYlFm/1lBMiHxsXEw8MAw8CBA0NDwQPFxkfDhkkEBgQCARoM0FIZTYRTBMBFv7ON81vHTxUVmw2dooWKUZhOYQfyQsOHXP9kksWHRULAawKFh00LhsTJyAzU3fRqRgwHVZaQUQwUj8xIBEBNj2gEw4fMiJMHUEnJE9EViEIGwgSBAwDBwQDC/g/UyYZMh0wCigKDREIAr4oWmJajQFDAYxsiUFBXUYioq0ECQ4RFhkdETknLCYjHh4IFxkXEAIEBAMWIh8VhEYkLwoISHcr/v1FkP7I/VDVN2JpSzGqgS1XTS/8TS39xw4kBGhoEhYdBKcWJAscNyggPT5s5wEKBC9DHjIvGRsyRVVfNHaPTc0CXCU7LRkycJSiPYExMAwtDSEMHhMjIxlhAAH9/fzdB84GOACLAAABFAYHIic0PgI3NjUnJiMiAyEVIQYKAgcGBwYPASIuATU0PgQ3MhYVFAcUMzITNhM2EjchCgEHAg8BIicmJyYnPgc3NjcyHgEXFA8CFDMyPgM/AhIbASM1MzYSNzYzMh4CFRQGByInNDc2NzY1LgEjIgIHIT4FMzIHzmFTYQsWJi8aEhUaJMlzAQ7+1RRLWmcrU2FXjEVLbjQKFRonJBo+S3MguG8OOipDIP28J8dksdtBcz0dGQ4BAQUBBQMHBwsHJFMnPR8CEjI2JBw0JicXDjI2P1U9zfw4tIeFpipFKxZiVloKJCQ9EhUhJHeXKwJOFUFYc4SiV6IFSmiVFXMmRzgsDg8HIBL9z4l8/rz+xP7dWql3cygHWIxVIzktIyAXD2xFT5sZAfQ4AQnCATeW/vn9V8n+ezYHXiBFaQ0IJwweDBgOEgkvHThOKy8kUkUZGCI1KhuCvgEXAZkBIIm8AR1jWidDVS5qmg5zPUg+HA8HHRX+rthNl5V+YTcAAAH9+fzdCr8GPwDJAAAFMhYXFAYPAQYHFDMyNz4CNzYSNxMhBgIHBgcGDwEiLgE1ND4CNzIXHgEVFAcWFzITNhI2EjchBgIHAg8BIi4ELwE+ATcyFhUUDwIUMzI3PgM/ARITNjcjNTM2NzY3NjMyHgEVFAYHIic0NjcyNScmIyIHBgchPgQzMhcUBwYHIic0NjcyNS4BIyICAyESNzYzMh4BFRQOAQciLgQnND4BNzI1LgEjIgIDIRUhAgcCAwYHDgEPASInJjU+AQUbO0MDEw0kGBckZ0YZJiYSGWEZQf4IKNFWVFVejEFMcDUWLzQpJA8mLHMCH7ZxGzwqQhH+BSTZUrLaRR42KiQeFwsSDkFWO04WMjIkOzEWKRgkCjZwRBULzfgtY1qJhaY5UiVhU10LTjcSFR4je0tPJAIGGlB5kb5oow0uK1thC005EgsoIGWgOAIGUbOn8zpTIytUOA8YFRAMCAElOSAVDichZaA4ARL+zio0Z4deVituQkGnOBYLSvhkRhZEFTYjKRmXPWh3QXABu28BNv39JaGvbXolB1eMVjRMNyUWDw9bOEufGAEB9HABD8QBPFHp/Rio/nw3Bw4aIS4vHXZuZCBuQy0mUkUZNhNCOFwXvgH8AUteK4minpRoWkFqQmmZEHNIfxgWIBKstclfs66AT+1lUz8bc0p1IBYbF/7m/ukBCNPCTG9BQnFMCwcNExofEy1cRBIWGhj+5v7pif78sP5S/umwbDpPFgfDNkBobwAAAf35/N0OAgY/ASQAAAUyFhUUBxYXMhM2EjYSNyEGAgcCDwEiLgQvAT4BNzIWFRQPAhQzMjc+Az8BEhM2NyM1MzYSNzYzMh4BFRQGByInNDY3MjUnJiMiBwYHIT4EMzIXFAcGByInNDY3MjUuASMiAgMhEjc2MzIeARUUDgEHIi4EJzQ+ATcyNS4BIyICAyE+Azc+ATMyFh8BFAYHDgIHBiIuAyc0Nj8BNCYOAQcOAgcGAgchFSEKAQcOBCMiJjU0PgMzMh4CFRQOAgcOAxYXMj4FNzY3Njc2GgE3IQIHAgMGBw4BDwEiJyY1PgE3MhYXFAYPAQYHFDMyNz4CNzYSNxMhBgIHBgcGDwEiLgE1ND4CAds/RnMCH7ZxGzwqQhH+BSTZUrLaRR42KiQeFwsSDkFWO04WMjIkOzEWKRgkCjZwRBULzfgxwYGFpjlSJWFTXQtONxIVHiN7S08kAgYaUHmRvmijDS4rW2ELTTkSCyggZaA4AgZRs6fzOlMjK1Q4DxgVEAwIASU5IBUOJyFloDgCDhcYJiQXb/WUS10PDw4hByAyFxgjGxIOCAM1MzItPj4SESIjEhFMEwEV/s42zm4dPFRWbDd1ig0cKTsjHDEfEhERIwYGGA0HFBYaMCUoGSAQDgICJBIhRVMX/f4qNGeHXlYrbkJBpzgWC0pRO0MDEw0kGBckZ0YZJiYSGWEZQf4IKNFWVFVejEFMcDUWLzT4aUhLnxgBAfRwAQ/EATxR6f0YqP58NwcOGiEuLx12bmQgbkMtJlJFGTYTQjhcF74B/AFLXiuJsAEqYlpBakJpmRBzSH8YFiASrLXJX7OugE/tZVM/G3NKdSAWGxf+5v7pAQjTwkxvQUJxTAsHDRMaHxMtXEQSFhoY/ub+6UFBXUYioq1GQzlYPkIPKCcDAhARHx0UR2EiJBweARAMDCs9Jyv+/UWQ/sj9UNU3YmlLMaqBI0dDMyAlOD8cGTIdMAoJHRIUDAIXIDktSyklBwNiWo0BQwGMbP78sP5S/umwbDpPFgfDNkBobxtkRhZEFTYjKRmXPWh3QXABu28BNv39JaGvbXolB1eMVjRMNyUAAf35/N0RTAY/AYAAAAEUFjMyPgM3NhITITUhNhI3PgEXFhUGBwYVHgM3PgE3PgE1Jy4DJy4CIyIHDgEHBgchEjc2Nz4DMh4CFQcGFR4DNz4BNz4CNScuASMiBgcOAgchGgEzMhYXFCMOAhUeATM+ATU0LgEjIgcGAyEaATMyFhcUIw4BFR4BMzY3NjUuAyMiDgQHITY3NjMyHwEUIw4CFR4BMz4BNTQmIyIHDgIHIxUzBgcCAwcOBAcGIyI1PwE2NTQmIw4BBxceAzM3NhM2EjchBgIGAgcCIyYnNjU0LgEnJiMOAxUUHgEzNzY3Njc2EjchAw4CBwYHBiMiNTY/AT4BNS4BIw4BBxQXHgEzNz4GNzY3EhM+AjchDgUHBgcGBw4GIy4CPgM3PgM1NC4BIyIOAhUUFjMyPgM3NhITIQMHDgEHBiMuAT4CNz4DNTQuASMiDgIK/4p2NmxXVDwcbs43ATL+6xJNEDZlSEEZGmgGDhwvIyBECyEODgQWHSAOCxodEZR6YKU0GSj9600jNjIJGR4gHxsVDDJoBQ8cLyIhRAsYEAcPD11LlPVvHTUgHv3yOKBlIScOFSA5JQUxK1RjI1M686ezUf36OKBlICgLEjlNBjYwWysuAhQnRC9XooNxWEAV/fokT0t7Ix4VEiQ8JQU1LlNhW1WmhVaQbSD4zQsVRHA2CRsUGyASMTskMjIWTjtWQQ4SESY1SS1F2rJS2SQB+xFCKjwbcbYgAXMSJhoPJCk0LxY1cExBjF5VVFbRKAH4QRU0NRUuSUZnJBgXJA0TA0M7UUoLFhpsWUEpTTtAKjgdGwMBh2cTIhsOAgIPJh8lICYREiQCAg4QIBkoJTAaEBMEAgwMEAUGIxERHjwkK0YqFYp1N2xWVDwdbs42AgefMhFGJ0RlFxMGDRgGBiMSER48JCxGKRb+CIGqMUtpYjfUArIBN5BFAQMrd0gICi8SEkaEHycjCwUERBlCPlg5EikjHAQEBQJWRNOAOm8BIlh3JAYLCAMHDRYPJEaEHycjCwUERBkwLjs/OUNGraIscFVWARcBGhgaFhJEXC05OhCUZkFvTMLT/vgBFwEaFxsWIHVKOTobP1NlMlFFJTZhfZaXTsm1rBIgFhBEWzA4OxCZaWeGWkGx1XWJK17+tf4EvhVFMjgtDzYZRVImLUNuIGRudi1AOR0HNwGEqALo6VH+xMT+8XD+DAIXn0slQTIKDxYlN0w0VoxXByV6ba+hAtv9/spd8PBdqbSXGSshNhVEFkZkG29oQDZbaAcNLjBLOF80MgYCARcBrkGSjlNIs5Ovl6lLWmIDByUpSy05IBcCBwsNEA8TBwowHTIZJlM/L01XLYGqMUtpYjfVArABOP0T21PEUZQCDBQSHQkKMB0yGSZTPzBMVwAAAv39/N0UkAY/AGACCgAABTIeARUUDgIHBgcGHgEXMj4FNzY3Njc2GgE3IzUzPgI3PgEzMh4CHwEUDgIHDgEHBi4CJzQ/ATQmDgEHDgYHBQchCgEHDgUjIiY1ND4CARQWMzI+BTc2EhMhNSE+Ajc+Azc+AhYVBw4DFR4DNz4BNz4DNScuAScuBCIjIgcOAQcGByESNzY3PgIeARUHBhUeAzc+ATc+ATUnLgUjIgcOAwcOAwchGgEzMh4BFxQjDgEVHgEzPgE1NC4BIyIHBgMhGgEzMhYXFCMOARUeAjM2NzY1LgMjIg4FByE+ATc2MzIeAx8BFCMOAxUeATM+ATU0JiMiBwYHDgEHIR8BBgcCAwcOAwcGIyI1PwE2NTQmIw4BBxceAzM3NhM2EjchBgIGAgcCIyImNTY1NC4BJy4DIw4DFRQeBDM3Njc2NzYSNyEDBgIHBgcGIyI1Njc+AT8BPgE1LgIjDgIHFBcWMzc+Bjc+AjcSEzYTIQYCBgIHBgcGBw4GIy4BPgI3PgU1NC4BIyIOAhUUHgIzMj4DNzYSEyEDBw4BBwYjLgE+Ajc+AzU0LgEjIg4H/q4kPB4REiMGGQ8KBBMUGTElJxogEA0DASQSIUZTF9H8HyA0HXD0lCY+Lh4IDgILDxMLRCAiLxwPBmgzLT4+EhcqJR0iER8DARcR/t03zW8XMj9HTloudooWKUYPwIt1J09DQzc2KRNvzjYBMv7rCiowCw4aGxkNEj4+LTIZJRwPBg4cLyMgRAsTDwwBDghAHQUMDQ4PDwmTe1+mNBko/etOIjYyDy4zLh4zaAUPHC8iIUQLIQ4PBBEYHyUtGZR6Hzw6ORwWJSYYF/3yOaBkFyEVCRUxTQUxK1VjJFM686eyUf35OaBkIScLEjlMAxstIVsqLwMUJ0QvS412alVHNBL9+hI6J0x6Bw8NDQsGFRIaMSQWBjUuUmJcVaaFiVkqOBz+4AnZChZEcDYKJBgpFjE7JDIzFU47VkEOEhIlNUkuRNqyU9gkAfsRQio8G3G2ERB0EyYaBAsNDgkpNC8WDhspNUQnQIxeVVVV0icB+EAaYRkuSUZnJAICDA8QJA0UAh07KDdFIggWOKdBKU07QCo5HRoBAQIBhmc0KgIDFT0rOhoSJAEDDg8hGScmMBkXEwYNGAYGFA4RCwcdPCUrRikWI0FhOzZsVlQ8HW/NNwIGnjMQRydEZRcTBg0ZBQciEhEePCQUJB4bFRIMCQT4P1MmGTIdMAooCg0RCAIXIDktSyklBwNiWo0BQwGMbIlWVW8toq0SIzMhOTEuMyElGUQEBQshKR+ERiQcHgEQDBA4U0ZyPHgOAof+yP1Q1S1TWkg7IaqBLVdNL/8AgaoZKz1CTkcm1AKyATeQJ5GeHR0yJh0JDBABHhwkESYxPiQfJyMLBQREGSUhMy4xOSVQCQIDAwECVkTTgDpvASFZdyQKDwQHHBckRoQfJyMLBQREGUI+WDkWJh4XEAhWFjQ/RykiRl1BQQEXARoMFREWHX9DOToQlGZBb0zC0/74ARcBGhcbFiB1SiYzGhs/U2UyUUUlKUhkc4KCQ2e+WawBAwUFBCAWDC46RyQ4OxCZaWeGWmiUQpVphwIrXv61/gS+F1w4QhM2GUVSJi1DbiBkbnYtQDkdBzcBhKgC6OlR/sTE/vFw/gwMDZ9LJUEyCgQGAwIWJTdMNCpPRjkqFwclem2voQLb/f7Kb/5FcKm0lxkCBRYXGDYVRBYtSzISQFpGQDbDBw0uMEs4XzQyAgIDAQEXAa6wAQRh/uHR/vduWmIDByUpSy05IBcCDBQSHQkJHBQdGSIRJlM/L01XLT9tUC8xS2liN9UCsAE4/RPbU8RRlAIMFBIdCQowHTIZJlM/ChMZHyMmJygAAAAD/f383QfyBjgAMgBMAK4AACUiLgEnAwcWFzMVITUzMjc2NwE1LwEiDgIPAQYHIzYSNzIWFT8BPgEzMh4CFxQGBwYTNC4BIyIHBgcGFRQzMjY3Pgc3NgEyHgEVFA4CBwYHBh4BFzI+BTc2NzY3NhoBNyM1Mz4CNz4BMzIeAh8BFA4CBw4BBwYnLgYnNDc2NzQnJgYHBgIHIRUhCgEHDgUjIiY1ND4CBhMmWUkTygsPHHT9kUsWHRULAa0LFh00LhsTJx80U3fRqSRBVlohQiJHcEYlAjY9oBMZOy1MHUAoJE9EViEHIQYUBAsEBgML978kPB4REiMGGQ8KBBMUGTElJxogEA0DASQSIUZTF9H8HyA0HXD0lCY+Lh4IDgILDxMLRCAaJAkQDQoHBwQCaBoZQUhlNhBNEgEV/s43zW8XMj9HTloudooWKUYEJTgd/ccOJARoaBIWHQSnFiQLHDcoID0+bOcBCgRhLzIvDQw8aYZPdo9NzQJcMkgsMnCUoj2BMTALNgslDyAeKB1h/NM/UyYZMh0wCigKDREIAhcgOS1LKSUHA2JajQFDAYxsiVZVby2irRIjMyE5MS4zISUZRAQEBAIJDRESFhMLhEYSEi8KCEh3K/79RZD+yP1Q1S1TWkg7IaqBLVdNLwAC/f383QbsBjgAMACSAAABMhYVFAcOASMiJi8CJiMiByM1AQcOAwcjEyEVATYzMhYXPgU1IiYnNDYBMh4BFRQOAgcGBwYeARcyPgU3Njc2NzYaATcjNTM+Ajc+ATMyHgIfARQOAgcOAQcGJy4GJzQ3Njc0JyYGBwYCByEVIQoBBw4FIyImNTQ+AgWyN0NWKINcIi8QKz1OGy4+bwLw5h4tKRQXVmwCqP0JRkYdvQkIDgsIBgMiKAU++SokPB4REiMGGQ8KBBMUGTElJxogEA0DASQSIUZTF9H8HyA0HXD0lCY+Lh4IDgILDxMLRCAaJAkQDQoHBwQCaBoZQUhlNhBNEgEV/s43zW8XMj9HTloudooWKUYBnmZHelctLQcIFSQkMjoCfQQEESQXHAE5c/21IUYCAQUJCw8RCiopLj79aj9TJhkyHTAKKAoNEQgCFyA5LUspJQcDYlqNAUMBjGyJVlVvLaKtEiMzITkxLjMhJRlEBAQEAgkNERIWEwuERhISLwoISHcr/v1FkP7I/VDVLVNaSDshqoEtV00vAAAAAAIAAPzdBwUGOABdAJ4AAAUyHgEVFA4CBwYHBh4BFzI+BTc2NzY3NhoBNyM1Mz4CNz4BMzIWHwEUDgEHDgIHBiYnND8BNCYOAQcOCAchFSEKAQcOBCMiJjU0PgIDMjY3NC4BJyYnJic0PgEzFxYXFhUPAQYHIic3NCYnJgYHFBcWFxYXFh0BFAcGByIuATU/AzIXFBUUBgcUFjMBaCQ8HhESIgcZDgsEFBMaMCUoGSAQDgIBJBIiRVMX0fwfIDQdcPWTTF0PDgYQGAcgMhdANgxpMi0+PhIRIR8ZHBIaCxgDARX+zjbObxw8VFZsN3WKFSpGGThSBh0mH3cyMQVWjlVlNCNSAxYTKlgQDjUhMUUIJ0EdmAYraGJ6VZFaBBIkLlYBGgMzIPg/UyYZMh0wCigKDREIAhcgOS1LKSUHA2JajQFDAYxsiVZVby2irUZDOT87LjAPKCcDCjlAhEYkHB4BEAwNJzg0UDRbKloLkP7I/VDVN2JpSzGqgS1XTS8Bb0czHzclFUdCQVpXiUcLER4xaSQkIARWRBkiBghPOigoMhl9EzZXJHBSPQs6cEc2LyAPbgEBGz0NFSQAAAQAAPzdCrQGOAAwAEwAqgDrAAAlIiYnAwcWFzMVITUzMjc2NwE1LwEiDgIPAQYHIzYSNzIWFT8BNjMyHgIXFAYHBhM0LgIjIgcGBwYVFDMyNjc+CDc2ATIeARUUDgIHBgcGHgEXMj4FNzY3Njc2GgE3IzUzPgI3PgEzMhYfARQOAQcOAgcGJic0PwE0Jg4BBw4IByEVIQoBBw4EIyImNTQ+AgMyNjc0LgEnJicmJzQ+ATMXFhcWFQ8BBgciJzc0JicmBgcUFxYXFhcWHQEUBwYHIi4BNT8DMhcUFRQGBxQWMwjVOYUeyQsOHXP9kUwWHBYLAawLFR01LRwSKB8zU3fQqiRAV1pBREdwRiUCNj6fEw8eMyJLHUEnJE9EViEHHAgSBAwDBwQDCve4JDweERIiBxkOCwQUExowJSgZIBAOAgEkEiJFUxfR/B8gNB1w9ZNMXQ8OBhAYByAyF0A2DGkyLT4+EhEhHxkcEhoLGAMBFf7ONs5vHDxUVmw3dYoVKkYZOFIGHSYfdzIxBVaOVWU0I1IDFhMqWBAONSExRQgnQR2YBitoYnpVkVoEEiQuVgEaAzMgBE0t/ccOJARoaBIWHQSnFiQLHDcoID0+bOcBCgRhLzIvGTxphk92j03NAlwlOy0ZMnCUoj2BMTAMLQ0hDB4TIyMZYfzTP1MmGTIdMAooCg0RCAIXIDktSyklBwNiWo0BQwGMbIlWVW8toq1GQzk/Oy4wDygnAwo5QIRGJBweARAMDSc4NFA0WypaC5D+yP1Q1TdiaUsxqoEtV00vAW9HMx83JRVHQkFaV4lHCxEeMWkkJCAEVkQZIgYITzooKDIZfRM2VyRwUj0LOnBHNi8gD24BARs9DRUkAAAABQAA/N0O7AY4ABoANQCoAQsBTAAAATQmIyIGBwYHBhUWFzI2Nz4HNz4BJTQmIyIGBwYHBhUWFzI2Nz4HNz4BAyIuAicDBx4BFzMVITUzMjc2NwE1LwEiDgQPAQ4DByM+ATc2NzIeAhU/ATYzMhYXPgY3Mh4CFT8BNjMyHgIXFAYHBiMiJicDBxYXMxUhNTMyNzY3ATUvASIOAg8BDgEHDgEHBgUyHgEVFA4DBw4EBwYXMj4FNz4CNTY3NhI2EjcjNTM+ATc2NzYzMh4DHwEUBgcOAQcGLgInND8BNCYOAQcOCAchFSEKAQcCIyImNTQ+AgMyNjc0LgEnJicmJzQ+ATMXFhcWFQ8BBgciJzc0JicmBgcUFxYXFhcWHQEUBwYHIi4BNT8DMhcUFRQGBxQWMw3sP0MlNQ5EJCQBTkRWIQggBxQECwMGAwMJ+8o/QyU1DkQkJAFORFYhCCAHFAQLAwYDAwndHUM7Mg/JCwgVDnP9kUwUHhUMAawLFRQmIBsbEgsoCRcSFwlTOXA2ZK4SJRwRV1o8SXSUFBocNSg9O00qEiUcEVdaPElHcEYlAjY+osk5gyDJCw4dc/2RTBQeFQwBrAsVHjUsHREoByAHAzU8ovfKJDweChIRGAcECwcIBgMdPRowJScZIRANAQECJw8bOylBEdH8KT0qdXV9kR40KiEWBQ4NIQtDIiIvHA8GaTItPj4SESEeGhsTGA4WBAEV/s42zm/H3naJFSlGGDhSBhwoHncyMQVWjlVlNCNSAxYTKlgQDjUhMUUIJ0EdmAYraGJ6VZFaBBIkLlYBGgMzIAJgTFoaGHiMmkWAATEwDTMOIxAfHycdIl0NTFoaGHiMmkWAATEwDTMOIxAfHycdIl39sRYjKxb9xw4SEwNoaBIVHgSnFiQLDhkcKBwUPRMuJTETcLVHgwYcKjQWMi8ZnnsqLUkqNBwUARwqNBYyLxk8aIdPd45NzUwu/ccOIgZoaBIVHgSnFiQLHDUrHz0RPRBsgkvN/D9TJhQmIhohCwYQCQsGAiIGFx86LEwoJgIDBAFjWW4BDMMBOlGJdpFAp1JWDBchKxo5WD5CGUQEBgsiKCCERiQdHQEQDA0nNzZMOVUxUw+Q/sf9T9P+gqqBLVhMLwFvRzMfNyYUR0JBWleJRwsRHjFpJCQgBFZEGSIGCE86KCgyGX0TNlckcFI9CzpwRzYvIA9uAQEbPQ0VJAAAAAMAAPzdCa0GOAA3AJUA1gAAATIWFRQHDgUjIi4BLwImIyIHIzUBBw4DByMTIRUBNjMyFhc+ATUiLgMnND4DATIeARUUDgIHBgcGHgEXMj4FNzY3Njc2GgE3IzUzPgI3PgEzMhYfARQOAQcOAgcGJic0PwE0Jg4BBw4IByEVIQoBBw4EIyImNTQ+AgMyNjc0LgEnJicmJzQ+ATMXFhcWFQ8BBgciJzc0JicmBgcUFxYXFhcWHQEUBwYHIi4BNT8DMhcUFRQGBxQWMwh0NkRWDiAmLDE4HhciHgosPU0bLz1wAvHnHi0oFRZXbAKp/QhGRx29CBkaDhcSDggCChQaIvkGJDweERIiBxkOCwQUExowJSgZIBAOAgEkEiJFUxfR/B8gNB1w9ZNMXQ8OBhAYByAyF0A2DGkyLT4+EhEhHxkcEhoLGAMBFf7ONs5vHDxUVmw3dYoVKkYZOFIGHSYfdzIxBVaOVWU0I1IDFhMqWBAONSExRQgnQR2YBitoYnpVkVoEEiQuVgEaAzMgAZ5mR3pXDxkUDwoFAwcFFSQkMjoCfQQEESQXHAE5c/21IUYCAiQeBw0VGhASIRsTC/1qP1MmGTIdMAooCg0RCAIXIDktSyklBwNiWo0BQwGMbIlWVW8toq1GQzk/Oy4wDygnAwo5QIRGJBweARAMDSc4NFA0WypaC5D+yP1Q1TdiaUsxqoEtV00vAW9HMx83JRVHQkFaV4lHCxEeMWkkJCAEVkQZIgYITzooKDIZfRM2VyRwUj0LOnBHNi8gD24BARs9DRUkAAAABQAA/N0OXAY4ADEATgCGAOQBJQAAJSImJwMHFhczFSE1MzI3NjcBNS8BIg4CDwEGByM2EjcyFhU/ATYzMh4CFxQOAQcGEzQuAiMiBwYHBhUUMzI+ATc+CDc2BTIWFRQHDgUjIi4BLwImIyIHIzUBBw4DByMTIRUBNjMyFhc+ATUiLgMnND4DATIeARUUDgIHBgcGHgEXMj4FNzY3Njc2GgE3IzUzPgI3PgEzMhYfARQOAQcOAgcGJic0PwE0Jg4BBw4IByEVIQoBBw4EIyImNTQ+AgMyNjc0LgEnJicmJzQ+ATMXFhcWFQ8BBgciJzc0JicmBgcUFxYXFhcWHQEUBwYHIi4BNT8DMhcUFRQGBxQWMwx9OYUeyQsOHXP9kUwWHBYLAawLFR01LRwSKB8zU3fQqiRAV1pBREdwRiUCHS0qnxMPHjMiSx1BJyRPLkgvFgccCBIEDAMHBAMK+xw2RFYOICYsMTgeFyIeCiw9TRsvPXAC8eceLSgVFldsAqn9CEZHHb0IGRoOFxIOCAIKFBoi+QYkPB4REiIHGQ4LBBQTGjAlKBkgEA4CASQSIkVTF9H8HyA0HXD1k0xdDw4GEBgHIDIXQDYMaTItPj4SESEfGRwSGgsYAwEV/s42zm8cPFRWbDd1ihUqRhk4UgYdJh93MjEFVo5VZTQjUgMWEypYEA41ITFFCCdBHZgGK2hielWRWgQSJC5WARoDMyAETS39xw4kBGhoEhYdBKcWJAscNyggPT5s5wEKBGEvMi8ZPGmGT1F6VDPNAlwlOy0ZMnCUoj2BGSggDC0NIQweEyMjGWGXZkd6Vw8ZFA8KBQMHBRUkJDI6An0EBBEkFxwBOXP9tSFGAgIkHgcNFRoQEiEbEwv9aj9TJhkyHTAKKAoNEQgCFyA5LUspJQcDYlqNAUMBjGyJVlVvLaKtRkM5PzsuMA8oJwMKOUCERiQcHgEQDA0nODRQNFsqWguQ/sj9UNU3YmlLMaqBLVdNLwFvRzMfNyUVR0JBWleJRwsRHjFpJCQgBFZEGSIGCE86KCgyGX0TNlckcFI9CzpwRzYvIA9uAQEbPQ0VJAAAAAAEAAD83QzwBjgALQCfAP0BPgAAATIWFRQHBiMiLwIuASMiByM1AQcOBQcjEyEVATYzMh4BFz4BNSInNDYBMh4EFRQOBAcGBwYeARcyPgU3Njc2NzYaATcjNTM+Ajc+ATMyHgYfARQOAwcOCQcGJy4BJzQ/ATQnJgYHDgMHIRUhBgoBBw4EIyIuAjU0PgIhMh4BFRQOAgcGBwYeARcyPgU3Njc2NzYaATcjNTM+Ajc+ATMyFh8BFA4BBw4CBwYmJzQ/ATQmDgEHDggHIRUhCgEHDgQjIiY1ND4CAzI2NzQuAScmJyYnND4BMxcWFxYVDwEGByInNzQmJyYGBxQXFhcWFxYdARQHBgciLgE1PwMyFxQVFAYHFBYzC7c2RFZQt0QdKz4oMg4uPnAC8ecUIR8THAsQVmwCqP0IR0YWYGANGBpECz75KRMjGxcOCAcLEQ4UBhkPCgMUFBkwJicZIQ8OAwEkEiFGUhjR/B4gNR1v9ZQTIh8bFxMPDAMPAgQNDQ8CBQgKCg0NDg4PCBkkHh4IaDNBSGU2CSEhHQgBFv7OI3GVSh08VFZsNjthQSMWKUb84SQ8HhESIgcZDgsEFBMaMCUoGSAQDgIBJBIiRVMX0fwfIDQdcPWTTF0PDgYQGAcgMhdANgxpMi0+PhIRIR8ZHBIaCxgDARX+zjbObxw8VFZsN3WKFSpGGThSBh0mH3cyMQVWjlVlNCNSAxYTKlgQDjUhMUUIJ0EdmAYraGJ6VZFaBBIkLlYBGgMzIAGeZkd6V1oPFSQTETI6An0EAgoTDB8OFAE5c/21ISElAgIkHlMuPv1qEhwmKSkSESIZHRQcCSgKDREIAhcgOS1LKSUHA2JajQFDAYxsiVZVcCyirQQJDhEWGR0ROScsJiMeHgQKCwwNDAsKCAUBBAQGOy6ERiQvCghIdxdoc2UckMj+R/5TjzdiaUsxL1BtPy1XTS8/UyYZMh0wCigKDREIAhcgOS1LKSUHA2JajQFDAYxsiVZVby2irUZDOT87LjAPKCcDCjlAhEYkHB4BEAwNJzg0UDRbKloLkP7I/VDVN2JpSzGqgS1XTS8Bb0czHzclFUdCQVpXiUcLER4xaSQkIARWRBkiBghPOigoMhl9EzZXJHBSPQs6cEc2LyAPbgEBGz0NFSQAAv+4/N0HdAY4AFsAkwAABTIeARUUDgQHBgcGHgEXMj4FNzY3Njc2GgE3IzUzPgI3PgEzMh4CHwEUBgcOAQcGJy4BJzQ/ATQnJgYHDgIHIRUhCgEHDgQjIiY1ND4CASImNT8BNCMiDwEGAgcjEzU0IyIOBAcGByc+Ajc2Nz4DMzIVBgcGBz4EMzIWFRQB2CQ8HggLEA8UBhkPCgQTFBkxJScaIBANAwEkEiFGUxfR/B8gNB1w9JQmPi4eCA4OIQtEIBokHh4IaDNBSGU2CzAqCgEV/s43zW8cPFRXbDZ2ihYpRgEOJS0DCx1JQDktiQnYzR0NFw4VCBkEKTEyCR8ZGQcEITdSVypPAgICARUhNzNGJDlX+D9TJhEiGR0UHAkoCg0RCAIXIDktSyklBwNiWo0BQwGMbIlWVW8toq0SIzMhOVg+QhlEBAQEBjsuhEYkLwoISHcenZEnkP7I/VDVN2JpSzGqgS1XTS8DajovJywZcHNz/iobAroSOgYGFAgfBTNOHRcuHRsIAyExOyBlDBkaDCAtPSUaVzmiAAP/uPzdChYGOAAyAI4AxgAAATIeARUUBgcOBSMiJi8CJiMiByM1AQcOAwcjEyEVATYzMhYXPgI1Iic0NgEyHgEVFA4EBwYHBh4BFzI+BTc2NzY3NhoBNyM1Mz4CNz4BMzIeAh8BFAYHDgEHBicuASc0PwE0JyYGBw4CByEVIQoBBw4EIyImNTQ+AgEiJjU/ATQjIg8BBgIHIxM1NCMiDgQHBgcnPgI3Njc+AzMyFQYHBgc+BDMyFhUUCNwlOB0rKw0hJiwxNx8iLxArPU4bLj5vAvDmHi0pFBdWbAKo/QlGRh29CRAXC0QLPvkqJDweCAsQDxQGGQ8KBBMUGTElJxogEA0DASQSIUZTF9H8HyA0HXD0lCY+Lh4IDg4hC0QgGiQeHghoM0FIZTYLMCoKARX+zjfNbxw8VFdsNnaKFilGAQ4lLQMLHUlAOS2JCdjNHQ0XDhUIGQQpMTIJHxkZBwQhN1JXKk8CAgIBFSE3M0YkOVcBnjFOLj5nLA8ZFA8KBQcIFSQkMjoCfQQEESQXHAE5c/21IUYCAhEdFFMuPv1qP1MmESIZHRQcCSgKDREIAhcgOS1LKSUHA2JajQFDAYxsiVZVby2irRIjMyE5WD5CGUQEBAQGOy6ERiQvCghIdx6dkSeQ/sj9UNU3YmlLMaqBLVdNLwNqOi8nLBlwc3P+KhsCuhI6BgYUCB8FM04dFy4dGwgDITE7IGUMGRoMIC09JRpXOaIAAAH/g/6iAl3/nAANAAAFDgEjIiYnMx4BMzI2NwJdJ8uFh7kjFyLLY2TQKGR0hoN3RlJSRgAB/4P+ogOD/5wAEQAABQ4CIyIuASczHgIzMj4BNwODGazYa2nSpxYWF7XHUVnIsxtkS3U6OXZLL0ghIUgvAAAAAf+D/qIEy/+cABEAAAUOAQQjIiQmJzMeAQQzMiQ2NwTLGtD+3qCX/uTSFxYX5wEQenkBEu0bZEt0Ozp0TC9IISFILwACADD/7APQBWEADQAdAAAkEhE0JwIgAwYVFBcWMwEWFRQHAiEiJyYREDc2ITICnG4hPv6sPyEiQLABYmU+df7gxX+IW3sA/+YlAUIBMfORAQ7+6pTy44j+BErD/cew/rWzvwFIAQK6/QAAAAABAOMAAAMlBV4AFgAAABYVERQWFxUhNT4BNRE0JiMiBgc1JTMCYgFScP3MeUoYKBpTJAFvDAVZBQn7TE0qBBweBjZaA54wMh0QHLsAAQA9AAADywVlABsAADcIATU0JiMiBwYHJz4BMzIWFRQCASEyNjcXAyE9AW4BBqBviVUvKysy74mp0eL+hgHLYE4xGm/84RcBfAFkqZSbZDdyCeaz1Zqk/tD+ey5ZDP7pAAAAAAEAPf7sA8sFZQAjAAA3CAE1NCYjIgcGByc+ATMyFhUUAgEhETMRNjc2NxcDIxEjESE9AW4BBqBviVUvKysy74mp0eL+hgG0ehYOJzEabyd6/YIXAXwBZKmUm2Q3cgnms9WapP7Q/nsBTf68BggXWQz+6f7sARQAAAEAWf/wA3cFawAvAAA2FjMyNjU0JyYjIgYHJz4BNTQmIyIHBgcnPgEzMhYVFAcGBxYXFhUUACEiJjU0NjPWtT+MiDdd3Q0YEAKguJFdblQuNR8o2o+Zp0UnUmA6bf7V/ux7YyElrnK9b2tRiQECGjqWe21yUSxcB5i2qG5hUS45KTdpob7+3kkqGjAAAgAXAAADxwVeAAIADQAACQEhEzMRMxUjESMRITUCVf4VAetCX9HRn/3ABJD9SgOE/HyF/qsBVYUAAAAAAgAXAAAEeAVeABIAFQAAATMRMxEzETMVIxEjESMRIxEhNQkBIQKXX6p5X195qp/9wAI+/hUB6wVe/HwBAP8Ahf79AQP+qwFVhQK2/UoAAAABAED/6QN/BX8ALAAANhYzMjY1ECUmIyImJz4BNxMhMjY3FwcOASMhBxYXFhceARUUACMiJyY1NDYz0rkyc6z+7JmEFgsIAgMC2gGtICMcEE4EJBX+fVWkTH1USEr+xfFiPGQrLbeBy5QBA3I/AwkICwUB3hYeDrkJBa8cGSpSR7Fj3f7YEx9QHi0AAAEAQP/pA38GCAA0AAA2FjMyNjUQJSYjIiYnPgE3EyE1MxUzMjY3FwcOASsBFSM1IwcWFxYXHgEVFAAjIicmNTQ2M9K5MnOs/uyZhBYLCAIDAtoBBnkuICMcEE4EJBUSefhVpEx9VEhK/sXxYjxkKy23gcuUAQNyPwMJCAsFAd69vRYeDrkJBcbGrxwZKlJHsWPd/tgTH1AeLQAAAAEAQP/pA74FfwAzAAA2FjMyNjUQJSYjIiYnPgE3Ey8BFzchMjY3FwcOASsBBRclBxYXFhceARUUACMiJyY1NDYz0rkyc6z+7JmEFgsIAgMCgsUC+yQBrSAjHBBOBCQV4gGqAv2VN6RMfVRISv7F8WI8ZCstt4HLlAEDcj8DCQgLBQEcTYhiTxYeDrkJBaaI8XIcGSpSR7Fj3f7YEx9QHi0AAAAAAwBB/2QDfwYEAAcANAA7AAAlFjMyNjU0JwE2NzY3FwcOASsBAxYXHgEVFAAjIicHIzcmNTQ2MzIXEyYjIiYnPgE3EyE3MwEjBxYXMDMBMFwxc6yyAQAOChEcEE4EJBUMcTktSEr+xfEoIjh+Q0UrLRYb95WBFgsIAgMC2gFJS37+9flVpEwBdT/LlNBzAnUDBgseDrkJBf7sICxHsWPd/tgDiaUgQx4tCQJfPAMJCAsFAd65/qavHBkAAAACAEb/6gO+BXgAFwAlAAAAAiMiABEQJTYhFw4BBw4BBzY3NjMyFhUnJiMiBwYVFBIzMjY1NAO+67yw/t8BGPoBOAV9tUdJgBg+LVBRn9jhRqibMx6LlndsARD+2gFKARIBYf3UIRdPR0jebSYSINzMn6xcNn6j/sjLiIUAAgBE/+oDvgV4AA0ALgAAASYjIgcGFRQSMzI2NTQWAiMiABEQNy8BBTYhFw4BBwYHBRclBgcGBzY3NjMyFhUC3UaomzMei5Z3bLfrvLD+3+zsAgFb4QEQBX21RwECAaMC/gYZGEAYPi1QUZ/YAmasXDZ+o/7Iy4iF7/7aAUoBEgFE8FyIh6EhF09HAQKjiMUkKm9tJhIg3MwAAAAAAQAo/+0DlwVLAAwAAAEVASMBISIGByc+ATcDl/5OhAGV/kxhVUEjQR8ZBUsh+sMEx0BmEKBLQgABACj/7QOXBiQAFAAAARUBIwEhESMRBgcGByc+ATczNTMVA5f+ToQBlf6feUQiKkEjQR8Ze3kFSyH6wwTH/ugBFwYZIGYQoEtC2dkAAQAo/+0DtgVLABQAAAEVAx8BJQMjEy8BBRMhIgYHJz4BNwOX2/gC/t+whMPuAgEYqv5MYVVBI0EfGQVLIf1cYohy/d8CTV6IbgICQGYQoEtCAAAAAwB0/+oDkAVjAAsAGAAzAAAkNjU0JicOARUUFjMTNjU0JiMiBhUUFhc2BSY1NDYzMhYVFAcGBx4BFRQGIyImNTQ3NjcmAn52fcJWTo1tjz51d1x4jXNe/lRK26+hvmE4faqT2baj6VE1g4QigGBth4k2rFCJogNrTW1fhXRTXqFHQg1gdIS4rnN1XTVFfrt/kMS1lH9hP1hqAAAAAgA9/9ADrwVjAA4AKwAAADY3PgE1NAIjIgYVFBYzGgEVFAIHBgcGByc2NzY3PgE3BwYHBiMiJjU0EjMCQ5EKBAaMh2J5cZTA8HJtf8NtpgpoRXxLan8QI0pkNCuqx+25Aj1MGgqBKNABBLKxkvgDJv6h2Jj+xnuORScVKBgbMUdl+VQaOBUM8afVARQAAAAAAgA9/9ADwAVjAA4ANgAAADY3PgE1NAIjIgYVFBYzGgEVFAIHBgcfASUGBwYHJzY3Njc2NyUnBTY3NjcHBgcGIyImNTQSMwJDkQoEBoyHYnlxlMDwcm0DBPUC/qBddW2mCmhFfEsCA/5eAgH9KyBAECNKZDQrqsftuQI9TBoKgSjQAQSysZL4Ayb+odiY/sZ7BARfiIlEKScVKBgbMUcCAqOIxjk/fVQaOBUM8afVARQAAAAAAQAo/+0DvgVLABQAAAEVAzcXBQMjEwcnJRMhIgYHJz4BNwOXr9QC/vbPhL/oAgEfof5MYVVBI0EfGQVLIf3jXYh0/X8CQGWIfQHnQGYQoEtCAAAAAAAOAK4AAQAAAAAAAAAAAAIAAQAAAAAAAQALABsAAQAAAAAAAgAHADcAAQAAAAAAAwAoAJEAAQAAAAAABAALANIAAQAAAAAABQALAPYAAQAAAAAABgALARoAAwABBAkAAAAAAAAAAwABBAkAAQAWAAMAAwABBAkAAgAOACcAAwABBAkAAwBQAD8AAwABBAkABAAWALoAAwABBAkABQAWAN4AAwABBAkABgAWAQIAAAAAVgBlAHIAbwB2AGkAbwBUAGUAeAB0AABWZXJvdmlvVGV4dAAAUgBlAGcAdQBsAGEAcgAAUmVndWxhcgAARgBvAG4AdABGAG8AcgBnAGUAIAAyAC4AMAAgADoAIABWAGUAcgBvAHYAaQBvAFQAZQB4AHQAIAA6ACAAMQA3AC0AMQAwAC0AMgAwADEANAAARm9udEZvcmdlIDIuMCA6IFZlcm92aW9UZXh0IDogMTctMTAtMjAxNAAAVgBlAHIAbwB2AGkAbwBUAGUAeAB0AABWZXJvdmlvVGV4dAAAVgBlAHIAcwBpAG8AbgAgADEALgAwAABWZXJzaW9uIDEuMAAAVgBlAHIAbwB2AGkAbwBUAGUAeAB0AABWZXJvdmlvVGV4dAAAAgAAAAAAAP9nAGYAAAAAAAAAAAAAAAAAAAAAAAAAAABWAAAAAQACAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAd1bmlFMUQwB3VuaUUxRDEHdW5pRTFEMgd1bmlFMUQzB3VuaUUxRDQHdW5pRTFENQd1bmlFMUQ2B3VuaUUxRDcHdW5pRTFEOAd1bmlFMUQ5B3VuaUUxREEHdW5pRTFEQgd1bmlFMURDB3VuaUUxREQHdW5pRTFERQd1bmlFMURGB3VuaUUxRTAHdW5pRTFFMQd1bmlFMUUyB3VuaUUxRTMHdW5pRTFFNAd1bmlFMUU1B3VuaUUxRTYHdW5pRTFFNwd1bmlFMUU4B3VuaUUyNjAHdW5pRTI2MQd1bmlFMjYyB3VuaUUyNjMHdW5pRTI2NAd1bmlFNTIwB3VuaUU1MjEHdW5pRTUyMgd1bmlFNTIzB3VuaUU1MjQHdW5pRTUyNQd1bmlFNTI2B3VuaUU1MjcHdW5pRTUyOAd1bmlFNTI5B3VuaUU1MkEHdW5pRTUyQgd1bmlFNTJDB3VuaUU1MkQHdW5pRTUyRQd1bmlFNTJGB3VuaUU1MzAHdW5pRTUzMQd1bmlFNTMyB3VuaUU1MzMHdW5pRTUzNAd1bmlFNTM1B3VuaUU1MzYHdW5pRTUzNwd1bmlFNTM4B3VuaUU1MzkHdW5pRTUzQQd1bmlFNTNCB3VuaUU1M0MHdW5pRTUzRAd1bmlFNTUwB3VuaUU1NTEHdW5pRTU1Mgd1bmlFQTUwB3VuaUVBNTEHdW5pRUE1Mgd1bmlFQTUzB3VuaUVBNTQHdW5pRUE1NQd1bmlFQTU2B3VuaUVBNTcHdW5pRUE1OAd1bmlFQTU5B3VuaUVBNUEHdW5pRUE1Qgd1bmlFQTVDB3VuaUVBNUQHdW5pRUE1RQd1bmlFQTVGB3VuaUVBNjAHdW5pRUE2MQd1bmlFQTYyB3VuaUVDQzAAAAAAAAH//wACAAEAAAAMAAAAFgAeAAIAAQADAFUAAQAEAAAAAgAAAAEAAAABAAAAAAAAAAEAAAAA1aPejAAAAADQZzF6AAAAANnDOqc="; +var vrvTTF = "AAEAAAAOAIAAAwBgRkZUTYpmj14AAG6sAAAAHEdERUYAKQB5AABuhAAAACZPUy8yj3RmXgAAAWgAAABgY21hcLwdiigAAAL8AAABymN2dCAARAURAAAEyAAAAARnYXNw//8AAwAAbnwAAAAIZ2x5ZiXphFYAAAV0AABj7GhlYWQleSYgAAAA7AAAADZoaGVhH8MXJwAAASQAAAAkaG10eMjH7A0AAAHIAAABNGxvY2EIPB9cAAAEzAAAAKhtYXhwAJ0B8AAAAUgAAAAgbmFtZVN3z1MAAGlgAAAB1HBvc3Trc+9cAABrNAAAA0gAAQAAAAEAAKkBXvpfDzz1AAsIAAAAAADQZzF6AAAAAN4yoJb9+fzdGccSNgAAAAgAAgAAAAAAAAABAAAGZv5mAZoZgv35/vcZxwABAAAAAAAAAAAAAAAAAAAARwABAAAAUwG/AAgAAAAAAAIAAAABAAEAAABAAC4AAAAAAAQGNwGQAAUACAUzBZoAAAEfBTMFmgAAA9cAZAIQAAAFBgAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAFBmRWQAwCZt7MAGZv5mAZoJCwKkAAAAAQAAAAAAAAAAAAAAIAABAuwARAAAAAACqgAAAmMAPgH7AD4CZAA+B5IAAAg7AAADngAABLoAAAS6AAAFPgAABEAAAAOsAAACuwAAAqoAAARsAAAEiwAABIEAAASBAAAEgQAABJwAAASLAAAEiwAAAaEAfQJjAD4B+wA+AmQAPgMWAC0EPwA+BFj/UAWz/2IDSP3+Ay3/uAK8AAADqf9/BBL/dBmC/1AVRP9QERH/UAzX/1AIuf9QCmX/Ygj9/2IH9/9QBsX9/gm3/foM/v36EEn9+hOR/f4H8P3+Bu79/gYEAAAKtAAADu4AAAjOAAANfQAADBgAAAZz/7gJPf+4AeD/gwMG/4METv+DBAAAMAQAAOMEAAA9BAAAPQQAAFkEAAAXBJAAFwQAAEAAQABAAEEARgBEACgAKAAoAHQAPQA9ACgAAAADAAAAAwAAABwAAQAAAAAAxAADAAEAAAAcAAQAqAAAACYAIAAEAAYmb+BJ4dPh1eHX4dnh2+Hd4d/h4eHj4eXh5+Jk5T3lUupi7MD//wAAJm3gReHQ4dXh1+HZ4dvh3eHf4eHh4+Hl4efiYOUg5VDqUOzA///Zlh/BHjseOh45HjgeNx42HjUeNB4zHjIeMR25Gv4a7BXvE5IAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBgAAAQAAAAAAAAABAgAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQFEQAAACwALAAsAGgAhAC6AXoCGAKWAygDZAP0BEQEiATEBOIFJgWsBlYHJggeCSoKRguKC54L2gv2DCwMVAy+DSgNnA4SDmQOwA8AD2IRwhPAFVoWkhdkGDwZLBoQGsgb1B1SH0IhsCKWI1AkJiViJwwoIimYKyAr6izuLQgtKC1KLYAtpi3YLhQuWi54LqAu5i80L4Yv5DAiMHAwjDCyMNwxKjFyMcwx9gACAEQAAAJkBVUAAwAHAC6xAQAvPLIHBADtMrEGBdw8sgMCAO0yALEDAC88sgUEAO0ysgcGAfw8sgECAO0yMxEhESUhESFEAiD+JAGY/mgFVfqrRATNAAAAAgA+AH0CLgbHABQAJAAAEz4CMzIWFxYfARQHDgMPAREzEyIGBxE2NzY1NDY1NCYvAXAzNFQuLzMlOQsKcQw2Gy8X3DKwOUkubUVQAgwPFANGGRYUDRQeQD9ifQ07Hi4WxQZK/HUiJ/4bbGZ6WA0iAxogEQcAAAAAAgA+/sUBxwWgAAgADAAANxEzESUwESMRLQERBT4uAVsr/tABMP7QXAVE/iI4+ssB0aIrAbgvAAACAD7+4wIrBaoAGwAfAAABETMRNxUHETcVBxEjEQcRIxEHNTcRBzU3ETMRFRE3EQGSK25ubm4rvipsbGxsKr4EBAGm/mYj4yT+ZB7kIP58AXg4/n0BdSHhIwGhIuYgAab+aeb+XzYBpAAAAAAFAAD/4AeUA5AAGAAmAGwAeQCFAAABNC4DJyYnNSEgERQHBgQjITUyNjUTNwU0JiMiBgcDBxYzMj4BASIGFBceARceAhcWFRQHBgcGIyInLgInIgcGByMTMwcUFxYXFjMyNzY1NCcuAScmJyYnJjU0Njc2MzIXFjMyNzMDIzQBIiY1NDYzMhcWFRQGISImJzQ2MzIWFRQGASwKDB4VFwgEAVYBxlhS/tuv/qI1PrIFAg+MlCMqCcsEBl+a2mwC+zxVIiQlIwovJw0oKy06MFYiUQ0pHgoVDw8DGy8iBwsNJTJaUSg3IAsvEBkOSSUkHihBaFQlJCIXIB02F/zpIictHBsUFykDZiEoBjEeISUpAzMPFQ0LBQQCART+iqR9cIgXRDUCgxT2m5gJEP0oGTSD6gHPT3UwKyceDDkwEEFEQlFCHyAgAwgHBRcEGQEwJhY+IyU/NjNJQioMOhAZEEY8K08/QyFBEBYm/vTf/J4nIyIrGw0lHC4iHR0uKCMdIgAFAAD/zgg9A5QAFAAkAFAAXQBrAAA1MjY3Ez8BNCcmJzUhIBEUBwYEIyEBNCYjIgYHAwcWMzI3Njc2ATI2NxcGIyInJicmNTQ3Njc2OwEyHwI3MwMjNCcmIyIHBgcGBwYVFBYXFgUiJjU0NjMyFxYVFAYhIiYnNDc2MzIXFhUUBjU5BbIFAhIPSwFWAcZYV/7hsP6iAzmMlCMqCcsEBl+KbnA7PQK+b5xFEp/jaFM7QStNT4WJjikUDlE/OBcyGDlBX4NYYS8eCw0ZHzn+RiInLRwbFBcqBBEeKQQXEyEbGw8oF0E4AoMUDBgSDw8U/oqkfXGHAjGZmgkQ/SgZNE1Cd2X+hlVRFtkyKGhWapKGgVxPBRASIv7mcz87WFSCRDZINEphKVMXJyMiKxsNJRsvJBsnDRcVEyMcIwAAAwAAAAADnwSFAD8ASwBXAAATIgYVFB4FFxYXATMBFhcWFRQGIyImNTQ2MzIXFjMyNjU0JyYnJicBIwEmJyY1NDc2MzIWFRQGIyIvASYDFAYjIiY1NDYzMhYBNDYzMhYVFAYjIib0JDITGjQoSSspDwcBN1z+t4ZSX6F2RWc7JkQUFDIsMxIfhENE/tJaAT6jU0h5O0hRfD4nPhEQEX0vIigwLiMmMgJPLyQlLzEjJS4ELVAuGS4kKRsmFBMHAwHO/g5FUmJ5c6BiQyQxVU1ENichOUciIv4rAfdMaF1hiV0tZEojLjg0O/2EJDIrJCQ0LgECKC4zISUuMAAABQAA/1sEuwUcAD4ARwBTAFsAZAAAASMUDwIOCQcOAQcVIzUnJicuAS8BNSM1MzQ2NzY/Aj4CNzY3NTMVHgMXFhcWFx4BFTMhJzU0Jy4BIxEjESIHBgcOAQcVFAcFIxEyNzY/AQERIx0BFBYXFgS7kB4fJAEQBA8GDwgOCgwFImhRT1gbGWB1JR2TkwkSFi00Nh0cLyI2G08JNRslCyolMzoaR5D+hQQVC2E2TzE3MwoDCwQGAcm9NTMtDRX++r0uJTMCDTlrWEYBFQUUBxIIDwkLBRolFKWlDgMKNJx+WExbODg0WkREOBYSEgUJB6enAQcECgcQIilTLt03MVQ7R0F2/kIBvjtANRRRFVEUL1v+Rjc0RYz+xAG6L1NHjC43AAAAAAUAAP9bBLsFHAAUABgAHAAgACQAAAEjESEVIzUhETUjNTMRITUzFSERMyERIxEjESMRBSMRMyERIxEEu5D+Wk/+XZOTAaNPAaaQ/oW7T70Byb27/va9Ag3986WlAcFMWwINp6f98wG+/kIBvv5CW/5GAbr+RgAAAAYAAACbBT4DTwANAB0AMABKAFoAaQAANxQrASI1ETQ2OwEyFhUTFAYrASImNRE0NjsBMhYVBTIeAhUUDgMjIi4CNTQkBwYVFBYXFhcWFxYzMjc2NzY1NC4BIyIOAgEUBisBIiY1ETQ2OwEyFhUTFCsBIiY1ETQ2OwEyFhVFFB0UCwkdCQuDDQgeCA0NCB4HDgHhTqOEVR5GbaZqeLVpNAEIEwUsIhIcLj0eHSIeVBACSIFJHi81JgL4DggeBw4OBx4IDn8WHQgODggdCQ2oDQ0ClgYKCgb9agYHBwYClgYKCgYzK0lpOjBRSDMdLlBiOXegjB4VM2ksGRgrEggIFlgMHUSJWwYQJf4OBgcHBgKWBgoKBv1qDQcGApYGCgoGAAIAAAAMBEIEDQApADgAAAEyFhURFAYjIiY9AS4CIyEiBh0BFAYiJjURNDYyFh0BFjMhMjY9ATQ2ARUUFjMhMj0BNCYjISIGBCQNERENDxMDCyAP/LMSJBMaFRUaEx0RA1UYJRP8LU5EAqKMTED9VEhABAwUDvxDDRQUDVUGERwmF0sNFBQNA70OFBQOYT0iIFwOFP4aUCUvVF8hKSsAAAACAAABCwOsAzsAEgAsAAABMh4CFRQOAyMiLgI1NCQHBhUUFhcWFxYXFjMyNzY3NjU0LgEjIg4CAeFOo4VVHUZsp2t4tWo0AQcOCCojDiAxOCMYHSdSEAVIgkgfMTQkAzoqSGk5MFFJMx0tUGM6dp6KEicyaCcUICcTCQkWWBQUQoleBhIkAAAAAgAAAOMCuwluABcAKAAANyImNTQ+BTMyFxEzERQOBQMGFRQXFjMyNz4BNTQnJiMi5mWBDiEwTF2BSWtBPQsdLEteiBrXEBxCVJN4XxAZO03kaFwcQU5KRTQfOAZx+P8TN0xMSzkjAZN8WBMcNWFOYSYXFDQAAAAAAQAAAOsCqgluABEAAAERMxEUDgIjIiY1ND4CMzICbD1WhKVMYH5IeatcZwL4Bnb4/0aQaUNnWEqOa0EAAQAAAPIEbAnHAC0AAAEWFxITFRQGBwYjIicmNTQ3NjU0JwInERQOAiMiJjU0PgIzMhcRNDY7ATIWArgvptQKJgsSFgsCHgUuLmPgVoSlTGB+SHmrXGc9CQsMERYJodXn/tj+1xBIuxglAxIfEQpphoV+ARMt+q1Gj2lCaVhJjGpBNga1DgYOAAIAAADyBIsJvwBFAGEAAAEUFhUWHQEUBgcGIyIuAScuATU0NzY1NCcuBCcRFA4CIyImNTQ+AjMyFxEzMhceBBceBBcWFRQOAQcGJzY1NCcuAisBIgYVFBceAxcWFxYzMjc+AQRNAzoJBREWBAUHAwkQAw4/IUhBSjwkVoSkS2B+SHmrXGc9HiQFCSQ1MUsZMzA5GRYHBBYVBQMXAjYjUnI3EgkRAw40LVYXRCUFChMEBgkFrgQNAnN2KUeICCICBAECGRILBVxSoX9EZDslDgL7uEaPaUJpWEmMakE2BsIXO1pBLkAbNzVJM0EoFy42d0MJBcINGlxSNFZADAYEAzhdMlUaTTkHCgknAAADAAAA8gSBC08ASQBkAHsAAAEVFAYHBiMiJiMmPQE2NTQnLgQnERQOAiMiJjU0PgIzMhcRNjMyFhceBBceAxcWFRQHFhcWFRQOAhUGFRQXFgM2NTQnLgIjIgYVHgMfARYXFjMyNjc+ARM0NjU0Jy4DIx4EFx4CFz4BBIAJBBYSAwgDGRJAIUdASTsjVoSkS2B+SHmrXGc9CgwLHQIKJTUySRg7PDcZCQIoGwsFDg8QAwMuTQIzIlJ3PgYUDzQvUhgKLy4DDAcOAwIFBQUeKVhZUy0JIjIuRhcPNSENBBIEujg/fAghAwwnDGdHn3xCYTkjDQP7ukaPaUJpWEmMakE2CDgaGw47WUEuPxs/Rk9FLhQnbmw0QTIXKFs7MwEFCAsFaAE/DyJZSzRTPhYDOFozTx0KOUAKCQUHIAGsBx0ILTdFYDMVOFdALUEZETglEg8/AAAABAAAAPIEgQzmAE4AagCBAJgAAAEWFxUUBgcGIyInJj0BNjU0Jy4EJxEUDgIjIiY1ND4CMzIXETYzMhYXHgQXHgMXFhUUBxYXFhUUBxYXFhUUDgIVBhUUJzY1NCcuAyMOARUeAx8BFhcWMzI2Nz4BEzQ2NTQnLgMjHgQXHgIXPgETNDY1NCcuAyMyFR4EFx4CFwRLLgcJBBcRCQUZEkAhR0BJOyNWhKRLYH5IeatcZz0KDAsdAgolNjFJGD05OBkJAiodCwIoGwsFDg8QAxwCMxk7S1svBhQPNC9TFwozKgMMBw4DAgUFBR4pWFpSLQkiMi5GFw42IQ0EEgMFHilYWFMuAgohMStIFw03HwwFomx6Oj18Ch4CDSQPZ0ebf0JiOCQNAvu4Ro9pQmlYSYxqQTYJzxkZDDtZQi4/GkJCUkUvEiZnfTRHEiduazRCMhUoWzw0AQUHC88SIVZOJkE8IwIVAzdcMlEaCj89CAoECB4BrgcdBys3RWIzFjlXQSxAGg87JRAPPgGjBhsILTdEYDQWCDtYQyxCGA87IxEAAAAFAAAA8gSBDmMAVABwAIcAngC2AAABFhcVFAYHBiMiJyY9ATY1NCcuBCcRFA4CIyImNTQ+AjMyFxE2MzIWFx4EFx4DFxYVFAcWFxYVFAcWFxYVFAcWFxYVFA4CFQYVFCc2NTQnLgMjDgEVHgMfARYXFjMyNjc+ARM0NjU0Jy4DIx4EFx4CFz4BEzQ2NTQnLgMjMhUeBBceAhcTNDY1NCcuAyMeBBceAxc+AQRLLgcJBBcRCQUZEkAhRz9IOyNWhKVMYH5IeatcZz0KDAsdAgolNTJJGDs8NxkJAiUYCwIqHQsCKBsLBQ4PEAMcAjMZO0tbLwYUDzQvUxcKMyoDDAcOAwIFBQUeKVhaUi0JIjIuRhcONiENBBIDBR4pWFlULwMJIjIsSBcNNx8MHAUeKVlaUy4LIzMuRRcLLRYcCwUQBaJsejo9fAoeAg0kD2dHm39CYDkkDgL7uEaPaUJpWEmMakE2C00YGQ86WUEuPxs/Rk9GLhQpYm0zPhImZ300RxInbms0QjIVKFs8NAEFBwvPEiFWTiZBPCMCFQM3XDJRGgo/PQgKBAgeAa4HHQcrN0ViMxY5V0EsQBoPOyUQDz4BowYbCC03RGA0Fgg7WEMsQhgPOyMRAeIHHQgsOERgMxY2VD0sPRoMMRgiDhQ6AAAABgAAAPIEiA+xAF8AfQCMAJsArwDDAAABFhUUBxYXFhUUDgEHHQEWFxQWFRQGBwYjIicuATU0NzY1NCcuBCcRFA4CIyImNTQ+AjMyFxE0NjMyHgIVHgQfAR4DFxYVFAcWFxYVFAcWFxYVFAcWAzY1NCcuAysBIgYVHgMXFhcWMzI2Nz4DEzY1NCcmJx4DFxYXNhM2NTQnJiMeBB8BNhE2NTQnLgMjHgQfAT4CEzY1NCcuAyMeBB8BPgIEgAgkDgMJGREHMAkCCwgOFwoGDBACEj0hSEBKOyRWhKVMYH5IeatcZz0ZBQgHCwULJTkwUBgiMy41GAYGJRkGBiUaBQYlGUwFOBg6SVYrDQoNDTIuVxg0MAcKCA4CAwMCAQEIHovSDjgzWxtOJwsECB6N0AwkMy5HF3AUCB4pWlpTLQwkMy5HF3ADCQcBCB4pWlpTLQwkMy5HF3ADCgYIWB4kXXUrJighNXszEgoTaX0IKApFeQgkBgIaEQsIa0OWhkRkOyUNA/u8Ro9pQmlYSYxqQTYMoQcLAQYQDTlcSTFJGSc2N0pBKBQqZ3UzMRQraXQ1LhQtanAz/esaElZTJUM8JBEKOFsyVhs4TggKBQUOCxEBgxMYKjfsBTlbL00cVjQgAZYXFyo38TJQQS9EGX5LAYITGSo0RmM0FjFRQS9EGX4MIxkBhRcYKzNHYjQWMlBBL0QZfQoiGAAAAAAHAAAA8gSLERsAZgCBAI8AngCtALwAywAAARYXFRQGBwYjIicuATU0NzY1NCcuBCcRFA4CIyImNTQ+AjMyFxE0Nj8BMh4CFx4EHwEeBBcWFRQHFhcWFRQHFhcWFRQHFhcWFRQHFhcWFRQHFhcWFRQHIhUUFic2NTQnLgErASIGFR4EFxYXFjI2Nz4CEzY1NCcmJx4DFxYXEzY1NCcmIx4DFxYXNhM2NTQnJiMeAxcWFzYTNjU0JyYjHgMXFhc2EzY1NCcmIx4DFxYXNgRSMQcJBRMUCQoKDwMOPyFIQEs6JFaEpUxgfkh5q1xnPQ8HCAkHDAUBCiY4M0oZICsoNRgWBgQmGAoEJhcLBCYXCwQmFwsEJBAGBC4CAh8FODWYUQ0LDQsgLypCFkYhBw8PAQQEAwIFHpDNDjc0WBxRKQ8FHo7PDzgzWRpPIRIHBR6Ozw84M1oZUR8SBwUejs8PODNaGVgYEAkFHo7PDzgzWhlLJRQFh215PEN6ByUGARsSCgVcVZyARGU6JA0D+89Gj2lCaVhJjGpBNg4MBgkBAgEGDw05W0czRholLitCLTwhJBVggjMyIxVkfDE2IxhcgjA0IxVlfDE2IxdKji4kFjRriwoDC9sZEFlQUnYQCi5JPCtAGE82BwkGBhAWAYIPHyo46wU6WjBMHlYyAbYOIC0y8zxmOVodVCc0AZkNHi0y9D1mOFkcVig0AZoPHywy9D1mN1kdYR0uAaAMHyc39D1lOFkcUC4+AAAACAAAAQsEixI2AHEAjwCdAK4AvADMANoA6wAAARQWFRQGBwYjIicuATU0NzY1NCcuBCcRFA4CIyImNTQ+AjMyFxE0Nj8BMh4CFx4EHwEeBRcWFRQHFhcWFRQHFhcWFRQHFhcWFRQHFhcWFRQHFhcWFRQHFhcWFRQOAQcGFRQWFRYDNjU0Jy4CKwEiBhUeBBcWFxYzMjY1PgMRNjU0JyYnHgMXFhcTNjU0JyYjHgQXHgEXNhM2NTQnJiMeBB8BEzY1NCcmIx4EFxYXNhM2NTQnJiMeBB8BEzY1NCcmIx4EFx4BFzYEiAIMBhIUCwULEQMPPSJJQEo6I1aEpUxgfkh5ql1iQg8HCAkICwUBCiY4M0sYHiccNhQdDQQFJxsHBScbBwUnGwcFJxsHBScbBwUkEQMIGBEHAwMwUAY5IlFzOA0IDQogLipCFj4oCAoHDgQEAgIIHo3SDTg1WRxGMg4IHpDPDCUzLkYXDlASBBIIHpDPDCUzLkYXcBYIHpLNDCUzLkYXIU8CFAgekM8MJTMvRRdwFgggjdAMJTMvRRcKVBIKBDgIKAtAfQgkBAIcEQoHWFeefkRlOiQNA/xSRo9pQmhYSo1qQTYPCgYJAgIBBhANOlxHM0YbICsfQCAzLhwoE1+CMDcjFWJ8MDcoE2N8MDcjFV+CMDQjFWV8MDQoFl15NR4nIDZ7NBEDBwUMAWkBRRkTVlA0VkAQDC1IPCtBGUJDBwkGBQ4KEwGAExkrNuwEOVowSxxOPQG1FxgoN/QyUUEwQxoQWRQMAcISGCo48TJRQC9DGX8BzRYYJzfzMVFAL0IZJVwGAccXGCU39TFRQDBDGn4BzRMZJjzwMlFAMEMaDFsVHAAAAQB9AXQBoQKcAAkAABM0NjIWFRQGIiZ9V3ZWVnVYAgc7Wlo7OllZAAIAPgB9Ai4GxwAUACQAABM+AjMyFhcWHwEUBw4DDwERMxMiBgcRNjc2NTQ2NTQmLwFwMzRULi8zJTkLCnEMNhsvF9wysDlJLm1FUAIMDxQDRhkWFA0UHkA/Yn0NOx4uFsUGSvx1Iif+G2xmelgNIgMaIBEHAAAAAAIAPv7FAccFoAAIAAwAADcRMxElMBEjES0BEQU+LgFbK/7QATD+0FwFRP4iOPrLAdGiKwG4LwAAAgA+/uMCKwWqABsAHwAAAREzETcVBxE3FQcRIxEHESMRBzU3EQc1NxEzERURNxEBkitubm5uK74qbGxsbCq+BAQBpv5mI+Mk/mQe5CD+fAF4OP59AXUh4SMBoSLmIAGm/mnm/l82AaQAAAAAAQAtANwC5gNmABsAABMzFRczNzUzFSMHFRczFSM1JyMHFSM1Mzc1JyMuyCnVKcifRESfyybYJsiiRkudA2aSLiuVw0xmV72UKSmUwlJmTwADAD4AfQQIBsgADgA2AEUAAAEiBgcRNjc2NTY1NCYvASUyFxEzET4CMzIWFxYfARQHDgMPAREOBAcGDwERMxE+AgciBgcRNjc2NTY1NCYvAQL6OEotbEVQAwwPFP44lSwyMzNULy4zJTkLCnANNhsuF9wJHCodNAcgONwyMzNUCzhKLWxGUAIMEBQDPCEn/hptZXpYFxsaIBIHU2cDpfx+GRcUDRQfQD5jfA08HS8VxQHxFC00IjoIJyzFBkr8fhkXFE4hJ/4abWV6WBcbGiASBwAAAAL/T/2mBK8DswAxAEYAABMjNhI3MhcWFT8BNjMyFhcUDgEHDgEjIicuAScDBxYXMxUhNTMyNzY3ATUvASIGDwIlBgcGFRQzMjY3Njc+ATc0JicmIyJTU3fRqSAhJFZaQUSCngQWMitMu2UvSB0yFskLDh1z/ZJLFh0VCwGsChYvVignJAJDQSckT0RXIDYEGRYDDg8cSEwBvucBCgQvJD0yLxnJsUt7VjZhbCQSJCD9xw4kBGhoEhYdBKcWJAtXRD1ItHCUoj2BMi9aCz3CKygyGjIAAf9h/78GBQOwAE4AAAEyFh0BAxQXMjc2NzYxNzMHBgcGByIvASY1NhI3NCYnIgcDIQE0IyIHBgcDIwE1NC4CJyIDBgcjNjc2MzIWFzY3NjMyFhc+BwS9PF/jKy0xIBpIMlNXH39GYFxUOhIppRwbG1hG5v8AARU9MxwbLef4ARUEEgUQYI4bME9zc3CsNjwJXkQ7UTY/CQQ0EDIaMSUxA69HNxn9bUYFNiQZfpPiUn9GBjM2KhN/ActTFBkCov1xAwIvJyZV/XEC9A4NERADCf75MGfslZBSQVQfIFNAAikMIw4YCgkAAAH9/fzdBEoGOABNAAABBhYXMjc+AT8BEyM1MzY3Njc+ATMyFhcWHwEUBgcGBw4BJy4BJzQ2NzY3NCcmBgcOAQchFSECAwIHBgcGIyInJjU0Nz4BMzIeARUUDgH+uAoHJGVEJEgSMp/R/CgZJyhw9JQyQSQZCA4OIQ4zFTMkIB0HMjYaGUFIZTYZSA4BFf7OQXdhWkhMhYyFRTYrGkgkLjoWMzL9fA8VBJRLw1rbAu2JbzphPaKtFS8kITlPSEEhKxIHBAdBJ0FlJBISLwoISHdB/DaQ/o3+jf7WrY1Wm2lScFpTJyxXSBkySFAAAf+4AAADKgOlADoAAAEiJjU/ATQjIg8BBgIHIxM1NCMiDgQHBgcnPgg3PgMzMhUOAQc+BDMyFhUUArolLQMLHUlAOS2JCdjNHQ0XDhUIGQQpMTIEBwsHEAYTBhYDITdSVypPAgQBFSE3M0YkOVcCcjovJywZcHNz/iobAroSOgYGFAgfBTJPHQgREQwTCRUGGQIhMTsgZQwzDCAtPSUaVzmiAAABAAAAAAK7A8wAPgAAJTI2NzQnJicmJyYnND4BMxcWFxYVDwEGByInNzQmJyYGBxQXFhcWFxYdARQHBgciLgE1PwMyFRQGBxQWMwEkOFIGHRIzdzIxBVaOVWU0I1IDFhMqWBAONSExRQgnQR2YBitoYnpVkVoEEiQuVxoDMyB3RzMnKB4jR0JBWleJRwsRHjFpJCQgBFZEGSIGCE86KCgyGX0TNlckcFI9CzpwRzYvIA9wGz0NFSQAAf9+/8YDqAOBACkAAAEyFhUUBwYjIi8CJiMiByM1AQcOAwcjEyEVATYzMhYXPgE1Iic0NgJvNkRWULdEHSs+TRsuPnAC8ecdLigVFlZsAqj9CEdGHb0JGBpECz4BnmZHeldaDxUkJDI6An0EBBEkFxwBOXP9tSFGAgIkHlMuPgAB/3P/vwRnA7AAQgAAAz4BPwE+Azc+ATMyFhc+BzMyFh0BAxQXMjc2NzYxNzMHBgcGByIvASY1NhI3NCYnIgcDIQE0IyIHBgOMBEgKlBUeCQ8PHnEoNj8JBDQQMhoxJTEXPF/jKy0xIBpIMlNXH39GYFxUOhIppRwbG1hG5v8AARU9MxwQtgGeBIkO/BMgCwsGEBtTQAIpDCMOGAoJRzcZ/W1GBTYkGX6T4lJ/RgYzNioTfwHLUxQZAqL9cQMCLycX/qsAB/9P/aYZxwOzABkBNwFRAWsBhQGfAbkAAAE0JiMiBwYHBhUUMzI2Nz4HNz4BAyImJwMHFhczFSE1MzI3NjcBNS8BIg4CDwEGBw4BBwYjIiYnAwcWFzMVITUzMjc2NwE1LwEiDgIPAQYHDgEHBiMiJicDBxYXMxUhNTMyNzY3ATUvASIOAg8BBgcOAQcGIyImJwMHFhczFSE1MzI3NjcBNS8BIg4CDwEGBw4BBwYjIiYnAwcWFzMVITUzMjc2NwE1LwEiDgIPAQYHDgEHBiMiJicDBxYXMxUhNTMyNzY3ATUvASIOAg8BDgEHIzY3NjcyFhU/ATYzMhYXNjc2NzIWFT8BNjMyFhc2NzY3MhYVPwE2MzIWFzY3NjcyFhU/ATYzMhYXNjc2NzIWFT8BNjMyFhc2NzY3MhYVPwE2MzIeAhcUBgcGATQmIyIHBgcGFRQzMjY3Pgc3PgElNCYjIgcGBwYVFDMyNjc+Bzc+ASU0JiMiBwYHBhUUMzI2Nz4HNz4BJTQmIyIHBgcGFRQzMjY3Pgc3PgElNCYjIgcGBwYVFDMyNjc+Bzc+ARjHP0JNHEQkJE9EViEIIAcUBAsDBgMECN05gyDJCw8cc/2SSxUeFAwBrAoWHTYsHBInER8CNjqjyTmDIMkLDxxz/ZJLFR4UDAGsChYdNiwcEicRHwI2OqPJOYMgyQsPHHP9kksVHhQMAawKFh02LBwSJxEfAjY6o8k5gyDJCw8cc/2SSxUeFAwBrAoWHTYsHBInER8CNjqjyTmDIMkLDxxz/ZJLFR4UDAGsChYdNiwcEicRHwI2OqPJOYMgyQsPHHP9kksVHhQMAawKFh02LBwSJxE4ClNtcmSuJEFWWjxJdZAWODlkriRBVlo8SXWQFjg5ZK4kQVZaPEl1kBY4OWSuJEFWWjxJdZAWODlkriRBVlo8SXWQFjg5ZK4kQVZaPElHcEYlAjU+o/veP0JNHEQkJE9EViEIIAcUBAsDBgMECPvKP0JNHEQkJE9EViEIIAcUBAsDBgMECPvKP0JNHEQkJE9EViEIIAcUBAsDBgMECPvKP0JNHEQkJE9EViEIIAcUBAsDBgMECPvKP0JNHEQkJE9EViEIIAcUBAsDBgMECAJgTFoyeIyaRYExMA0zDiMQHx8nHSJd/bFMLv3HDiIGaGgSFR4EpxYkCxw1Kx89IEBqhUjNTC79xw4iBmhoEhUeBKcWJAscNSsfPSBAaoVIzUwu/ccOIgZoaBIVHgSnFiQLHDUrHz0gQGqFSM1MLv3HDiIGaGgSFR4EpxYkCxw1Kx89IEBqhUjNTC79xw4iBmhoEhUeBKcWJAscNSsfPSBAaoVIzUwu/ccOIgZoaBIVHgSnFiQLHDUrHz0fdxTWloMGYDAyLxmbf1xLgwZgMDIvGZt/XEuDBmAwMi8Zm39cS4MGYDAyLxmbf1xLgwZgMDIvGZt/XEuDBmAwMi8ZPGiHT3eOTc0CXExaMniMmkWBMTANMw4jEB8fJx0iXQ1MWjJ4jJpFgTEwDTMOIxAfHycdIl0NTFoyeIyaRYExMA0zDiMQHx8nHSJdDUxaMniMmkWBMTANMw4jEB8fJx0iXQ1MWjJ4jJpFgTEwDTMOIxAfHycdIl0AAAb/T/2mFY8DswAZAQgBIgE8AVYBcAAAATQmIyIHBgcGFRQzMjY3Pgc3PgEDIiYnAwcWFzMVITUzMjc2NwE1LwEiDgIPAQYHDgEHBiMiJicDBxYXMxUhNTMyNzY3ATUvASIOAg8BBgcOAQcGIyImJwMHFhczFSE1MzI3NjcBNS8BIg4CDwEGBw4BBwYjIiYnAwcWFzMVITUzMjc2NwE1LwEiDgIPAQYHDgEHBiMiJicDBxYXMxUhNTMyNzY3ATUvASIOAg8BDgEHIzY3NjcyFhU/ATYzMhYXNjc2NzIWFT8BNjMyFhc2NzY3MhYVPwE2MzIWFzY3NjcyFhU/ATYzMhYXNjc2NzIWFT8BNjMyHgIXFAYHBgE0JiMiBwYHBhUUMzI2Nz4HNz4BJTQmIyIHBgcGFRQzMjY3Pgc3PgElNCYjIgcGBwYVFDMyNjc+Bzc+ASU0JiMiBwYHBhUUMzI2Nz4HNz4BFI8/Qk0cRCQkT0RWIQggBxQECwMGAwQI3TmDIMkLDxxz/ZJLFR4UDAGsChYdNiwcEicRHwI2OqPJOYMgyQsPHHP9kksVHhQMAawKFh02LBwSJxEfAjY6o8k5gyDJCw8cc/2SSxUeFAwBrAoWHTYsHBInER8CNjqjyTmDIMkLDxxz/ZJLFR4UDAGsChYdNiwcEicRHwI2OqPJOYMgyQsPHHP9kksVHhQMAawKFh02LBwSJxE4ClNtcmSuJEFWWjxJdZAWODlkriRBVlo8SXWQFjg5ZK4kQVZaPEl1kBY4OWSuJEFWWjxJdZAWODlkriRBVlo8SUdwRiUCNT6j+94/Qk0cRCQkT0RWIQggBxQECwMGAwQI+8o/Qk0cRCQkT0RWIQggBxQECwMGAwQI+8o/Qk0cRCQkT0RWIQggBxQECwMGAwQI+8o/Qk0cRCQkT0RWIQggBxQECwMGAwQIAmBMWjJ4jJpFgTEwDTMOIxAfHycdIl39sUwu/ccOIgZoaBIVHgSnFiQLHDUrHz0gQGqFSM1MLv3HDiIGaGgSFR4EpxYkCxw1Kx89IEBqhUjNTC79xw4iBmhoEhUeBKcWJAscNSsfPSBAaoVIzUwu/ccOIgZoaBIVHgSnFiQLHDUrHz0gQGqFSM1MLv3HDiIGaGgSFR4EpxYkCxw1Kx89H3cU1paDBmAwMi8Zm39cS4MGYDAyLxmbf1xLgwZgMDIvGZt/XEuDBmAwMi8Zm39cS4MGYDAyLxk8aIdPd45NzQJcTFoyeIyaRYExMA0zDiMQHx8nHSJdDUxaMniMmkWBMTANMw4jEB8fJx0iXQ1MWjJ4jJpFgTEwDTMOIxAfHycdIl0NTFoyeIyaRYExMA0zDiMQHx8nHSJdAAAAAAX/T/2mEVcDswAZANkA8wENAScAAAE0JiMiBwYHBhUUMzI2Nz4HNz4BAyImJwMHFhczFSE1MzI3NjcBNS8BIg4CDwEGBw4BBwYjIiYnAwcWFzMVITUzMjc2NwE1LwEiDgIPAQYHDgEHBiMiJicDBxYXMxUhNTMyNzY3ATUvASIOAg8BBgcOAQcGIyImJwMHFhczFSE1MzI3NjcBNS8BIg4CDwEOAQcjNjc2NzIWFT8BNjMyFhc2NzY3MhYVPwE2MzIWFzY3NjcyFhU/ATYzMhYXNjc2NzIWFT8BNjMyHgIXFAYHBgE0JiMiBwYHBhUUMzI2Nz4HNz4BJTQmIyIHBgcGFRQzMjY3Pgc3PgElNCYjIgcGBwYVFDMyNjc+Bzc+ARBXP0JNHEQkJE9EViEIIAcUBAsDBgMECN05gyDJCw8cc/2SSxUeFAwBrAoWHTYsHBInER8CNjqjyTmDIMkLDxxz/ZJLFR4UDAGsChYdNiwcEicRHwI2OqPJOYMgyQsPHHP9kksVHhQMAawKFh02LBwSJxEfAjY6o8k5gyDJCw8cc/2SSxUeFAwBrAoWHTYsHBInETgKU21yZK4kQVZaPEl1kBY4OWSuJEFWWjxJdZAWODlkriRBVlo8SXWQFjg5ZK4kQVZaPElHcEYlAjU+o/veP0JNHEQkJE9EViEIIAcUBAsDBgMECPvKP0JNHEQkJE9EViEIIAcUBAsDBgMECPvKP0JNHEQkJE9EViEIIAcUBAsDBgMECAJgTFoyeIyaRYExMA0zDiMQHx8nHSJd/bFMLv3HDiIGaGgSFR4EpxYkCxw1Kx89IEBqhUjNTC79xw4iBmhoEhUeBKcWJAscNSsfPSBAaoVIzUwu/ccOIgZoaBIVHgSnFiQLHDUrHz0gQGqFSM1MLv3HDiIGaGgSFR4EpxYkCxw1Kx89H3cU1paDBmAwMi8Zm39cS4MGYDAyLxmbf1xLgwZgMDIvGZt/XEuDBmAwMi8ZPGiHT3eOTc0CXExaMniMmkWBMTANMw4jEB8fJx0iXQ1MWjJ4jJpFgTEwDTMOIxAfHycdIl0NTFoyeIyaRYExMA0zDiMQHx8nHSJdAAAE/0/9pg0fA7MAGQCqAMQA3gAAATQmIyIHBgcGFRQzMjY3Pgc3PgEDIiYnAwcWFzMVITUzMjc2NwE1LwEiDgIPAQ4BByM2NzY3MhYVPwE2MzIWFzY3NjcyFhU/ATYzMhYXNjc2NzIWFT8BNjMyHgIXFAYHBiMiJicDBxYXMxUhNTMyNzY3ATUvASIOAg8BBgcOAQcGIyImJwMHFhczFSE1MzI3NjcBNS8BIg4CDwEGBw4BBwYBPgE3NCYjIgcGBwYVFDMyNjc+ByU+ATc0JiMiBwYHBhUUMzI2Nz4HA68/Qk0cRCQkT0RWIQggBxQECwMGAwQI3TmDIMkLDxxz/ZJLFR4UDAGsChYdNiwcEicROApTbXJkriRBVlo8SXWQFjg5ZK4kQVZaPEl1kBY4OWSuJEFWWjxJR3BGJQI1PqPJOYMgyQsPHHP9kksVHhQMAawKFh02LBwSJxEfAjY6o8k5gyDJCw8cc/2SSxUeFAwBrAoWHTYsHBInER8CNjqjCHgECAI/Qk0cRCQkT0RWIQggBxQECwMG+8sECAI/Qk0cRCQkT0RWIQggBxQECwMGAmBMWjJ4jJpFgTEwDTMOIxAfHycdIl39sUwu/ccOIgZoaBIVHgSnFiQLHDUrHz0fdxTWloMGYDAyLxmbf1xLgwZgMDIvGZt/XEuDBmAwMi8ZPGiHT3eOTc1MLv3HDiIGaGgSFR4EpxYkCxw1Kx89IEBqhUjNTC79xw4iBmhoEhUeBKcWJAscNSsfPSBAaoVIzQHQIl0NTFoyeIyaRYExMA0zDiMQHx8nHSJdDUxaMniMmkWBMTANMw4jEB8fJwAAAAAD/0/9pgjnA7MAFAApAI8AAAEGBwYVFDMyNjc2Nz4BNzQmJyYjIgUGBwYVFDMyNjc2Nz4BNzQmJyYjIgEjNhI3MhcWFT8BNjMyFxYXNjc2NzIXFhU/ATYzMhYXFA4BBw4BIyInLgEnAwcWFzMVITUzMjc2NwE1LwEiBg8DBgcOAQcOASMiJy4BJwMHFhczFSE1MzI3NjcBNS8BIgYPAgb9QSckT0RXIDYEGRYDDg8cSEz7q0EnJE9EVyA2BBkWAw4PHEhM/XFTd9GpICEkVlpBRIJPOBI7NmmpICEkVlpBRIKeBBYyK0y7ZS9IHTIWyQsOHXP9kksWHRULAawKFi9WKCckDAEJCzIrTLtlL0gdMhbJCw4dc/2SSxYdFQsBrAoWL1YoJyQC1HCUoj2BMi9aCz3CKygyGjIycJSiPYEyL1oLPcIrKDIaMv645wEKBC8kPTIvGWVHbWBGhQQvJD0yLxnJsUt7VjZhbCQSJCD9xw4kBGhoEhYdBKcWJAtXRD1IGDszPVY2YWwkEiQg/ccOJARoaBIWHQSnFiQLV0Q9SAAAAAAC/2H9pgphA7MAfwCYAAAlIiYnAwcWFzMVITUzMjc2NwE1LwEiDgIPAgYDBgcGByIvASY1NhI3NCYnIgcDIQE0IyIHBgcDIwE1NC4CJyIDBgcjNjc2MzIWFzY3NjMyFhc+BzMyFh0BAxQXMjc2NzYxNz4BNzY3MhYVPwE2MzIeAhcUBgcGEzQmIyIHBgcGFRQzMjY3Pgc3NgiCOYQfyQsOHXP9kksWHRULAawKFh00LhsTJyQcaiJ8RmBcVDoSKaUcGxtYRub/AAEVPTMcGy3n+AEVBBIFEGCOGzBPc3NwrDY8CV5EO1E2PwkENBAyGjElMRc8X+MrLTEgGkhhNz47aakkQVZaQURHcEYlAjY9oBM/QkwdQSckT0RWIQchBhQDDAQGAwsETS39xw4kBGhoEhYdBKcWJAscNyggPUhC/v5VfEYGMzYqE38By1MUGQKi/XEDAi8nJlX9cQL0Dg0REAMJ/vkwZ+yVkFJBVB8gU0ACKQwjDhgKCUc3Gf1tRgU2JBl+6mpfTIUEYS8yLxk8aYZPdo9NzQJcTFoycJSiPYExMAs2CyUPIB4oHWEAAAAC/2H83Qn8BjgAVQClAAAFMh4BFRQOAgcGBwYWFzI+BTc2NzY3NhoBNyM1Mz4CNz4BMzIWHwEUBgcOAQcGJy4BJzQ/ATQnJgYHBgIHIRUhCgEHDgQjIiY1ND4CEzIWHQEDFBcyNzY3NjEBCwEOAQcGByIvASY1NhI3NCYnIgcDIQE0IyIHBgcDIwE1NC4CJyIDBgcjNjc2MzIWFzY3NjMyFhc+BwRgJDweERIjBhkPDRAeGTElJxogEA0DASQSIUZTF9H8HyA0HXD0lExdDw4OIQtEIBokHh4IaDNBSGU2EE0SARX+zjfNbxw8VFdsNnaKFilGiTxf4ystMSAaSAEDSI0aXiZGYFxUOhIppRwbG1hG5v8AARU9MxwbLef4ARUEEgUQYI4bME9zc3CsNjwJXkQ7UTY/CQQ0EDIaMSUx+D9TJhkyHTAKKAoUEQMXIDktSyklBwNiWo0BQwGMbIlWVXAsoq1GQzlYPkIZRAQEBAY7LoRGJC8KCEh3K/79RZD+yP1Q1TdiaUsxqoEtV00vBKdHNxn9bUYFNiQZfgHt/sr++jF6JkYGMzYqE38By1MUGQKi/XEDAi8nJlX9cQL0Dg0REAMJ/vkwZ+yVkFJBVB8gU0ACKQwjDhgKCQAAAAAD/0/83Qj5BjgAVQCGAJ8AAAUyHgEVFA4CBwYHBhYXMj4FNzY3Njc2GgE3IzUzPgI3PgEzMhYfARQGBw4BBwYnLgEnND8BNCcmBgcGAgchFSEKAQcOBCMiJjU0PgInIiYnAwcWFzMVITUzMjc2NwE1LwEiDgIPAQYHIzYSNzIWFT8BNjMyHgIXFAYHBhM0JiMiBwYHBhUUMzI2Nz4HNzYDXCU8HRASIwYZDw0QHhkwJicZIQ8OAwEkEiFGUhjR/B4gNR1v9ZRMXQ4PDiELRCEZJB4eCGgzQUhlNhFMEwEW/s43zW8dPFRWbDZ2ihYpRmE5hB/JCw4dc/2SSxYdFQsBrAoWHTQuGxMnIDNTd9GpJEFWWkFER3BGJQI2PaATP0JMHUEnJE9EViEHIQYUAwwEBgML+D9TJhkyHTAKKAoUEQMXIDktSyklBwNiWo0BQwGMbIlWVW8toq1GQzlYPkIZRAQEBAY7LoRGJC8KCEh3K/79RZD+yP1Q1TdiaUsxqoEtV00v/E0t/ccOJARoaBIWHQSnFiQLHDcoID0+bOcBCgRhLzIvGTxphk92j03NAlxMWjJwlKI9gTEwCzYLJQ8gHigdYQAAAAAB/f383QfOBjgAgAAAARQGByInNDY3NjUnJiMiAyEVIQoBBwYHBg8BIi4BNTQ+AjcyFhUUBxQzMhM2ExI3IQoBBwIPASInJicmJz4HNzY3MhYXFA8CFDMyPgI/AhIbASM1MzYSNzYzMh4BFRQGByInNDc2NzY1LgEjIgIHIT4EMzIHzmFTYQtNOBIVGiTJcwEO/tUpylhTYVeMRUtuNBYvMic+S3MguG8OOlg1/bwnx2Sx20FzPR0ZDgEBBQEFAwcHCwckUzpHBBIyNiQiPjEfEjI2P1U9zfw4tIeFpjhSJmJWWgokJD0SFSEkd5crAk4ZUnuSv2eiBUpolRVzSnYfDwcgEv3Pif7//T21qXdzKAdYjFUzTDglFmxFT5sZAfQ4AQkBlvn++f1Xyf57NgdeIEVpDQgnDB4MGA4SCS8dbUQvJFJFGSE8NCOCvgEXAZkBIIm8AR1jWkVpP2qaDnM9SD4cDwcdFf6u2F20rYJPAAH9+fzdCr8GPwC8AAAFMhYXFAYPAQYHFDMyNzY3NhI3EyEGAgcGBwYPASIuATU0PgI3MhceARUUBxQzMhM2EjYSNyEGAgcCDwEiLgIvAT4BNzIWFRQPAhQzMjc+Az8BEhM2NyM1MzY3Njc2MzIWFRQGByInNDY3MjUnJiMiBwYHIT4EMzIXFAcGByInNDY3MjUuASMiAgMhEjc2MzIeARUUBgciJzQ2NzI1LgEjIgIDIRUhAgcCAwYHBg8BIicmNT4BBRs7QwMTDSQXGCRnRkkuGWEZQf4IKNFWVFVejEFMcDUWLzQpJA8mLHMhtnEbPCpCEf4FJNlSstpFLUk1JhESDkFWO04WMjIkOzEWKRgkCjZwRBULzfgtY1qJhaZVW2FTXQtONxIVHiN7S08kAgYaUHmRvmijDS4rW2ELTTkSCyggZaA4AgZRs6fzOlMjY1RWC0wyFQ4nIWWgOAES/s4qNGeHXlZYg0GnOBYLSvhkRhZEFTYhKxmXtKlwAbtvATb9/SWhr216JQdXjFY0TDclFg8PWzhLnxkB9HABD8QBPFHp/Rio/nw3Bx05QC12bmQgbkMtJlJFGTYTQjhcF74B/AFLXiuJop6UaFqGZ2mZEHNIfxgWIBKstclfs66AT+1lUz8bc0p1IBYbF/7m/ukBCNPCTG9BZpQQc0N/HRYaGP7m/umJ/vyw/lL+6bBsdSoHwzZAaG8AAf35/N0OAgY/AQ4AAAUyFhUUBxQzMhM2EjYSNyEGAgcCDwEiLgIvAT4BNzIWFRQPAhQzMjc+Az8BEhM2NyM1MzYSNzYzMhYVFAYHIic0NjcyNScmIyIHBgchPgQzMhcUBwYHIic0NjcyNS4BIyICAyESNzYzMh4BFRQGByInNDY3MjUuASMiAgMhPgI3PgEzMhYfARQGBw4BBwYuAic0PwE0Jg4BBwYHBgIHIRUhCgEHDgQjIiY1ND4CMzIeARUUDgIHDgMWFzI+BTc2NzY3NhoBNyECBwIDBgcGDwEiJyY1PgE3MhYXFAYPAQYHFDMyNzY3NhI3EyEGAgcGBwYPASIuATU0PgIB2z9GcyG2cRs8KkIR/gUk2VKy2kUtSTUmERIOQVY7ThYyMiQ7MRYpGCQKNnBEFQvN+DHBgYWmVVthU10LTjcSFR4je0tPJAIGGlB5kb5oow0uK1thC005EgsoIGWgOAIGUbOn8zpTI2NUVgtMMhUOJyFloDgCDh4gNR1v9ZRLXQ8PDiELRCEiLxwPBWgyLT4+EjI2EUwTARX+zjbObh08VFZsN3WKFSpGKyQ8HhERIwYGGA0HFBYaMCUoGSAQDgICJBIhRVMX/f4qNGeHXlZYg0GnOBYLSlE7QwMTDSQXGCRnRkkuGWEZQf4IKNFWVFVejEFMcDUWLzT4aUhLnxkB9HABD8QBPFHp/Rio/nw3Bx05QC12bmQgbkMtJlJFGTYTQjhcF74B/AFLXiuJsAEqYlqGZ2mZEHNIfxgWIBKstclfs66AT+1lUz8bc0p1IBYbF/7m/ukBCNPCTG9BZpQQc0N/HRYaGP7m/ulWVXAsoq1GQzlYPkIZRAQFCyIoH4RGJBweARAMJHcr/v1FkP7I/VDVN2JpSzGqgS1XTS8/UyYZMh0wCgkdEhQMAhcgOS1LKSUHA2JajQFDAYxs/vyw/lL+6bBsdSoHwzZAaG8bZEYWRBU2ISsZl7SpcAG7bwE2/f0loa9teiUHV4xWNEw3JQAAAAAB/fn83RFMBj8BYgAAARQWMzI+Azc2EhMhNSE2Ejc+ARcWFQYHBhUeAzc+ATc+ATUnLgEnJiMiBw4BBwYHIRI3Njc+AhYVBwYVHgM3PgE3PgE1Jy4BIyIGBw4CByEaATMyFhcUIw4BFRYzPgE1NC4BIyIHBgMhGgEzMhYXFCMOARUWMzY3NjUmIyIOAwchNjc2MzIfARQjDgEVFjM+ATU0JiMiBwYCByMVMwYHAgMHDgMHBiMiNT8BNjU0JiMOAQcXHgMzNzYTNhI3IQYCBgIHAiMiNTY1NCYnJiMOAxUUHgEzNzY3Njc2EjchAwYCBwYHBiMiNTY/AT4BNS4BIw4BBxQXFjM3PgY3NjcSEzYTIQYKAQcGBwYHDgYjLgE+Ajc+AzU0LgEjIg4CFRQWMzI+Azc2EhMhAwcOAQcGIy4BPgI3PgM1NC4BIyIOAgr/inY2bFdUPBxuzjcBMv7rEk0QNmVIQRkaaAYOHC8jIEQLIQ4OCEEcITKUemClNBko/etNIzYyEj4+LTJoBQ8cLyIhRAshDg8PXUuU9W8dNSAe/fI4oGUhJw4VMkwLVlRjI1M686ezUf36OKBlICgLEjlNC2FbKy4No2i+kXlQGv36JE9LeyMeFRI3TgtdU2FbVaaFgcEx+M0LFURwNgokGCkWMTskMjIWTjtWQQ4SESY1SS1F2rJS2SQB+xFCKjwbcbYhcywmDyQpNC8WNXBMQYxeVVRW0SgB+EEZYRkuSUZnJBgXJA0TA0M7UUoLFjinQSlNO0AqOB0bAwGHZzQqAgIXU0UhEiQCAg4QIBkoJTAaFhQHDRgGBiMRER48JCtGKhWKdTdsVlQ8HW7ONgIHnzIRRidEZRcTBg0YBgYjEhEePCQsRikW/giBqjFLaWI31AKyATeQRQEDK3dICAovEhJGhB8nIwsFBEQZQj5YOSVQCQtWRNOAOm8BIlh3JAwQAR4cJEaEHycjCwUERBlCPlg5Q0atoixwVVYBFwEaGBoWHX9DcxCUZkFvTMLT/vgBFwEaFxsWIHVKcxs/U2XtT4Cus1/JtawSIBYYf0hzEJlpZ4ZaYv7WsIkrXv61/gS+F1w4QhM2GUVSJi1DbiBkbnYtQDkdBzcBhKgC6OlR/sTE/vFw/gwZn0s4Ww8PFiU3TDRWjFcHJXptr6EC2/3+ym/+RXCptJcZKyE2FUQWRmQbb2hANsMHDS4wSzhfNDIGAgEXAa6wAQRs/nT+vY1aYgMHJSlLLTkgFwIMFBIdCQowHTIZJlM/L01XLYGqMUtpYjfVArABOP0T21PEUZQCDBQSHQkKMB0yGSZTPzBMVwAAAAL9/fzdFJAGPwBYAb4AAAUyHgEVFA4CBwYHBhYXMj4FNzY3Njc2GgE3IzUzPgI3PgEzMhYfARQGBw4BBwYmJzQ/ATQmDgEHDgYHBQchCgEHDgQjIiY1ND4CARQWMzI+Azc2EhMhNSE2Ejc2Nz4CFhUHBhUeAzc+ATc+ATUnLgEnJiMiBw4BBwYHIRI3Njc+AhYVBwYVHgM3PgE3PgE1Jy4BIyIGBw4CByEaATMyFhcUIw4BFRYzPgE1NC4BIyIHBgMhGgEzMhYXFCMOARUWMzY3NjUmIyIOAwchNjc2MzIfARQjDgEVFjM+ATU0JiMiBwYHDgEHIR8BBgcCAwcOAwcGIyI1PwE2NTQmIw4BBxceAzM3NhM2EjchBgIGAgcCIyI1NjU0JicmIw4DFRQeATM3Njc2NzYSNyEDBgIHBgcGIyI1Nj8BPgE1LgEjDgEHFBcWMzc+Bjc2NxITNhMhBgoBBwYHBgcOBiMuAT4CNz4DNTQuASMiDgIVFBYzMj4DNzYSEyEDBw4BBwYjLgE+Ajc+AzU0LgEjIg4C/q4kPB4REiMGGQ8NEB4ZMSUnGiAQDQMBJBIhRlMX0fwfIDQdcPSUTF0PDg4hC0QgQDYMaDMtPj4SFyolHSIRHwMBFxH+3TfNbxw8VFdsNnaKFilGD8CLdTZsV1Q8HG/ONgEy/usSTRA2MxI+Pi0yaQYOHC8jIEQLIQ4OCEAdIDOTe1+mNBko/etOIjYyEj89LjNoBQ8cLyIhRAshDg8OXUyU9W8dNSAe/fI5oGQhJw4VMU0LVlVjJFM686eyUf35OaBkIScLEjlMC2FbKi8Oo2i+kHlRGv36JE9MeiMeFRI3TgteUmJcVaaFiVkqOBz+4AnZChZEcDYKJBgpFjE7JDIzFU47VkEOEhIlNUkuRNqyU9gkAfsRQio8G3G2IXQsJw8kKTQvFjZvTUCMXlVVVdInAfhAGmEZLklGZyQYFyQNFANEO1FJDBY4p0EpTTtAKjkdGgMChmc0KgIDGFJGIRIkAQMODyEZJyYwGRcTBg0YBgYjEhAdPCUrRikWinY2bFZUPB1vzTcCBp4zEEcnRGUXEwYNGQUHIhIRHjwkLEYpFvg/UyYZMh0wCigKFBEDFyA5LUspJQcDYlqNAUMBjGyJVlVvLaKtRkM5WD5CGUQECjlAhEYkHB4BEAwQOFNGcjx4DgKH/sj9UNU3YmlLMaqBLVdNL/8AgaoxS2liN9QCsgE3kEUBAyt3JAwQAR4cJEaEHycjCwUERBlCPlg5JVAJC1ZE04A6bwEhWXckDBABHhwkRoQfJyMLBQREGUI+WDlDRq2iLHBVVgEXARoYGhYdf0NzEJRmQW9MwtP++AEXARoXGxYgdUpzGz9TZe1PgK6zX8m1rBIgFhh/SHMQmWlnhlpolEKVaYcCK17+tf4EvhdcOEITNhlFUiYtQ24gZG52LUA5HQc3AYSoAujpUf7ExP7xcP4MGZ9LOFsPDxYlN0w0VoxXByV6ba+hAtv9/spv/kVwqbSXGSshNhVEFkZkG29oQDbDBw0uMEs4XzQyBgIBFwGusAEEbP50/r2NWmIDByUpSy05IBcCDBQSHQkKMB0yGSZTPy9NVy2BqjFLaWI31QKwATj9E9tTxFGUAgwUEh0JCjAdMhkmUz8wTFcAA/39/N0H8gY4ADAASQCgAAAlIiYnAwcWFzMVITUzMjc2NwE1LwEiDgIPAQYHIzYSNzIWFT8BNjMyHgIXFAYHBhM0JiMiBwYHBhUUMzI2Nz4HNzYBMh4BFRQOAgcGBwYWFzI+BTc2NzY3NhoBNyM1Mz4CNz4BMzIWHwEUBgcOAQcGJy4BJzQ3Njc0JyYGBwYCByEVIQoBBw4EIyImNTQ+AgYTOYQeygsPHHT9kUsWHRULAa0LFh00LhsTJx80U3fRqSRBVlpBREdwRiUCNj2gEz9CTB1AKCRPRFYhByEGFAQLBAYDC/e/JDweERIjBhkPDRAeGTElJxogEA0DASQSIUZTF9H8HyA0HXD0lExdDw4OIQtEIBokHh4IaBoZQUhlNhBNEgEV/s43zW8cPFRXbDZ2ihYpRgRNLf3HDiQEaGgSFh0EpxYkCxw3KCA9PmznAQoEYS8yLxk8aYZPdo9NzQJcTFoycJSiPYExMAs2CyUPIB4oHWH80z9TJhkyHTAKKAoUEQMXIDktSyklBwNiWo0BQwGMbIlWVW8toq1GQzlYPkIZRAQEBAY7LoRGEhIvCghIdyv+/UWQ/sj9UNU3YmlLMaqBLVdNLwAAAAL9/fzdBuwGOAApAIAAAAEyFhUUBwYjIi8CJiMiByM1AQcOAwcjEyEVATYzMhYXPgE1Iic0NgEyHgEVFA4CBwYHBhYXMj4FNzY3Njc2GgE3IzUzPgI3PgEzMhYfARQGBw4BBwYnLgEnNDc2NzQnJgYHBgIHIRUhCgEHDgQjIiY1ND4CBbI3Q1ZPuEQdKz1OGy4+bwLw5h4tKRQXVmwCqP0JRkYdvQkYGkQLPvkqJDweERIjBhkPDRAeGTElJxogEA0DASQSIUZTF9H8HyA0HXD0lExdDw4OIQtEIBokHh4IaBoZQUhlNhBNEgEV/s43zW8cPFRXbDZ2ihYpRgGeZkd6V1oPFSQkMjoCfQQEESQXHAE5c/21IUYCAiQeUy4+/Wo/UyYZMh0wCigKFBEDFyA5LUspJQcDYlqNAUMBjGyJVlVvLaKtRkM5WD5CGUQEBAQGOy6ERhISLwoISHcr/v1FkP7I/VDVN2JpSzGqgS1XTS8AAAIAAPzdBwUGOABaAJgAAAUyHgEVFA4CBwYHBhYXMj4FNzY3Njc2GgE3IzUzPgI3PgEzMhYfARQGBw4BBwYmJzQ/ATQmDgEHDggHIRUhCgEHDgQjIiY1ND4CAzI2NzQmJyYnJic0PgEzFxYXFhUPAQYHIic3NCYnJgYHFBcWFxYXFh0BFAcGByIuATU/AzIVFAYHFBYzAWgkPB4REiIHGQ4NEB0aMCUoGSAQDgIBJBIiRVMX0fwfIDQdcPWTTF0PDg0hDEMhQDYMaTItPj4SESEfGRwSGgsYAwEV/s42zm8cPFRWbDd1ihUqRhk4UgYzL3cyMQVWjlVlNCNSAxYTKlgQDjUhMUUIJ0EdmAYraGJ6VZFaBBIkLlcaAzMg+D9TJhkyHTAKKAoUEQMXIDktSyklBwNiWo0BQwGMbIlWVW8toq1GQzlYPkIZRAQKOUCERiQcHgEQDA0nODRQNFsqWguQ/sj9UNU3YmlLMaqBLVdNLwFvRzMtQiFHQkFaV4lHCxEeMWkkJCAEVkQZIgYITzooKDIZfRM2VyRwUj0LOnBHNi8gD3AbPQ0VJAAABAAA/N0KtAY4ADAASQCkAOIAACUiJicDBxYXMxUhNTMyNzY3ATUvASIOAg8BBgcjNhI3MhYVPwE2MzIeAhcUBgcGEzQmIyIHBgcGFRQzMjY3Pgc3NgEyHgEVFA4CBwYHBhYXMj4FNzY3Njc2GgE3IzUzPgI3PgEzMhYfARQGBw4BBwYmJzQ/ATQmDgEHDggHIRUhCgEHDgQjIiY1ND4CAzI2NzQmJyYnJic0PgEzFxYXFhUPAQYHIic3NCYnJgYHFBcWFxYXFh0BFAcGByIuATU/AzIVFAYHFBYzCNU5hR7JCw4dc/2RTBYcFgsBrAsVHTUtHBIoHzNTd9CqJEBXWkFER3BGJQI2Pp8TP0NLHUEnJE9EViEHIAcUAwwDBgQK97gkPB4REiIHGQ4NEB0aMCUoGSAQDgIBJBIiRVMX0fwfIDQdcPWTTF0PDg0hDEMhQDYMaTItPj4SESEfGRwSGgsYAwEV/s42zm8cPFRWbDd1ihUqRhk4UgYzL3cyMQVWjlVlNCNSAxYTKlgQDjUhMUUIJ0EdmAYraGJ6VZFaBBIkLlcaAzMgBE0t/ccOJARoaBIWHQSnFiQLHDcoID0+bOcBCgRhLzIvGTxphk92j03NAlxMWjJwlKI9gTEwCzYLJQ8gHigdYfzTP1MmGTIdMAooChQRAxcgOS1LKSUHA2JajQFDAYxsiVZVby2irUZDOVg+QhlEBAo5QIRGJBweARAMDSc4NFA0WypaC5D+yP1Q1TdiaUsxqoEtV00vAW9HMy1CIUdCQVpXiUcLER4xaSQkIARWRBkiBghPOigoMhl9EzZXJHBSPQs6cEc2LyAPcBs9DRUkAAAFAAD83Q7sBjgAGQAzAJoA9gE0AAABNCYjIgcGBwYVFDMyNjc+Bzc+ASU0JiMiBwYHBhUUMzI2Nz4HNz4BAyImJwMHFhczFSE1MzI3NjcBNS8BIg4CDwEOAQcjNjc2NzIWFT8BNjMyFhc+BjcyFhU/ATYzMh4CFxQGBwYjIiYnAwcWFzMVITUzMjc2NwE1LwEiDgIPAQ4BBw4BBwYFMh4BFRQOAgcOBAcGFzI+BTc2NzY3NhI2EjcjNTM+ATc2NzYzMhYfARQGBw4BBwYuAic0PwE0Jg4BBw4HByEVIQoBBwIjIiY1ND4CAzI2NzQmJyYnJic0PgEzFxYXFhUPAQYHIic3NCYnJgYHFBcWFxYXFh0BFAcGByIuATU/AzIVFAYHFBYzDew/Q0wcRCQkT0RWIQggBxQECwMGAwMJ+8o/Q0wcRCQkT0RWIQggBxQECwMGAwMJ3TmDIMkLDh1z/ZFMFB4VDAGsCxUeNSwdESgQOApTbXJkriRAV1o8SXSUFBocNSg9O00qJEBXWjxJR3BGJQI2PqLJOYMgyQsOHXP9kUwUHhUMAawLFR41LB0RKAcgBwM1PKL3yiQ8HhETIQcECwcIBgMdPRowJScZIRANAwEnDxs7KUER0fwpPSp1dX2RS18ODg0hC0MiIi8cDwZpMi0+PhITJh0iFR8NGwQBFf7ONs5vx952iRUpRhg4UgY0LncyMQVWjlVlNCNSAxYTKlgQDjUhMUUIJ0EdmAYraGJ6VZFaBBIkLlcaAzMgAmBMWjJ4jJpFgTEwDTMOIxAfHycdIl0NTFoyeIyaRYExMA0zDiMQHx8nHSJd/bFMLv3HDiIGaGgSFR4EpxYkCxw1Kx89H3cU1paDBmEvMi8ZnnsqLUkqNBwUAWEvMi8ZPGiHT3eOTc1MLv3HDiIGaGgSFR4EpxYkCxw1Kx89ET0QbIJLzfw/UyYZMh4uCwYQCQsGAiIGFx86LEwoJgcDY1luAQzDATpRiXaRQKdSVkdCOVg+QhlEBAYLIigghEYkHR0BEAwOMzRUPGUxZg2Q/sf9T9P+gqqBLVhMLwFvRzMtRR5HQkFaV4lHCxEeMWkkJCAEVkQZIgYITzooKDIZfRM2VyRwUj0LOnBHNi8gD3AbPQ0VJAADAAD83QjOBjgALACHAMUAAAEyFhUUBwYjIi8CJiMiByM1AQcOAwcjEyEVATYzMgQXNicmJyYnIic0NgEyHgEVFA4CBwYHBhYXMj4FNzY3Njc2GgE3IzUzPgI3PgEzMhYfARQGBw4BBwYmJzQ/ATQmDgEHDggHIRUhCgEHDgQjIiY1ND4CAzI2NzQmJyYnJic0PgEzFxYXFhUPAQYHIic3NCYnJgYHFBcWFxYXFh0BFAcGByIuATU/AzIVFAYHFBYzB5U2RFZQt0UcLD1NGy89cALx5x4tKBUWV2wCqf0IRkcgAVRACQ0GFIABRAs++gEkPB4REiIHGQ4NEB0aMCUoGSAQDgIBJBIiRVMX0fwfIDQdcPWTTF0PDg0hDEMhQDYMaTItPj4SESEfGRwSGgsYAwEV/s42zm8cPFRWbDd1ihUqRhk4UgYzL3cyMQVWjlVlNCNSAxYTKlgQDjUhMUUIJ0EdmAYraGJ6VZFaBBIkLlcaAzMgAZ5mR3pXWg8VJCQyOgJ9BAQRJBccATlz/bUhOw0BBAEFIBlTLj79aj9TJhkyHTAKKAoUEQMXIDktSyklBwNiWo0BQwGMbIlWVW8toq1GQzlYPkIZRAQKOUCERiQcHgEQDA0nODRQNFsqWguQ/sj9UNU3YmlLMaqBLVdNLwFvRzMtQiFHQkFaV4lHCxEeMWkkJCAEVkQZIgYITzooKDIZfRM2VyRwUj0LOnBHNi8gD3AbPQ0VJAAABQAA/N0NfQY4ADAASQBzAM4BDAAAJSImJwMHFhczFSE1MzI3NjcBNS8BIg4CDwEGByM2EjcyFhU/ATYzMh4CFxQGBwYTNCYjIgcGBwYVFDMyNjc+Bzc2BTIWFRQHBiMiLwImIyIHIzUBBw4DByMTIRUBNjMyFhc+ATUiJzQ2ATIeARUUDgIHBgcGFhcyPgU3Njc2NzYaATcjNTM+Ajc+ATMyFh8BFAYHDgEHBiYnND8BNCYOAQcOCAchFSEKAQcOBCMiJjU0PgIDMjY3NCYnJicmJzQ+ATMXFhcWFQ8BBgciJzc0JicmBgcUFxYXFhcWHQEUBwYHIi4BNT8DMhUUBgcUFjMLnjmFHskLDh1z/ZFMFhwWCwGsCxUdNS0cEigfM1N30KokQFdaQURHcEYlAjY+nxM/Q0sdQSckT0RWIQcgBxQDDAMGBAr7HDZEVlC3RRwsPU0bLz1wAvHnHi0oFRZXbAKp/QhGRx29CBkaRAs++gEkPB4REiIHGQ4NEB0aMCUoGSAQDgIBJBIiRVMX0fwfIDQdcPWTTF0PDg0hDEMhQDYMaTItPj4SESEfGRwSGgsYAwEV/s42zm8cPFRWbDd1ihUqRhk4UgYzL3cyMQVWjlVlNCNSAxYTKlgQDjUhMUUIJ0EdmAYraGJ6VZFaBBIkLlcaAzMgBE0t/ccOJARoaBIWHQSnFiQLHDcoID0+bOcBCgRhLzIvGTxphk92j03NAlxMWjJwlKI9gTEwCzYLJQ8gHigdYZdmR3pXWg8VJCQyOgJ9BAQRJBccATlz/bUhRgICJB5TLj79aj9TJhkyHTAKKAoUEQMXIDktSyklBwNiWo0BQwGMbIlWVW8toq1GQzlYPkIZRAQKOUCERiQcHgEQDA0nODRQNFsqWguQ/sj9UNU3YmlLMaqBLVdNLwFvRzMtQiFHQkFaV4lHCxEeMWkkJCAEVkQZIgYITzooKDIZfRM2VyRwUj0LOnBHNi8gD3AbPQ0VJAAAAAQAAPzdDBgGOAApAH8A2gEYAAABMhYVFAcGIyIvAiYjIgcjNQEHDgMHIxMhFQE2MzIWFz4BNSInNDYBMh4BFRQOAgcGBwYWFzI+BTc2NzY3NhoBNyM1Mz4CNz4BMzIWHwEUBgcOAQcGJy4BJzQ/ATQnJgYHBgIHIRUhCgEHDgQjIiY1ND4CITIeARUUDgIHBgcGFhcyPgU3Njc2NzYaATcjNTM+Ajc+ATMyFh8BFAYHDgEHBiYnND8BNCYOAQcOCAchFSEKAQcOBCMiJjU0PgIDMjY3NCYnJicmJzQ+ATMXFhcWFQ8BBgciJzc0JicmBgcUFxYXFhcWHQEUBwYHIi4BNT8DMhUUBgcUFjMK3zZEVlC3RB0rPk0bLj5wAvHnHS4oFRZWbAKo/QhHRh29CRgaRAs++gElPB0QEiMGGQ8NEB4ZMCYnGSEPDgMBJBIhRlIY0fweIDUdb/WUTF0ODw4hC0QhGSQeHghoM0FIZTYRTBMBFv7ON81vHTxUVmw2dooWKUb84SQ8HhESIgcZDg0QHRowJSgZIBAOAgEkEiJFUxfR/B8gNB1w9ZNMXQ8ODSEMQyFANgxpMi0+PhIRIR8ZHBIaCxgDARX+zjbObxw8VFZsN3WKFSpGGThSBjMvdzIxBVaOVWU0I1IDFhMqWBAONSExRQgnQR2YBitoYnpVkVoEEiQuVxoDMyABnmZHeldaDxUkJDI6An0EBBEkFxwBOXP9tSFGAgIkHlMuPv1qP1MmGTIdMAooChQRAxcgOS1LKSUHA2JajQFDAYxsiVZVcCyirUZDOVg+QhlEBAQEBjsuhEYkLwoISHcr/v1FkP7I/VDVN2JpSzGqgS1XTS8/UyYZMh0wCigKFBEDFyA5LUspJQcDYlqNAUMBjGyJVlVvLaKtRkM5WD5CGUQECjlAhEYkHB4BEAwNJzg0UDRbKloLkP7I/VDVN2JpSzGqgS1XTS8Bb0czLUIhR0JBWleJRwsRHjFpJCQgBFZEGSIGCE86KCgyGX0TNlckcFI9CzpwRzYvIA9wGz0NFSQAAAAC/7j83Qd0BjgAVQCQAAAFMh4BFRQOAgcGBwYWFzI+BTc2NzY3NhoBNyM1Mz4CNz4BMzIWHwEUBgcOAQcGJy4BJzQ/ATQnJgYHBgIHIRUhCgEHDgQjIiY1ND4CASImNT8BNCMiDwEGAgcjEzU0IyIOBAcGByc+CDc+AzMyFQ4BBz4EMzIWFRQB2CQ8HhESIwYZDw0QHhkxJScaIBANAwEkEiFGUxfR/B8gNB1w9JRMXQ8ODiELRCAaJB4eCGgzQUhlNhBNEgEV/s43zW8cPFRXbDZ2ihYpRgEOJS0DCx1JQDktiQnYzR0NFw4VCBkEKTEyBAcLBxAGEwYWAyE3UlcqTwIEARUhNzNGJDlX+D9TJhkyHTAKKAoUEQMXIDktSyklBwNiWo0BQwGMbIlWVW8toq1GQzlYPkIZRAQEBAY7LoRGJC8KCEh3K/79RZD+yP1Q1TdiaUsxqoEtV00vA2o6LycsGXBzc/4qGwK6EjoGBhQIHwUyTx0IEREMEwkVBhkCITE7IGUMMwwgLT0lGlc5ogAAAAP/uPzdCT4GOAApAH8AugAAATIWFRQHBiMiLwImIyIHIzUBBw4DByMTJRUBNjMyFhc+ATUiJzQ2ATIeARUUDgIHBgcGFhcyPgU3Njc2NzYaATcjNTM+Ajc+ATMyFh8BFAYHDgEHBicuASc0PwE0JyYGBwYCByEVIQoBBw4EIyImNTQ+AgEiJjU/ATQjIg8BBgIHIxM1NCMiDgQHBgcnPgg3PgMzMhUOAQc+BDMyFhUUCAQ3Q1ZPuEQdKz1OGy4+bwLw5h4tKRQXVmwCqP0JRkYdvQkYGkQLPvoCJDweERIjBhkPDRAeGTElJxogEA0DASQSIUZTF9H8HyA0HXD0lExdDw4OIQtEIBokHh4IaDNBSGU2EE0SARX+zjfNbxw8VFdsNnaKFilGAQ4lLQMLHUlAOS2JCdjNHQ0XDhUIGQQpMTIEBwsHEAYTBhYDITdSVypPAgQBFSE3M0YkOVcBnmZHeldaDxUkJDI6An0EBBEkFxwBOQN2/bUhRgICJB5TLj79aj9TJhkyHTAKKAoUEQMXIDktSyklBwNiWo0BQwGMbIlWVW8toq1GQzlYPkIZRAQEBAY7LoRGJC8KCEh3K/79RZD+yP1Q1TdiaUsxqoEtV00vA2o6LycsGXBzc/4qGwK6EjoGBhQIHwUyTx0IEREMEwkVBhkCITE7IGUMMwwgLT0lGlc5ogAB/4P+ogJd/5wADQAABQ4BIyImJzMeATMyNjcCXSfLhYe5Ixciy2Nk0ChkdIaDd0ZSUkYAAf+D/qIDg/+cABEAAAUOAiMiLgEnMx4CMzI+ATcDgxms2Gtp0qcWFhe1x1FZyLMbZEt1Ojl2Sy9IISFILwAAAAH/g/6iBMv/nAARAAAFDgEEIyIkJiczHgEEMzIkNjcEyxrQ/t6gl/7k0hcWF+cBEHp5ARLtG2RLdDs6dEwvSCEhSC8AAgAw/+wD0AVhAA0AHQAAJBIRNCcCIAMGFRQXFjMBFhUUBwIhIicmERA3NiEyApxuIT7+rD8hIkCwAWJlPnX+4MV/iFt7AP/mJQFCATHzkQEO/uqU8uOI/gRKw/3HsP61s78BSAECuv0AAAAAAQDjAAADJQVeABYAAAAWFREUFhcVITU+ATURNCYjIgYHNSUzAmIBUnD9zHlKGCgaUyQBbwwFWQUJ+0xNKgQcHgY2WgOeMDIdEBy7AAEAPQAAA8sFZQAbAAA3CAE1NCYjIgcGByc+ATMyFhUUAgEhMjY3FwMhPQFuAQagb4lVLysrMu+JqdHi/oYBy2BOMRpv/OEXAXwBZKmUm2Q3cgnms9WapP7Q/nsuWQz+6QAAAAABAD3+7APLBWUAIwAANwgBNTQmIyIHBgcnPgEzMhYVFAIBIREzETY3NjcXAyMRIxEhPQFuAQagb4lVLysrMu+JqdHi/oYBtHoWDicxGm8nev2CFwF8AWSplJtkN3IJ5rPVmqT+0P57AU3+vAYIF1kM/un+7AEUAAABAFn/8AN3BWsALwAANhYzMjY1NCcmIyIGByc+ATU0JiMiBwYHJz4BMzIWFRQHBgcWFxYVFAAhIiY1NDYz1rU/jIg3Xd0NGBACoLiRXW5ULjUfKNqPmadFJ1JgOm3+1f7se2MhJa5yvW9rUYkBAho6lnttclEsXAeYtqhuYVEuOSk3aaG+/t5JKhowAAIAFwAAA8cFXgACAA0AAAkBIRMzETMVIxEjESE1AlX+FQHrQl/R0Z/9wASQ/UoDhPx8hf6rAVWFAAAAAAIAFwAABHgFXgASABUAAAEzETMRMxEzFSMRIxEjESMRITUJASECl1+qeV9feaqf/cACPv4VAesFXvx8AQD/AIX+/QED/qsBVYUCtv1KAAAAAQBA/+kDfwV/ACwAADYWMzI2NRAlJiMiJic+ATcTITI2NxcHDgEjIQcWFxYXHgEVFAAjIicmNTQ2M9K5MnOs/uyZhBYLCAIDAtoBrSAjHBBOBCQV/n1VpEx9VEhK/sXxYjxkKy23gcuUAQNyPwMJCAsFAd4WHg65CQWvHBkqUkexY93+2BMfUB4tAAABAED/6QN/BggANAAANhYzMjY1ECUmIyImJz4BNxMhNTMVMzI2NxcHDgErARUjNSMHFhcWFx4BFRQAIyInJjU0NjPSuTJzrP7smYQWCwgCAwLaAQZ5LiAjHBBOBCQVEnn4VaRMfVRISv7F8WI8ZCstt4HLlAEDcj8DCQgLBQHevb0WHg65CQXGxq8cGSpSR7Fj3f7YEx9QHi0AAAABAED/6QO+BX8AMwAANhYzMjY1ECUmIyImJz4BNxMvARc3ITI2NxcHDgErAQUXJQcWFxYXHgEVFAAjIicmNTQ2M9K5MnOs/uyZhBYLCAIDAoLFAvskAa0gIxwQTgQkFeIBqgL9lTekTH1USEr+xfFiPGQrLbeBy5QBA3I/AwkICwUBHE2IYk8WHg65CQWmiPFyHBkqUkexY93+2BMfUB4tAAAAAAMAQf9kA38GBAAHADQAOwAAJRYzMjY1NCcBNjc2NxcHDgErAQMWFx4BFRQAIyInByM3JjU0NjMyFxMmIyImJz4BNxMhNzMBIwcWFzAzATBcMXOssgEADgoRHBBOBCQVDHE5LUhK/sXxKCI4fkNFKy0WG/eVgRYLCAIDAtoBSUt+/vX5VaRMAXU/y5TQcwJ1AwYLHg65CQX+7CAsR7Fj3f7YA4mlIEMeLQkCXzwDCQgLBQHeuf6mrxwZAAAAAgBG/+oDvgV4ABcAJQAAAAIjIgARECU2IRcOAQcOAQc2NzYzMhYVJyYjIgcGFRQSMzI2NTQDvuu8sP7fARj6ATgFfbVHSYAYPi1QUZ/Y4UaomzMei5Z3bAEQ/toBSgESAWH91CEXT0dI3m0mEiDczJ+sXDZ+o/7Iy4iFAAIARP/qA74FeAANAC4AAAEmIyIHBhUUEjMyNjU0FgIjIgAREDcvAQU2IRcOAQcGBwUXJQYHBgc2NzYzMhYVAt1GqJszHouWd2y367yw/t/s7AIBW+EBEAV9tUcBAgGjAv4GGRhAGD4tUFGf2AJmrFw2fqP+yMuIhe/+2gFKARIBRPBciIehIRdPRwECo4jFJCpvbSYSINzMAAAAAAEAKP/tA5cFSwAMAAABFQEjASEiBgcnPgE3A5f+ToQBlf5MYVVBI0EfGQVLIfrDBMdAZhCgS0IAAQAo/+0DlwYkABQAAAEVASMBIREjEQYHBgcnPgE3MzUzFQOX/k6EAZX+n3lEIipBI0EfGXt5BUsh+sMEx/7oARcGGSBmEKBLQtnZAAEAKP/tA7YFSwAUAAABFQMfASUDIxMvAQUTISIGByc+ATcDl9v4Av7fsITD7gIBGKr+TGFVQSNBHxkFSyH9XGKIcv3fAk1eiG4CAkBmEKBLQgAAAAMAdP/qA5AFYwALABgAMwAAJDY1NCYnDgEVFBYzEzY1NCYjIgYVFBYXNgUmNTQ2MzIWFRQHBgceARUUBiMiJjU0NzY3JgJ+dn3CVk6NbY8+dXdceI1zXv5UStuvob5hOH2qk9m2o+lRNYOEIoBgbYeJNqxQiaIDa01tX4V0U16hR0INYHSEuK5zdV01RX67f5DEtZR/YT9YagAAAAIAPf/QA68FYwAOACsAAAA2Nz4BNTQCIyIGFRQWMxoBFRQCBwYHBgcnNjc2Nz4BNwcGBwYjIiY1NBIzAkORCgQGjIdieXGUwPBybX/DbaYKaEV8S2p/ECNKZDQrqsftuQI9TBoKgSjQAQSysZL4Ayb+odiY/sZ7jkUnFSgYGzFHZflUGjgVDPGn1QEUAAAAAAIAPf/QA8AFYwAOADYAAAA2Nz4BNTQCIyIGFRQWMxoBFRQCBwYHHwElBgcGByc2NzY3NjclJwU2NzY3BwYHBiMiJjU0EjMCQ5EKBAaMh2J5cZTA8HJtAwT1Av6gXXVtpgpoRXxLAgP+XgIB/SsgQBAjSmQ0K6rH7bkCPUwaCoEo0AEEsrGS+AMm/qHYmP7GewQEX4iJRCknFSgYGzFHAgKjiMY5P31UGjgVDPGn1QEUAAAAAAEAKP/tA74FSwAUAAABFQM3FwUDIxMHJyUTISIGByc+ATcDl6/UAv72z4S/6AIBH6H+TGFVQSNBHxkFSyH9412IdP1/AkBliH0B50BmEKBLQgAAAAAADgCuAAEAAAAAAAAAAAACAAEAAAAAAAEACwAbAAEAAAAAAAIABwA3AAEAAAAAAAMAKACRAAEAAAAAAAQACwDSAAEAAAAAAAUACwD2AAEAAAAAAAYACwEaAAMAAQQJAAAAAAAAAAMAAQQJAAEAFgADAAMAAQQJAAIADgAnAAMAAQQJAAMAUAA/AAMAAQQJAAQAFgC6AAMAAQQJAAUAFgDeAAMAAQQJAAYAFgECAAAAAFYAZQByAG8AdgBpAG8AVABlAHgAdAAAVmVyb3Zpb1RleHQAAFIAZQBnAHUAbABhAHIAAFJlZ3VsYXIAAEYAbwBuAHQARgBvAHIAZwBlACAAMgAuADAAIAA6ACAAVgBlAHIAbwB2AGkAbwBUAGUAeAB0ACAAOgAgADEANwAtADEAMAAtADIAMAAxADQAAEZvbnRGb3JnZSAyLjAgOiBWZXJvdmlvVGV4dCA6IDE3LTEwLTIwMTQAAFYAZQByAG8AdgBpAG8AVABlAHgAdAAAVmVyb3Zpb1RleHQAAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAAVmVyc2lvbiAxLjAAAFYAZQByAG8AdgBpAG8AVABlAHgAdAAAVmVyb3Zpb1RleHQAAAIAAAAAAAD/zQBmAAAAAAAAAAAAAAAAAAAAAAAAAAAAUwAAAAEAAgECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEHdW5pMjY2RAd1bmkyNjZFB3VuaTI2NkYHdW5pRTA0NQd1bmlFMDQ2B3VuaUUwNDcHdW5pRTA0OAd1bmlFMDQ5B3VuaUUxRDAHdW5pRTFEMQd1bmlFMUQyB3VuaUUxRDMHdW5pRTFENQd1bmlFMUQ3B3VuaUUxRDkHdW5pRTFEQgd1bmlFMUREB3VuaUUxREYHdW5pRTFFMQd1bmlFMUUzB3VuaUUxRTUHdW5pRTFFNwd1bmlFMjYwB3VuaUUyNjEHdW5pRTI2Mgd1bmlFMjYzB3VuaUUyNjQHdW5pRTUyMAd1bmlFNTIxB3VuaUU1MjIHdW5pRTUyMwd1bmlFNTI0B3VuaUU1MjUHdW5pRTUyNgd1bmlFNTI3B3VuaUU1MjgHdW5pRTUyOQd1bmlFNTJBB3VuaUU1MkIHdW5pRTUyQwd1bmlFNTJEB3VuaUU1MkUHdW5pRTUyRgd1bmlFNTMwB3VuaUU1MzEHdW5pRTUzMgd1bmlFNTMzB3VuaUU1MzQHdW5pRTUzNQd1bmlFNTM2B3VuaUU1MzcHdW5pRTUzOAd1bmlFNTM5B3VuaUU1M0EHdW5pRTUzQgd1bmlFNTNDB3VuaUU1M0QHdW5pRTU1MAd1bmlFNTUxB3VuaUU1NTIHdW5pRUE1MAd1bmlFQTUxB3VuaUVBNTIHdW5pRUE1Mwd1bmlFQTU0B3VuaUVBNTUHdW5pRUE1Ngd1bmlFQTU3B3VuaUVBNTgHdW5pRUE1OQd1bmlFQTVBB3VuaUVBNUIHdW5pRUE1Qwd1bmlFQTVEB3VuaUVBNUUHdW5pRUE1Rgd1bmlFQTYwB3VuaUVBNjEHdW5pRUE2Mgd1bmlFQ0MwAAAAAf//AAIAAQAAAAwAAAAWAB4AAgABAAMAUgABAAQAAAACAAAAAQAAAAEAAAAAAAAAAQAAAADbzL1NAAAAANBnMXoAAAAA3jKglg=="; From 6febb5cafb245001cade90b9206962782417ce0c Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 17 Feb 2022 11:07:26 +0200 Subject: [PATCH 385/403] Intialize values in contructor/reset --- include/vrv/beam.h | 2 +- include/vrv/layerelement.h | 3 ++- src/beam.cpp | 10 ++++++++++ src/layerelement.cpp | 3 +++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/include/vrv/beam.h b/include/vrv/beam.h index 8e0b2e1d9cb..ce845390c65 100644 --- a/include/vrv/beam.h +++ b/include/vrv/beam.h @@ -196,7 +196,7 @@ class BeamSegment { // the systems) class BeamSpanSegment : public BeamSegment { public: - BeamSpanSegment() = default; + BeamSpanSegment(); virtual ~BeamSpanSegment(){}; /** diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index 7c433e8ece7..7f9e2da8f08 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -483,7 +483,8 @@ class LayerElement : public Object, Staff *m_crossStaff; Layer *m_crossLayer; - bool m_isInBeamspan = false; + // flag to indicate that layerElement belongs to the beamSpan + bool m_isInBeamspan; protected: Alignment *m_alignment; diff --git a/src/beam.cpp b/src/beam.cpp index 6b2425f8650..bc4639a5079 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1628,6 +1628,16 @@ bool Beam::IsTabBeam() // BeamSpanSegment //---------------------------------------------------------------------------- +BeamSpanSegment::BeamSpanSegment() +{ + m_measure = NULL; + m_staff = NULL; + m_layer = NULL; + m_begin = NULL; + m_end = NULL; + m_spanningType = SPANNING_START_END; +} + void BeamSpanSegment::SetSpanningType(int systemIndex, int systemCount) { if (0 == systemIndex) { diff --git a/src/layerelement.cpp b/src/layerelement.cpp index da5ab61ac87..d3760d92ad9 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -130,6 +130,8 @@ void LayerElement::Reset() m_crossStaff = NULL; m_crossLayer = NULL; + + m_isInBeamspan = false; } LayerElement::~LayerElement() {} @@ -2537,6 +2539,7 @@ int LayerElement::CalcMaxMeasureDuration(FunctorParams *functorParams) int LayerElement::ResetDrawing(FunctorParams *functorParams) { + m_isInBeamspan = false; m_drawingCueSize = false; m_crossStaff = NULL; m_crossLayer = NULL; From f525c7f59b74c68802eb526086124489208c4701 Mon Sep 17 00:00:00 2001 From: Monceber Date: Thu, 17 Feb 2022 12:33:56 +0200 Subject: [PATCH 386/403] Formatting --- src/beam.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/beam.cpp b/src/beam.cpp index bc4639a5079..35d04fc9296 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -1628,7 +1628,7 @@ bool Beam::IsTabBeam() // BeamSpanSegment //---------------------------------------------------------------------------- -BeamSpanSegment::BeamSpanSegment() +BeamSpanSegment::BeamSpanSegment() { m_measure = NULL; m_staff = NULL; From c8c04bac85437f4d70b67d17d958bd826224bdc5 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Mon, 14 Feb 2022 16:09:22 +0100 Subject: [PATCH 387/403] Resolve stem collisions --- src/layerelement.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/layerelement.cpp b/src/layerelement.cpp index d3760d92ad9..36f5cae3c38 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -1711,11 +1711,13 @@ std::pair LayerElement::CalcElementHorizontalOverlap(Doc *doc, else if (this->Is(NOTE)) { Note *currentNote = vrv_cast(this); assert(currentNote); - if ((currentNote->GetDrawingDur() == DUR_1) && otherElements.at(i)->Is(STEM) && (shift == 0)) { + if (otherElements.at(i)->Is(STEM) && (shift == 0)) { const int horizontalMargin = doc->GetDrawingStemWidth(staff->m_drawingStaffSize); Stem *stem = vrv_cast(otherElements.at(i)); - data_STEMDIRECTION stemDir = stem->GetDrawingStemDir(); - if (this->HorizontalLeftOverlap(otherElements.at(i), doc, 0, 0) != 0) { + const data_STEMDIRECTION stemDir = stem->GetDrawingStemDir(); + const int leftOverlap = this->HorizontalLeftOverlap(otherElements.at(i), doc, 0, 0); + const int rightOverlap = this->HorizontalRightOverlap(otherElements.at(i), doc, 0, 0); + if ((leftOverlap != 0) && (rightOverlap != 0)) { shift = 3 * horizontalMargin; if (stemDir == STEMDIRECTION_up) { shift *= -1; From 4f57ecfd6b6d17483c0b01b3a8cd64f58b86efc5 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 17 Feb 2022 13:44:01 +0100 Subject: [PATCH 388/403] Improve flag shift for dots --- include/vrv/functorparams.h | 2 +- include/vrv/note.h | 2 +- src/horizontalaligner.cpp | 2 +- src/layerelement.cpp | 4 ++-- src/note.cpp | 10 ++++++---- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/include/vrv/functorparams.h b/include/vrv/functorparams.h index 56d79197ea2..abf62c040e0 100644 --- a/include/vrv/functorparams.h +++ b/include/vrv/functorparams.h @@ -283,7 +283,7 @@ class AdjustDotsParams : public FunctorParams { } std::vector m_staffNs; std::vector m_elements; - std::vector m_dots; + std::vector m_dots; Doc *m_doc; Functor *m_functor; Functor *m_functorEnd; diff --git a/include/vrv/note.h b/include/vrv/note.h index bd247e9f9d1..a3374502c45 100644 --- a/include/vrv/note.h +++ b/include/vrv/note.h @@ -358,7 +358,7 @@ class Note : public LayerElement, * Return whether dots are overlapping with flag. Take into account flag height, its position as well * as position of the note and position of the dots */ - bool IsDotOverlappingWithFlag(Doc *doc, const int staffSize, bool isDotShifted); + bool IsDotOverlappingWithFlag(Doc *doc, const int staffSize, int dotLocShift); /** * Register deferred notes for MIDI diff --git a/src/horizontalaligner.cpp b/src/horizontalaligner.cpp index 97b48b2f1c4..9d45b322a1d 100644 --- a/src/horizontalaligner.cpp +++ b/src/horizontalaligner.cpp @@ -1197,7 +1197,7 @@ int Alignment::AdjustDotsEnd(FunctorParams *functorParams) if (diff > max) max = diff; } if (max) dot->SetDrawingXRel(dot->GetDrawingXRel() + max); - vrv_cast(dot)->IsAdjusted(true); + dot->IsAdjusted(true); } } } diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 36f5cae3c38..cbacc5447b2 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -1495,7 +1495,7 @@ int LayerElement::AdjustDots(FunctorParams *functorParams) if (this->Is(NOTE) && this->GetParent()->Is(CHORD)) return FUNCTOR_SIBLINGS; if (this->Is(DOTS)) { - params->m_dots.push_back(this); + params->m_dots.push_back(vrv_cast(this)); } else { params->m_elements.push_back(this); @@ -1711,7 +1711,7 @@ std::pair LayerElement::CalcElementHorizontalOverlap(Doc *doc, else if (this->Is(NOTE)) { Note *currentNote = vrv_cast(this); assert(currentNote); - if (otherElements.at(i)->Is(STEM) && (shift == 0)) { + if (otherElements.at(i)->Is(STEM) && (shift == 0) && areDotsAdjusted) { const int horizontalMargin = doc->GetDrawingStemWidth(staff->m_drawingStaffSize); Stem *stem = vrv_cast(otherElements.at(i)); const data_STEMDIRECTION stemDir = stem->GetDrawingStemDir(); diff --git a/src/note.cpp b/src/note.cpp index dba54fc31f8..ab3cc500507 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -724,7 +724,7 @@ void Note::UpdateFromTransPitch(const TransPitch &tp) } } -bool Note::IsDotOverlappingWithFlag(Doc *doc, const int staffSize, bool isDotShifted) +bool Note::IsDotOverlappingWithFlag(Doc *doc, const int staffSize, int dotLocShift) { Object *stem = this->GetFirst(STEM); if (!stem) return false; @@ -739,7 +739,7 @@ bool Note::IsDotOverlappingWithFlag(Doc *doc, const int staffSize, bool isDotShi const int flagHeight = doc->GetGlyphHeight(flagGlyph, staffSize, this->GetDrawingCueSize()); const int dotMargin = flag->GetDrawingY() - this->GetDrawingY() - flagHeight - this->GetDrawingRadius(doc) / 2 - - (isDotShifted ? doc->GetDrawingUnit(staffSize) : 0); + - dotLocShift * doc->GetDrawingUnit(staffSize); return dotMargin < 0; } @@ -1197,8 +1197,10 @@ int Note::CalcDots(FunctorParams *functorParams) dots = vrv_cast(this->FindDescendantByType(DOTS, 1)); assert(dots); - dots->SetMapOfDotLocs(this->CalcOptimalDotLocations()); - const bool isDotShifted = (this->GetDrawingLoc() % 2 == 0); + MapOfDotLocs dotLocs = this->CalcOptimalDotLocations(); + dots->SetMapOfDotLocs(dotLocs); + + const int dotLocShift = *(dotLocs.cbegin()->second.rbegin()) - this->GetDrawingLoc(); // Stem up, shorter than 4th and not in beam if (const int shift = dots->GetFlagShift(); shift) { From cd18d8bb7e2f6f587fcfe570ce52d7d35bd352c2 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 17 Feb 2022 14:04:47 +0100 Subject: [PATCH 389/403] Skip notes with stem.sameas --- src/layerelement.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/layerelement.cpp b/src/layerelement.cpp index cbacc5447b2..51305410171 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -1712,9 +1712,12 @@ std::pair LayerElement::CalcElementHorizontalOverlap(Doc *doc, Note *currentNote = vrv_cast(this); assert(currentNote); if (otherElements.at(i)->Is(STEM) && (shift == 0) && areDotsAdjusted) { - const int horizontalMargin = doc->GetDrawingStemWidth(staff->m_drawingStaffSize); Stem *stem = vrv_cast(otherElements.at(i)); const data_STEMDIRECTION stemDir = stem->GetDrawingStemDir(); + // Nothing to do if note has same stem + if (currentNote->HasStemSameasNote()) continue; + + const int horizontalMargin = doc->GetDrawingStemWidth(staff->m_drawingStaffSize); const int leftOverlap = this->HorizontalLeftOverlap(otherElements.at(i), doc, 0, 0); const int rightOverlap = this->HorizontalRightOverlap(otherElements.at(i), doc, 0, 0); if ((leftOverlap != 0) && (rightOverlap != 0)) { From e3a215c65e856c3db1ec976dbfa668b3bacc94a1 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 17 Feb 2022 14:42:35 +0100 Subject: [PATCH 390/403] Use existing functionality --- src/layerelement.cpp | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 51305410171..455855ed8b4 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -1713,19 +1713,10 @@ std::pair LayerElement::CalcElementHorizontalOverlap(Doc *doc, assert(currentNote); if (otherElements.at(i)->Is(STEM) && (shift == 0) && areDotsAdjusted) { Stem *stem = vrv_cast(otherElements.at(i)); - const data_STEMDIRECTION stemDir = stem->GetDrawingStemDir(); // Nothing to do if note has same stem if (currentNote->HasStemSameasNote()) continue; - const int horizontalMargin = doc->GetDrawingStemWidth(staff->m_drawingStaffSize); - const int leftOverlap = this->HorizontalLeftOverlap(otherElements.at(i), doc, 0, 0); - const int rightOverlap = this->HorizontalRightOverlap(otherElements.at(i), doc, 0, 0); - if ((leftOverlap != 0) && (rightOverlap != 0)) { - shift = 3 * horizontalMargin; - if (stemDir == STEMDIRECTION_up) { - shift *= -1; - } - } + shift -= stem->CompareToElementPosition(doc, currentNote, 0); } } } From 2a2f9c6d486b83ac133033430bfc65d99ec59561 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 17 Feb 2022 15:00:09 +0100 Subject: [PATCH 391/403] Resolve rebase conflicts --- src/note.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/note.cpp b/src/note.cpp index ab3cc500507..fee9b52e380 100644 --- a/src/note.cpp +++ b/src/note.cpp @@ -1207,7 +1207,7 @@ int Note::CalcDots(FunctorParams *functorParams) flagShift += shift; } else if ((this->GetDrawingStemDir() == STEMDIRECTION_up) && !this->IsInBeam() && (this->GetDrawingStemLen() < 3) - && !this->IsInBeamSpan() && (this->IsDotOverlappingWithFlag(params->m_doc, staffSize, isDotShifted))) { + && !this->IsInBeamSpan() && (this->IsDotOverlappingWithFlag(params->m_doc, staffSize, dotLocShift))) { // HARDCODED const int shift = params->m_doc->GetGlyphWidth(SMUFL_E240_flag8thUp, staffSize, drawingCueSize) * 0.8; flagShift += shift; From e1fdd649450830c4f52858736806e91436b3aac7 Mon Sep 17 00:00:00 2001 From: Paul Overell Date: Fri, 18 Feb 2022 13:09:46 +0000 Subject: [PATCH 392/403] Fix Misplaced repetition dots in tablature #2648 --- src/view_page.cpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/view_page.cpp b/src/view_page.cpp index eb4687dcb5d..774345163c3 100644 --- a/src/view_page.cpp +++ b/src/view_page.cpp @@ -950,22 +950,26 @@ void View::DrawBarLineDots(DeviceContext *dc, Staff *staff, BarLine *barLine) const int x1 = x - barLineWidth / 2 - (dotSeparation + dotWidth); const int x2 = x + xShift; - const int yBottom = staff->GetDrawingY() - staff->m_drawingLines * m_doc->GetDrawingUnit(staffSize); - const int yTop = yBottom + m_doc->GetDrawingDoubleUnit(staffSize); + const int numDots = 3 - staff->m_drawingLines % 2; // odd => 2 dots, even => 3 dots + const int yInc = m_doc->GetDrawingDoubleUnit(staffSize); // vertical distance between dots + const int yBottom = staff->GetDrawingY() - (staff->m_drawingLines + numDots % 2) * m_doc->GetDrawingUnit(staffSize); + const int yTop = yBottom + (numDots - 1) * yInc; if (barLine->GetForm() == BARRENDITION_rptstart) { - this->DrawSmuflCode(dc, x2 - thickBarLineWidth / 2, yTop, SMUFL_E044_repeatDot, staffSize, false); - this->DrawSmuflCode(dc, x2 - thickBarLineWidth / 2, yBottom, SMUFL_E044_repeatDot, staffSize, false); + for (int y = yTop; y >= yBottom; y -= yInc) { + this->DrawSmuflCode(dc, x2 - thickBarLineWidth / 2, y, SMUFL_E044_repeatDot, staffSize, false); + } } if (barLine->GetForm() == BARRENDITION_rptboth) { - this->DrawSmuflCode( - dc, x2 + barLineSeparation + barLineWidth / 2, yTop, SMUFL_E044_repeatDot, staffSize, false); - this->DrawSmuflCode( - dc, x2 + barLineSeparation + barLineWidth / 2, yBottom, SMUFL_E044_repeatDot, staffSize, false); + for (int y = yTop; y >= yBottom; y -= yInc) { + this->DrawSmuflCode( + dc, x2 + barLineSeparation + barLineWidth / 2, y, SMUFL_E044_repeatDot, staffSize, false); + } } if ((barLine->GetForm() == BARRENDITION_rptend) || (barLine->GetForm() == BARRENDITION_rptboth)) { - this->DrawSmuflCode(dc, x1, yTop, SMUFL_E044_repeatDot, staffSize, false); - this->DrawSmuflCode(dc, x1, yBottom, SMUFL_E044_repeatDot, staffSize, false); + for (int y = yTop; y >= yBottom; y -= yInc) { + this->DrawSmuflCode(dc, x1, y, SMUFL_E044_repeatDot, staffSize, false); + } } return; From 2db6fb96ccc718532e90e2f6d24b8490ef673dd4 Mon Sep 17 00:00:00 2001 From: Monceber Date: Fri, 18 Feb 2022 15:49:43 +0200 Subject: [PATCH 393/403] Return path member variable to track font-specific glyph location --- include/vrv/glyph.h | 10 ++++++++++ include/vrv/svgdevicecontext.h | 4 +++- include/vrv/vrv.h | 4 ---- src/glyph.cpp | 2 ++ src/svgdevicecontext.cpp | 8 +++----- src/vrv.cpp | 5 +---- 6 files changed, 19 insertions(+), 14 deletions(-) diff --git a/include/vrv/glyph.h b/include/vrv/glyph.h index 780e8941932..cdf64ce342a 100644 --- a/include/vrv/glyph.h +++ b/include/vrv/glyph.h @@ -66,6 +66,14 @@ class Glyph { void SetCodeStr(const std::string &codeStr) { m_codeStr = codeStr; } ///@} + /** + * @name Setter and getter for the path + */ + ///@{ + std::string GetPath() { return m_path; } + void SetPath(const std::string &path) { m_path = path; } + ///@} + /** * @name Setter and getter for the horizAdvX */ @@ -106,6 +114,8 @@ class Glyph { int m_unitsPerEm; /** The Unicode code in hexa as string */ std::string m_codeStr; + /** Path to the glyph XML file */ + std::string m_path; /** A map of the available anchors */ std::map m_anchors; }; diff --git a/include/vrv/svgdevicecontext.h b/include/vrv/svgdevicecontext.h index 11a02437e66..6932f7c7857 100644 --- a/include/vrv/svgdevicecontext.h +++ b/include/vrv/svgdevicecontext.h @@ -23,6 +23,8 @@ //---------------------------------------------------------------------------- +class Glyph; + namespace vrv { //---------------------------------------------------------------------------- @@ -284,7 +286,7 @@ class SvgDeviceContext : public DeviceContext { // holds the list of glyphs from the smufl font used so far // they will be added at the end of the file as - std::set m_smuflGlyphs; + std::set m_smuflGlyphs; // pugixml data pugi::xml_document m_svgDoc; diff --git a/include/vrv/vrv.h b/include/vrv/vrv.h index 5e508a54309..78ecf7d7c9c 100644 --- a/include/vrv/vrv.h +++ b/include/vrv/vrv.h @@ -151,8 +151,6 @@ class Resources { /** Resource path */ static std::string GetPath() { return s_path; } static void SetPath(const std::string &path) { s_path = path; } - /** Font name */ - static std::string GetSmuflFontName() { return s_smuflFontName; } /** Init the SMufL music and text fonts */ static bool InitFonts(); /** Init the text font (bounding boxes and ASCII only) */ @@ -181,8 +179,6 @@ class Resources { /** The path to the resources directory (e.g., for the svg/ subdirectory with fonts as XML */ static thread_local std::string s_path; - /** Name of the font used for SMUFL glyphs*/ - static thread_local std::string s_smuflFontName; /** The loaded SMuFL font */ static thread_local GlyphTable s_fontGlyphTable; /** A text font used for bounding box calculations */ diff --git a/src/glyph.cpp b/src/glyph.cpp index baad7aac223..dd785fa6784 100644 --- a/src/glyph.cpp +++ b/src/glyph.cpp @@ -35,6 +35,7 @@ Glyph::Glyph() m_horizAdvX = 0; m_unitsPerEm = 20480; m_codeStr = "[unset]"; + m_path = "[unset]"; } Glyph::Glyph(std::string path, std::string codeStr) @@ -81,6 +82,7 @@ Glyph::Glyph(int unitsPerEm) m_horizAdvX = 0; m_unitsPerEm = unitsPerEm * 10; m_codeStr = "[unset]"; + m_path = "[unset]"; } Glyph::~Glyph() {} diff --git a/src/svgdevicecontext.cpp b/src/svgdevicecontext.cpp index c5715f3225a..96493e29e7b 100644 --- a/src/svgdevicecontext.cpp +++ b/src/svgdevicecontext.cpp @@ -124,11 +124,9 @@ void SvgDeviceContext::Commit(bool xml_declaration) pugi::xml_document sourceDoc; // for each needed glyph - std::set::const_iterator it; - for (it = m_smuflGlyphs.begin(); it != m_smuflGlyphs.end(); ++it) { + for (auto it = m_smuflGlyphs.begin(); it != m_smuflGlyphs.end(); ++it) { // load the XML file that contains it as a pugi::xml_document - const std::string path = Resources::GetPath() + "/" + Resources::GetSmuflFontName() + "/" + *it + ".xml"; - std::ifstream source(path); + std::ifstream source((*it)->GetPath()); sourceDoc.load(source); // copy all the nodes inside into the master document @@ -906,7 +904,7 @@ void SvgDeviceContext::DrawMusicText(const std::wstring &text, int x, int y, boo } // Add the glyph to the array for the - m_smuflGlyphs.insert(glyph->GetCodeStr()); + m_smuflGlyphs.insert(glyph); // Write the char in the SVG pugi::xml_node useChild = AppendChild("use"); diff --git a/src/vrv.cpp b/src/vrv.cpp index 9cdf187b800..c3e488aec4e 100644 --- a/src/vrv.cpp +++ b/src/vrv.cpp @@ -66,7 +66,6 @@ namespace vrv { //---------------------------------------------------------------------------- thread_local std::string Resources::s_path = "/usr/local/share/verovio"; -thread_local std::string Resources::s_smuflFontName = ""; thread_local Resources::GlyphTextMap Resources::s_textFont; thread_local Resources::GlyphTable Resources::s_fontGlyphTable; thread_local Resources::GlyphNameTable Resources::s_glyphNameTable; @@ -167,9 +166,6 @@ Glyph *Resources::GetTextGlyph(wchar_t code) bool Resources::LoadFont(const std::string &fontName) { - // set font name - s_smuflFontName = fontName; - pugi::xml_document doc; const std::string filename = Resources::GetPath() + "/" + fontName + ".xml"; pugi::xml_parse_result parseResult = doc.load_file(filename.c_str()); @@ -200,6 +196,7 @@ bool Resources::LoadFont(const std::string &fontName) if (current.attribute("w")) width = current.attribute("w").as_float(); if (current.attribute("h")) height = current.attribute("h").as_float(); glyph.SetBoundingBox(x, y, width, height); + glyph.SetPath(Resources::GetPath() + "/" + fontName + "/" + c_attribute.value() + ".xml"); if (current.attribute("h-a-x")) glyph.SetHorizAdvX(current.attribute("h-a-x").as_float()); // load anchors From 69fb7811a5347a95792081257008af37ec509618 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Sun, 20 Feb 2022 19:36:06 +0100 Subject: [PATCH 394/403] fix build warning --- include/vrv/beamspan.h | 2 +- src/beamspan.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/vrv/beamspan.h b/include/vrv/beamspan.h index 6aaf3057cf5..d776cf0e6a1 100644 --- a/include/vrv/beamspan.h +++ b/include/vrv/beamspan.h @@ -105,4 +105,4 @@ class BeamSpan : public ControlElement, } // namespace vrv -#endif //__VRV_BEAMSPAN_H__ \ No newline at end of file +#endif //__VRV_BEAMSPAN_H__ diff --git a/src/beamspan.cpp b/src/beamspan.cpp index 5cd21ef3f53..7dfbbad88a9 100644 --- a/src/beamspan.cpp +++ b/src/beamspan.cpp @@ -271,7 +271,7 @@ int BeamSpan::ResolveSpanningBeamSpans(FunctorParams *functorParams) // found and process it separatelly in the end Object *currentSystem = this->GetFirstAncestor(SYSTEM); int currentSystemIndex = 0; - for (int i = 0; i < elements.size() - 1; ++i) { + for (int i = 0; i < (int)elements.size() - 1; ++i) { if (elements.at(i).second == currentSystem) { currentSystemIndex = i; continue; @@ -283,4 +283,4 @@ int BeamSpan::ResolveSpanningBeamSpans(FunctorParams *functorParams) return FUNCTOR_CONTINUE; } -} // namespace vrv \ No newline at end of file +} // namespace vrv From a57737479e7d8a46fbf6515261295a401c350db6 Mon Sep 17 00:00:00 2001 From: Klaus Rettinghaus Date: Mon, 21 Feb 2022 11:36:23 +0100 Subject: [PATCH 395/403] update Leland --- data/Leland.xml | 38 +- data/Leland/E000.xml | 2 +- data/Leland/E003.xml | 2 +- data/Leland/E004.xml | 2 +- data/Leland/E047.xml | 2 +- data/Leland/E04B.xml | 2 +- data/Leland/E050.xml | 2 +- data/Leland/E051.xml | 2 +- data/Leland/E052.xml | 2 +- data/Leland/E053.xml | 2 +- data/Leland/E054.xml | 2 +- data/Leland/E055.xml | 2 +- data/Leland/E05C.xml | 2 +- data/Leland/E05D.xml | 2 +- data/Leland/E062.xml | 2 +- data/Leland/E063.xml | 2 +- data/Leland/E064.xml | 2 +- data/Leland/E065.xml | 2 +- data/Leland/E066.xml | 2 +- data/Leland/E06A.xml | 2 +- data/Leland/E06D.xml | 2 +- data/Leland/E06E.xml | 2 +- data/Leland/E082.xml | 2 +- data/Leland/E083.xml | 2 +- data/Leland/E084.xml | 2 +- data/Leland/E085.xml | 2 +- data/Leland/E086.xml | 2 +- data/Leland/E087.xml | 2 +- data/Leland/E088.xml | 2 +- data/Leland/E089.xml | 2 +- data/Leland/E08A.xml | 2 +- data/Leland/E08B.xml | 2 +- data/Leland/E0A0.xml | 2 +- data/Leland/E0A2.xml | 2 +- data/Leland/E0A3.xml | 2 +- data/Leland/E0AF.xml | 2 +- data/Leland/E0D9.xml | 2 +- data/Leland/E0DB.xml | 2 +- data/Leland/E0F5.xml | 2 +- data/Leland/E0F6.xml | 2 +- data/Leland/E240.xml | 2 +- data/Leland/E241.xml | 2 +- data/Leland/E242.xml | 2 +- data/Leland/E243.xml | 2 +- data/Leland/E244.xml | 2 +- data/Leland/E245.xml | 2 +- data/Leland/E246.xml | 2 +- data/Leland/E247.xml | 2 +- data/Leland/E248.xml | 2 +- data/Leland/E249.xml | 2 +- data/Leland/E24A.xml | 2 +- data/Leland/E24B.xml | 2 +- data/Leland/E24C.xml | 2 +- data/Leland/E24D.xml | 2 +- data/Leland/E24E.xml | 2 +- data/Leland/E24F.xml | 2 +- data/Leland/E260.xml | 2 +- data/Leland/E261.xml | 2 +- data/Leland/E262.xml | 2 +- data/Leland/E263.xml | 2 +- data/Leland/E264.xml | 2 +- data/Leland/E265.xml | 2 +- data/Leland/E266.xml | 2 +- data/Leland/E267.xml | 2 +- data/Leland/E268.xml | 2 +- data/Leland/E269.xml | 2 +- data/Leland/E26A.xml | 2 +- data/Leland/E26B.xml | 2 +- data/Leland/E270.xml | 2 +- data/Leland/E271.xml | 2 +- data/Leland/E272.xml | 2 +- data/Leland/E273.xml | 2 +- data/Leland/E274.xml | 2 +- data/Leland/E275.xml | 2 +- data/Leland/E280.xml | 2 +- data/Leland/E281.xml | 2 +- data/Leland/E282.xml | 2 +- data/Leland/E283.xml | 2 +- data/Leland/E440.xml | 2 +- data/Leland/E442.xml | 2 +- data/Leland/E446.xml | 2 +- data/Leland/E447.xml | 2 +- data/Leland/E4A0.xml | 2 +- data/Leland/E4A1.xml | 2 +- data/Leland/E4A2.xml | 2 +- data/Leland/E4A3.xml | 2 +- data/Leland/E4AE.xml | 2 +- data/Leland/E4AF.xml | 2 +- data/Leland/E4B0.xml | 2 +- data/Leland/E4B1.xml | 2 +- data/Leland/E4B2.xml | 2 +- data/Leland/E4B3.xml | 2 +- data/Leland/E4B4.xml | 2 +- data/Leland/E4B5.xml | 2 +- data/Leland/E4B6.xml | 2 +- data/Leland/E4B7.xml | 2 +- data/Leland/E4B8.xml | 2 +- data/Leland/E4B9.xml | 2 +- data/Leland/E4BA.xml | 2 +- data/Leland/E4BB.xml | 2 +- data/Leland/E4BD.xml | 2 +- data/Leland/E4C0.xml | 2 +- data/Leland/E4C1.xml | 2 +- data/Leland/E4C4.xml | 2 +- data/Leland/E4C5.xml | 2 +- data/Leland/E4C8.xml | 2 +- data/Leland/E4C9.xml | 2 +- data/Leland/E4CE.xml | 2 +- data/Leland/E4E1.xml | 2 +- data/Leland/E4E5.xml | 2 +- data/Leland/E4E6.xml | 2 +- data/Leland/E4E7.xml | 2 +- data/Leland/E4E8.xml | 2 +- data/Leland/E4E9.xml | 2 +- data/Leland/E4EA.xml | 2 +- data/Leland/E4EB.xml | 2 +- data/Leland/E4EC.xml | 2 +- data/Leland/E4ED.xml | 2 +- data/Leland/E4F2.xml | 2 +- data/Leland/E4F6.xml | 2 +- data/Leland/E500.xml | 2 +- data/Leland/E501.xml | 2 +- data/Leland/E502.xml | 2 +- data/Leland/E510.xml | 2 +- data/Leland/E511.xml | 2 +- data/Leland/E512.xml | 2 +- data/Leland/E513.xml | 2 +- data/Leland/E515.xml | 2 +- data/Leland/E516.xml | 2 +- data/Leland/E517.xml | 2 +- data/Leland/E518.xml | 2 +- data/Leland/E519.xml | 2 +- data/Leland/E51A.xml | 2 +- data/Leland/E51B.xml | 2 +- data/Leland/E51C.xml | 2 +- data/Leland/E51D.xml | 2 +- data/Leland/E51E.xml | 2 +- data/Leland/E520.xml | 2 +- data/Leland/E521.xml | 2 +- data/Leland/E522.xml | 2 +- data/Leland/E523.xml | 2 +- data/Leland/E525.xml | 2 +- data/Leland/E526.xml | 2 +- data/Leland/E527.xml | 2 +- data/Leland/E528.xml | 2 +- data/Leland/E529.xml | 2 +- data/Leland/E52A.xml | 2 +- data/Leland/E52B.xml | 2 +- data/Leland/E52C.xml | 2 +- data/Leland/E52D.xml | 2 +- data/Leland/E52E.xml | 2 +- data/Leland/E52F.xml | 2 +- data/Leland/E530.xml | 2 +- data/Leland/E531.xml | 2 +- data/Leland/E532.xml | 2 +- data/Leland/E533.xml | 2 +- data/Leland/E534.xml | 2 +- data/Leland/E535.xml | 2 +- data/Leland/E536.xml | 2 +- data/Leland/E537.xml | 2 +- data/Leland/E538.xml | 2 +- data/Leland/E539.xml | 2 +- data/Leland/E53A.xml | 2 +- data/Leland/E53B.xml | 2 +- data/Leland/E53C.xml | 2 +- data/Leland/E53D.xml | 2 +- data/Leland/E566.xml | 2 +- data/Leland/E567.xml | 2 +- data/Leland/E568.xml | 2 +- data/Leland/E56A.xml | 2 +- data/Leland/E56B.xml | 2 +- data/Leland/E56F.xml | 2 +- data/Leland/E587.xml | 2 +- data/Leland/E59D.xml | 2 +- data/Leland/E59E.xml | 2 +- data/Leland/E5B2.xml | 2 +- data/Leland/E5B5.xml | 2 +- data/Leland/E5B8.xml | 2 +- data/Leland/E5BB.xml | 2 +- data/Leland/E5BC.xml | 2 +- data/Leland/E5BD.xml | 2 +- data/Leland/E5BE.xml | 2 +- data/Leland/E5C0.xml | 2 +- data/Leland/E5C3.xml | 2 +- data/Leland/E5C6.xml | 2 +- data/Leland/E5C7.xml | 2 +- data/Leland/E5C8.xml | 2 +- data/Leland/E5E6.xml | 2 +- data/Leland/E612.xml | 2 +- data/Leland/E613.xml | 2 +- data/Leland/E614.xml | 2 +- data/Leland/E630.xml | 2 +- data/Leland/E632.xml | 2 +- data/Leland/E650.xml | 2 +- data/Leland/E651.xml | 2 +- data/Leland/E655.xml | 2 +- data/Leland/E880.xml | 2 +- data/Leland/E883.xml | 2 +- data/Leland/E886.xml | 2 +- data/Leland/E887.xml | 2 +- data/Leland/E888.xml | 2 +- data/Leland/E889.xml | 2 +- data/Leland/E93C.xml | 2 +- data/Leland/E93D.xml | 2 +- data/Leland/EAAD.xml | 2 +- data/Leland/EAAE.xml | 2 +- fonts/Leland.svg | 1988 ++++++++++++++++--------------- fonts/json/leland_metadata.json | 1312 +++++++++++--------- 208 files changed, 1987 insertions(+), 1761 deletions(-) diff --git a/data/Leland.xml b/data/Leland.xml index c216c2104e1..dddf6940a4f 100644 --- a/data/Leland.xml +++ b/data/Leland.xml @@ -69,7 +69,7 @@ - + @@ -77,10 +77,10 @@ - + - + @@ -131,7 +131,7 @@ - + @@ -154,7 +154,7 @@ - + @@ -184,7 +184,7 @@ - + @@ -331,19 +331,19 @@ - - + + - - - + + + - + @@ -351,8 +351,8 @@ - - + + @@ -374,7 +374,7 @@ - + @@ -408,7 +408,7 @@ - + @@ -429,8 +429,8 @@ - - + + @@ -441,7 +441,7 @@ - + diff --git a/data/Leland/E000.xml b/data/Leland/E000.xml index 261518ed78e..08e0bfd0c2d 100644 --- a/data/Leland/E000.xml +++ b/data/Leland/E000.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E003.xml b/data/Leland/E003.xml index 48d97c3678d..043adad72cc 100644 --- a/data/Leland/E003.xml +++ b/data/Leland/E003.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E004.xml b/data/Leland/E004.xml index f33648c1f0f..498b0980fbf 100644 --- a/data/Leland/E004.xml +++ b/data/Leland/E004.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E047.xml b/data/Leland/E047.xml index 6df2fec4d13..e89c15be5ae 100644 --- a/data/Leland/E047.xml +++ b/data/Leland/E047.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E04B.xml b/data/Leland/E04B.xml index 972b42ffd3c..f7d852e6c4f 100644 --- a/data/Leland/E04B.xml +++ b/data/Leland/E04B.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E050.xml b/data/Leland/E050.xml index cb6519ba73f..52d13c49f0a 100644 --- a/data/Leland/E050.xml +++ b/data/Leland/E050.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E051.xml b/data/Leland/E051.xml index 4595de8156a..fd709d66b03 100644 --- a/data/Leland/E051.xml +++ b/data/Leland/E051.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E052.xml b/data/Leland/E052.xml index 58413ab1758..0648d97bada 100644 --- a/data/Leland/E052.xml +++ b/data/Leland/E052.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E053.xml b/data/Leland/E053.xml index 5e1f94ec52e..207c7e7d7df 100644 --- a/data/Leland/E053.xml +++ b/data/Leland/E053.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E054.xml b/data/Leland/E054.xml index 93f2da49f97..2b0982b58d8 100644 --- a/data/Leland/E054.xml +++ b/data/Leland/E054.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E055.xml b/data/Leland/E055.xml index 50e80c19db0..dd000b9fbec 100644 --- a/data/Leland/E055.xml +++ b/data/Leland/E055.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E05C.xml b/data/Leland/E05C.xml index c731b84a229..2d8c938c1a9 100644 --- a/data/Leland/E05C.xml +++ b/data/Leland/E05C.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E05D.xml b/data/Leland/E05D.xml index f60640ea965..976e2de820a 100644 --- a/data/Leland/E05D.xml +++ b/data/Leland/E05D.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E062.xml b/data/Leland/E062.xml index 2e654395f40..e5efbd54072 100644 --- a/data/Leland/E062.xml +++ b/data/Leland/E062.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E063.xml b/data/Leland/E063.xml index 0ed47a1759e..e858ae572ec 100644 --- a/data/Leland/E063.xml +++ b/data/Leland/E063.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E064.xml b/data/Leland/E064.xml index 747bf027371..da341bb5f07 100644 --- a/data/Leland/E064.xml +++ b/data/Leland/E064.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E065.xml b/data/Leland/E065.xml index d0950d43648..5a131eeb9a6 100644 --- a/data/Leland/E065.xml +++ b/data/Leland/E065.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E066.xml b/data/Leland/E066.xml index fef97caf1de..1ac38c4d1a0 100644 --- a/data/Leland/E066.xml +++ b/data/Leland/E066.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E06A.xml b/data/Leland/E06A.xml index e3090c162d1..bb9726cfe71 100644 --- a/data/Leland/E06A.xml +++ b/data/Leland/E06A.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E06D.xml b/data/Leland/E06D.xml index 66282d9fad6..22a15987837 100644 --- a/data/Leland/E06D.xml +++ b/data/Leland/E06D.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E06E.xml b/data/Leland/E06E.xml index a413619e975..24fd1695520 100644 --- a/data/Leland/E06E.xml +++ b/data/Leland/E06E.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E082.xml b/data/Leland/E082.xml index c358ac2d291..d130ea48ded 100644 --- a/data/Leland/E082.xml +++ b/data/Leland/E082.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E083.xml b/data/Leland/E083.xml index 36bdba64dd7..6a469f449e4 100644 --- a/data/Leland/E083.xml +++ b/data/Leland/E083.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E084.xml b/data/Leland/E084.xml index 83809dbd7b2..0eb7a6bc690 100644 --- a/data/Leland/E084.xml +++ b/data/Leland/E084.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E085.xml b/data/Leland/E085.xml index 8ace81d6da4..715ffe1a9ed 100644 --- a/data/Leland/E085.xml +++ b/data/Leland/E085.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E086.xml b/data/Leland/E086.xml index 2be5ee80de5..45474d54774 100644 --- a/data/Leland/E086.xml +++ b/data/Leland/E086.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E087.xml b/data/Leland/E087.xml index b8e036d4f51..6d03c31623b 100644 --- a/data/Leland/E087.xml +++ b/data/Leland/E087.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E088.xml b/data/Leland/E088.xml index 724845e996c..4b569d77eeb 100644 --- a/data/Leland/E088.xml +++ b/data/Leland/E088.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E089.xml b/data/Leland/E089.xml index bfb916e647d..b6d62ffb846 100644 --- a/data/Leland/E089.xml +++ b/data/Leland/E089.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E08A.xml b/data/Leland/E08A.xml index e47d42fd35b..7879af0b57f 100644 --- a/data/Leland/E08A.xml +++ b/data/Leland/E08A.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E08B.xml b/data/Leland/E08B.xml index d42a715325c..79e07c02173 100644 --- a/data/Leland/E08B.xml +++ b/data/Leland/E08B.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E0A0.xml b/data/Leland/E0A0.xml index 73fa6026100..83f15d626f1 100644 --- a/data/Leland/E0A0.xml +++ b/data/Leland/E0A0.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E0A2.xml b/data/Leland/E0A2.xml index c02f172cc05..3dde1d424f0 100644 --- a/data/Leland/E0A2.xml +++ b/data/Leland/E0A2.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E0A3.xml b/data/Leland/E0A3.xml index e9fa6ec157b..adc86767f12 100644 --- a/data/Leland/E0A3.xml +++ b/data/Leland/E0A3.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E0AF.xml b/data/Leland/E0AF.xml index 189e1a86ee5..58febfa1747 100644 --- a/data/Leland/E0AF.xml +++ b/data/Leland/E0AF.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E0D9.xml b/data/Leland/E0D9.xml index 11cac9c92f2..ba20b3d21d3 100644 --- a/data/Leland/E0D9.xml +++ b/data/Leland/E0D9.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E0DB.xml b/data/Leland/E0DB.xml index fbf25eb58d4..caec0fe8e08 100644 --- a/data/Leland/E0DB.xml +++ b/data/Leland/E0DB.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E0F5.xml b/data/Leland/E0F5.xml index 55e5f3507cf..b54d70c4ddf 100644 --- a/data/Leland/E0F5.xml +++ b/data/Leland/E0F5.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E0F6.xml b/data/Leland/E0F6.xml index 8ece1c15d6f..7c38adcefec 100644 --- a/data/Leland/E0F6.xml +++ b/data/Leland/E0F6.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E240.xml b/data/Leland/E240.xml index 0d01092cf13..3d25b65fd6b 100644 --- a/data/Leland/E240.xml +++ b/data/Leland/E240.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E241.xml b/data/Leland/E241.xml index 55675716aa4..0afffd3056c 100644 --- a/data/Leland/E241.xml +++ b/data/Leland/E241.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E242.xml b/data/Leland/E242.xml index b3c6c123912..979341e4a19 100644 --- a/data/Leland/E242.xml +++ b/data/Leland/E242.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E243.xml b/data/Leland/E243.xml index 6dc27840c8a..c5eeba0897b 100644 --- a/data/Leland/E243.xml +++ b/data/Leland/E243.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E244.xml b/data/Leland/E244.xml index d69694acf21..845817092a7 100644 --- a/data/Leland/E244.xml +++ b/data/Leland/E244.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E245.xml b/data/Leland/E245.xml index 12af41b863f..14c4aeeee15 100644 --- a/data/Leland/E245.xml +++ b/data/Leland/E245.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E246.xml b/data/Leland/E246.xml index 04ee4c66230..290a001537c 100644 --- a/data/Leland/E246.xml +++ b/data/Leland/E246.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E247.xml b/data/Leland/E247.xml index 48fc4bdf0d0..8f7fd7a6605 100644 --- a/data/Leland/E247.xml +++ b/data/Leland/E247.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E248.xml b/data/Leland/E248.xml index 4fe9bbe48f7..d7327e47e93 100644 --- a/data/Leland/E248.xml +++ b/data/Leland/E248.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E249.xml b/data/Leland/E249.xml index 86aa7fdd4a6..c22e1078559 100644 --- a/data/Leland/E249.xml +++ b/data/Leland/E249.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E24A.xml b/data/Leland/E24A.xml index 99ca160d871..fa7856f4a72 100644 --- a/data/Leland/E24A.xml +++ b/data/Leland/E24A.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E24B.xml b/data/Leland/E24B.xml index 0fc5434fbe8..187f103f29d 100644 --- a/data/Leland/E24B.xml +++ b/data/Leland/E24B.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E24C.xml b/data/Leland/E24C.xml index 6411bf4c56c..fa67920c2a7 100644 --- a/data/Leland/E24C.xml +++ b/data/Leland/E24C.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E24D.xml b/data/Leland/E24D.xml index 27c115a5ad1..bca27e4a870 100644 --- a/data/Leland/E24D.xml +++ b/data/Leland/E24D.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E24E.xml b/data/Leland/E24E.xml index d26bb98225b..595f4b811a5 100644 --- a/data/Leland/E24E.xml +++ b/data/Leland/E24E.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E24F.xml b/data/Leland/E24F.xml index 1e376380303..6c952e89485 100644 --- a/data/Leland/E24F.xml +++ b/data/Leland/E24F.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E260.xml b/data/Leland/E260.xml index 0fb26990265..e5d5024e3aa 100644 --- a/data/Leland/E260.xml +++ b/data/Leland/E260.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E261.xml b/data/Leland/E261.xml index 288ec457346..1c87ae68aec 100644 --- a/data/Leland/E261.xml +++ b/data/Leland/E261.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E262.xml b/data/Leland/E262.xml index 985e2ea46cd..510ff0047c0 100644 --- a/data/Leland/E262.xml +++ b/data/Leland/E262.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E263.xml b/data/Leland/E263.xml index 7fca3023681..5486182cff7 100644 --- a/data/Leland/E263.xml +++ b/data/Leland/E263.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E264.xml b/data/Leland/E264.xml index a0f67d5bd76..2fcce5d32c0 100644 --- a/data/Leland/E264.xml +++ b/data/Leland/E264.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E265.xml b/data/Leland/E265.xml index 7c30c262653..94f2734e036 100644 --- a/data/Leland/E265.xml +++ b/data/Leland/E265.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E266.xml b/data/Leland/E266.xml index 17d1ab77b49..9081790a10c 100644 --- a/data/Leland/E266.xml +++ b/data/Leland/E266.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E267.xml b/data/Leland/E267.xml index ce56cbd44d6..ebf22416f3a 100644 --- a/data/Leland/E267.xml +++ b/data/Leland/E267.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E268.xml b/data/Leland/E268.xml index 5ff999df08e..64bf2e6c8a9 100644 --- a/data/Leland/E268.xml +++ b/data/Leland/E268.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E269.xml b/data/Leland/E269.xml index 28e1328e738..cd5882451a3 100644 --- a/data/Leland/E269.xml +++ b/data/Leland/E269.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E26A.xml b/data/Leland/E26A.xml index c7e8c32fcc4..446681f566a 100644 --- a/data/Leland/E26A.xml +++ b/data/Leland/E26A.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E26B.xml b/data/Leland/E26B.xml index 7024793a36f..8b1859a65bc 100644 --- a/data/Leland/E26B.xml +++ b/data/Leland/E26B.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E270.xml b/data/Leland/E270.xml index e5f3b9a42c7..f469edcc9e7 100644 --- a/data/Leland/E270.xml +++ b/data/Leland/E270.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E271.xml b/data/Leland/E271.xml index 93217248bce..131c1f561ec 100644 --- a/data/Leland/E271.xml +++ b/data/Leland/E271.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E272.xml b/data/Leland/E272.xml index 38fc3f9841b..a6ff6982bb2 100644 --- a/data/Leland/E272.xml +++ b/data/Leland/E272.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E273.xml b/data/Leland/E273.xml index 8e10b111a90..96b584ac7aa 100644 --- a/data/Leland/E273.xml +++ b/data/Leland/E273.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E274.xml b/data/Leland/E274.xml index fa4c0c1e8c1..ecdd466b56c 100644 --- a/data/Leland/E274.xml +++ b/data/Leland/E274.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E275.xml b/data/Leland/E275.xml index ff3550efadf..d7de7a97580 100644 --- a/data/Leland/E275.xml +++ b/data/Leland/E275.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E280.xml b/data/Leland/E280.xml index ae243dec532..cd8da24a778 100644 --- a/data/Leland/E280.xml +++ b/data/Leland/E280.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E281.xml b/data/Leland/E281.xml index 2553ff5c588..006c246f2ac 100644 --- a/data/Leland/E281.xml +++ b/data/Leland/E281.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E282.xml b/data/Leland/E282.xml index 0b249204a13..9ec6d8d9a3d 100644 --- a/data/Leland/E282.xml +++ b/data/Leland/E282.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E283.xml b/data/Leland/E283.xml index 373acb42340..d41c93e4e9e 100644 --- a/data/Leland/E283.xml +++ b/data/Leland/E283.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E440.xml b/data/Leland/E440.xml index da75b5f727a..78e410f78a3 100644 --- a/data/Leland/E440.xml +++ b/data/Leland/E440.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E442.xml b/data/Leland/E442.xml index c5c03840dbc..002e52bc194 100644 --- a/data/Leland/E442.xml +++ b/data/Leland/E442.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E446.xml b/data/Leland/E446.xml index 3f0ae1a1351..9e39462f21c 100644 --- a/data/Leland/E446.xml +++ b/data/Leland/E446.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E447.xml b/data/Leland/E447.xml index 3760e3b2549..3e296cb9b8e 100644 --- a/data/Leland/E447.xml +++ b/data/Leland/E447.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4A0.xml b/data/Leland/E4A0.xml index afb02ccbd6e..b7ae5ca1c09 100644 --- a/data/Leland/E4A0.xml +++ b/data/Leland/E4A0.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4A1.xml b/data/Leland/E4A1.xml index b68f2c33050..a77a22cffb1 100644 --- a/data/Leland/E4A1.xml +++ b/data/Leland/E4A1.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4A2.xml b/data/Leland/E4A2.xml index 31f221ae094..21520314903 100644 --- a/data/Leland/E4A2.xml +++ b/data/Leland/E4A2.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4A3.xml b/data/Leland/E4A3.xml index 048a9208202..f54442541e7 100644 --- a/data/Leland/E4A3.xml +++ b/data/Leland/E4A3.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4AE.xml b/data/Leland/E4AE.xml index c1a26420070..594be8d43cc 100644 --- a/data/Leland/E4AE.xml +++ b/data/Leland/E4AE.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4AF.xml b/data/Leland/E4AF.xml index 16fe991df87..48eea4323db 100644 --- a/data/Leland/E4AF.xml +++ b/data/Leland/E4AF.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4B0.xml b/data/Leland/E4B0.xml index 5325ee699a8..14200786e43 100644 --- a/data/Leland/E4B0.xml +++ b/data/Leland/E4B0.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4B1.xml b/data/Leland/E4B1.xml index 40eef847928..802d61d9147 100644 --- a/data/Leland/E4B1.xml +++ b/data/Leland/E4B1.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4B2.xml b/data/Leland/E4B2.xml index c3afd0b6c84..65edc9fa390 100644 --- a/data/Leland/E4B2.xml +++ b/data/Leland/E4B2.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4B3.xml b/data/Leland/E4B3.xml index 818f45a7de3..46c244385de 100644 --- a/data/Leland/E4B3.xml +++ b/data/Leland/E4B3.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4B4.xml b/data/Leland/E4B4.xml index c8e502340f0..dc3fec920d6 100644 --- a/data/Leland/E4B4.xml +++ b/data/Leland/E4B4.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4B5.xml b/data/Leland/E4B5.xml index 7143013a19a..45bda49b133 100644 --- a/data/Leland/E4B5.xml +++ b/data/Leland/E4B5.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4B6.xml b/data/Leland/E4B6.xml index dc4f51ed13c..404857a2a07 100644 --- a/data/Leland/E4B6.xml +++ b/data/Leland/E4B6.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4B7.xml b/data/Leland/E4B7.xml index 7d6546b71c9..f68e50775e9 100644 --- a/data/Leland/E4B7.xml +++ b/data/Leland/E4B7.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4B8.xml b/data/Leland/E4B8.xml index f4860216a22..8e3eedea5b3 100644 --- a/data/Leland/E4B8.xml +++ b/data/Leland/E4B8.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4B9.xml b/data/Leland/E4B9.xml index d521cd1f442..291ca41b50e 100644 --- a/data/Leland/E4B9.xml +++ b/data/Leland/E4B9.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4BA.xml b/data/Leland/E4BA.xml index 6205d216400..a9b3c0476b0 100644 --- a/data/Leland/E4BA.xml +++ b/data/Leland/E4BA.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4BB.xml b/data/Leland/E4BB.xml index 398303d4844..bb49b2ccf5e 100644 --- a/data/Leland/E4BB.xml +++ b/data/Leland/E4BB.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4BD.xml b/data/Leland/E4BD.xml index fb559f3cc36..c4c28bc3307 100644 --- a/data/Leland/E4BD.xml +++ b/data/Leland/E4BD.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4C0.xml b/data/Leland/E4C0.xml index c2ef454df64..ca313483417 100644 --- a/data/Leland/E4C0.xml +++ b/data/Leland/E4C0.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4C1.xml b/data/Leland/E4C1.xml index 8ad00deb3b7..e1505de999c 100644 --- a/data/Leland/E4C1.xml +++ b/data/Leland/E4C1.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4C4.xml b/data/Leland/E4C4.xml index ef2a3046f28..c391af560c3 100644 --- a/data/Leland/E4C4.xml +++ b/data/Leland/E4C4.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4C5.xml b/data/Leland/E4C5.xml index 28fb5569997..d36636254db 100644 --- a/data/Leland/E4C5.xml +++ b/data/Leland/E4C5.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4C8.xml b/data/Leland/E4C8.xml index 0b91d5f12d1..b50d8716a3e 100644 --- a/data/Leland/E4C8.xml +++ b/data/Leland/E4C8.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4C9.xml b/data/Leland/E4C9.xml index 59b70b18995..446ac914e84 100644 --- a/data/Leland/E4C9.xml +++ b/data/Leland/E4C9.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4CE.xml b/data/Leland/E4CE.xml index 50f7ae09b47..087bf5c5de1 100644 --- a/data/Leland/E4CE.xml +++ b/data/Leland/E4CE.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4E1.xml b/data/Leland/E4E1.xml index f6021bf214a..a37c00199a3 100644 --- a/data/Leland/E4E1.xml +++ b/data/Leland/E4E1.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4E5.xml b/data/Leland/E4E5.xml index 89101fafafa..cf55502e71a 100644 --- a/data/Leland/E4E5.xml +++ b/data/Leland/E4E5.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4E6.xml b/data/Leland/E4E6.xml index 627b8f41a9c..aa1442932cf 100644 --- a/data/Leland/E4E6.xml +++ b/data/Leland/E4E6.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4E7.xml b/data/Leland/E4E7.xml index 07c82100825..8298b4828bc 100644 --- a/data/Leland/E4E7.xml +++ b/data/Leland/E4E7.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4E8.xml b/data/Leland/E4E8.xml index 63e2a6ec7a2..3d4f18c7810 100644 --- a/data/Leland/E4E8.xml +++ b/data/Leland/E4E8.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4E9.xml b/data/Leland/E4E9.xml index 5afe6949ece..b30c06ab230 100644 --- a/data/Leland/E4E9.xml +++ b/data/Leland/E4E9.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4EA.xml b/data/Leland/E4EA.xml index f810aeaa9c1..33946307f58 100644 --- a/data/Leland/E4EA.xml +++ b/data/Leland/E4EA.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4EB.xml b/data/Leland/E4EB.xml index a1f40726b86..e3a8ed50673 100644 --- a/data/Leland/E4EB.xml +++ b/data/Leland/E4EB.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4EC.xml b/data/Leland/E4EC.xml index c47824799cf..865d0a1c15d 100644 --- a/data/Leland/E4EC.xml +++ b/data/Leland/E4EC.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4ED.xml b/data/Leland/E4ED.xml index 71d9cbd21c2..fef35fb8198 100644 --- a/data/Leland/E4ED.xml +++ b/data/Leland/E4ED.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4F2.xml b/data/Leland/E4F2.xml index 83db4811739..42bcd44c3c9 100644 --- a/data/Leland/E4F2.xml +++ b/data/Leland/E4F2.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E4F6.xml b/data/Leland/E4F6.xml index 57d40d0e5b9..a49d48ac350 100644 --- a/data/Leland/E4F6.xml +++ b/data/Leland/E4F6.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E500.xml b/data/Leland/E500.xml index 1506ca3e653..f0387d75200 100644 --- a/data/Leland/E500.xml +++ b/data/Leland/E500.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E501.xml b/data/Leland/E501.xml index 782b11b261b..99c84028d71 100644 --- a/data/Leland/E501.xml +++ b/data/Leland/E501.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E502.xml b/data/Leland/E502.xml index f30101c370e..d1e2aea837a 100644 --- a/data/Leland/E502.xml +++ b/data/Leland/E502.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E510.xml b/data/Leland/E510.xml index d86ffccda1c..3f78237c088 100644 --- a/data/Leland/E510.xml +++ b/data/Leland/E510.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E511.xml b/data/Leland/E511.xml index b55c43e64a7..d18b9057475 100644 --- a/data/Leland/E511.xml +++ b/data/Leland/E511.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E512.xml b/data/Leland/E512.xml index e56de61b91a..4c0ad927697 100644 --- a/data/Leland/E512.xml +++ b/data/Leland/E512.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E513.xml b/data/Leland/E513.xml index 965c83bf969..4509c50c9bc 100644 --- a/data/Leland/E513.xml +++ b/data/Leland/E513.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E515.xml b/data/Leland/E515.xml index b4b487e3870..01073265a14 100644 --- a/data/Leland/E515.xml +++ b/data/Leland/E515.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E516.xml b/data/Leland/E516.xml index 2c14e4d61d1..e8413226a1a 100644 --- a/data/Leland/E516.xml +++ b/data/Leland/E516.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E517.xml b/data/Leland/E517.xml index 224ff7ddf4d..84d8ea868eb 100644 --- a/data/Leland/E517.xml +++ b/data/Leland/E517.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E518.xml b/data/Leland/E518.xml index 0fa35ac3044..aeb7f7a28aa 100644 --- a/data/Leland/E518.xml +++ b/data/Leland/E518.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E519.xml b/data/Leland/E519.xml index 132400e3076..5d335cfc4c7 100644 --- a/data/Leland/E519.xml +++ b/data/Leland/E519.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E51A.xml b/data/Leland/E51A.xml index 3fb900b3833..fdaae99b73b 100644 --- a/data/Leland/E51A.xml +++ b/data/Leland/E51A.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E51B.xml b/data/Leland/E51B.xml index 0b572f8becd..a0b58845bfb 100644 --- a/data/Leland/E51B.xml +++ b/data/Leland/E51B.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E51C.xml b/data/Leland/E51C.xml index 9364df1e2f2..0e5b5ba6b24 100644 --- a/data/Leland/E51C.xml +++ b/data/Leland/E51C.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E51D.xml b/data/Leland/E51D.xml index a8abdc9dc5d..6e8a8c4b236 100644 --- a/data/Leland/E51D.xml +++ b/data/Leland/E51D.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E51E.xml b/data/Leland/E51E.xml index df0a0b52312..22638a6fae5 100644 --- a/data/Leland/E51E.xml +++ b/data/Leland/E51E.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E520.xml b/data/Leland/E520.xml index ad0205e542f..e65c838017c 100644 --- a/data/Leland/E520.xml +++ b/data/Leland/E520.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E521.xml b/data/Leland/E521.xml index 1454017e6ed..ada2b08b637 100644 --- a/data/Leland/E521.xml +++ b/data/Leland/E521.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E522.xml b/data/Leland/E522.xml index 817d30b256c..a429bbaa619 100644 --- a/data/Leland/E522.xml +++ b/data/Leland/E522.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E523.xml b/data/Leland/E523.xml index 03ab82570e5..1f9d28fb239 100644 --- a/data/Leland/E523.xml +++ b/data/Leland/E523.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E525.xml b/data/Leland/E525.xml index 95d2aaa77e9..607a5e5df5d 100644 --- a/data/Leland/E525.xml +++ b/data/Leland/E525.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E526.xml b/data/Leland/E526.xml index a922525e42a..7e89ea63399 100644 --- a/data/Leland/E526.xml +++ b/data/Leland/E526.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E527.xml b/data/Leland/E527.xml index 68f276ad5f8..7d6a3638c32 100644 --- a/data/Leland/E527.xml +++ b/data/Leland/E527.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E528.xml b/data/Leland/E528.xml index dec067dd401..49f591e054b 100644 --- a/data/Leland/E528.xml +++ b/data/Leland/E528.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E529.xml b/data/Leland/E529.xml index 90f6d9cc323..a7ed3b681f6 100644 --- a/data/Leland/E529.xml +++ b/data/Leland/E529.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E52A.xml b/data/Leland/E52A.xml index e113b8e373b..e0460b2a116 100644 --- a/data/Leland/E52A.xml +++ b/data/Leland/E52A.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E52B.xml b/data/Leland/E52B.xml index 056b684b8bc..a475999251e 100644 --- a/data/Leland/E52B.xml +++ b/data/Leland/E52B.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E52C.xml b/data/Leland/E52C.xml index b0db6b10ee7..3ce8d975980 100644 --- a/data/Leland/E52C.xml +++ b/data/Leland/E52C.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E52D.xml b/data/Leland/E52D.xml index 5ee19cde423..d6f7ae1be40 100644 --- a/data/Leland/E52D.xml +++ b/data/Leland/E52D.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E52E.xml b/data/Leland/E52E.xml index dd713d433f4..35517c6510a 100644 --- a/data/Leland/E52E.xml +++ b/data/Leland/E52E.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E52F.xml b/data/Leland/E52F.xml index 7aae392f1cd..ae820c17f65 100644 --- a/data/Leland/E52F.xml +++ b/data/Leland/E52F.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E530.xml b/data/Leland/E530.xml index 77e53a9c5fd..420be585cb1 100644 --- a/data/Leland/E530.xml +++ b/data/Leland/E530.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E531.xml b/data/Leland/E531.xml index 861853b3c00..aef32012bb2 100644 --- a/data/Leland/E531.xml +++ b/data/Leland/E531.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E532.xml b/data/Leland/E532.xml index f3ffff8d861..dbaad590445 100644 --- a/data/Leland/E532.xml +++ b/data/Leland/E532.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E533.xml b/data/Leland/E533.xml index 5b632cee412..8f319e85c64 100644 --- a/data/Leland/E533.xml +++ b/data/Leland/E533.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E534.xml b/data/Leland/E534.xml index 6a2831e75e3..37d638bc014 100644 --- a/data/Leland/E534.xml +++ b/data/Leland/E534.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E535.xml b/data/Leland/E535.xml index d72f3ddcd77..221dca6ef05 100644 --- a/data/Leland/E535.xml +++ b/data/Leland/E535.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E536.xml b/data/Leland/E536.xml index acb35a5cfbe..a1410be235a 100644 --- a/data/Leland/E536.xml +++ b/data/Leland/E536.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E537.xml b/data/Leland/E537.xml index f17fcaa8979..6d6f01d35e1 100644 --- a/data/Leland/E537.xml +++ b/data/Leland/E537.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E538.xml b/data/Leland/E538.xml index 7fd5c34085f..38e5a99d431 100644 --- a/data/Leland/E538.xml +++ b/data/Leland/E538.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E539.xml b/data/Leland/E539.xml index a99ebb621a5..4f71be726b0 100644 --- a/data/Leland/E539.xml +++ b/data/Leland/E539.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E53A.xml b/data/Leland/E53A.xml index 834bbd83f19..fe31ee4eafd 100644 --- a/data/Leland/E53A.xml +++ b/data/Leland/E53A.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E53B.xml b/data/Leland/E53B.xml index e8017be21c5..ff59674c521 100644 --- a/data/Leland/E53B.xml +++ b/data/Leland/E53B.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E53C.xml b/data/Leland/E53C.xml index d8279a406ef..7a48b2f33c2 100644 --- a/data/Leland/E53C.xml +++ b/data/Leland/E53C.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E53D.xml b/data/Leland/E53D.xml index f4dfb47caa2..120d05b4e6a 100644 --- a/data/Leland/E53D.xml +++ b/data/Leland/E53D.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E566.xml b/data/Leland/E566.xml index 270523050c4..48847c2b06d 100644 --- a/data/Leland/E566.xml +++ b/data/Leland/E566.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E567.xml b/data/Leland/E567.xml index 51a3ef8430a..0a1f7de17f7 100644 --- a/data/Leland/E567.xml +++ b/data/Leland/E567.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E568.xml b/data/Leland/E568.xml index fd8958ea916..82f8507d3dc 100644 --- a/data/Leland/E568.xml +++ b/data/Leland/E568.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E56A.xml b/data/Leland/E56A.xml index 44c7fd491f8..9494af55d50 100644 --- a/data/Leland/E56A.xml +++ b/data/Leland/E56A.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E56B.xml b/data/Leland/E56B.xml index 5d96d85ef34..39b68f07d64 100644 --- a/data/Leland/E56B.xml +++ b/data/Leland/E56B.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E56F.xml b/data/Leland/E56F.xml index 0aa20110f39..6120311e375 100644 --- a/data/Leland/E56F.xml +++ b/data/Leland/E56F.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E587.xml b/data/Leland/E587.xml index 49247f8c72e..55a6f637815 100644 --- a/data/Leland/E587.xml +++ b/data/Leland/E587.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E59D.xml b/data/Leland/E59D.xml index a4d825d59ae..8eaf36ddba9 100644 --- a/data/Leland/E59D.xml +++ b/data/Leland/E59D.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E59E.xml b/data/Leland/E59E.xml index a8080db2af7..424010304c0 100644 --- a/data/Leland/E59E.xml +++ b/data/Leland/E59E.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E5B2.xml b/data/Leland/E5B2.xml index 6df5b6b5fa5..8fb74e95542 100644 --- a/data/Leland/E5B2.xml +++ b/data/Leland/E5B2.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E5B5.xml b/data/Leland/E5B5.xml index 18554711c0f..8a6f2c2e25b 100644 --- a/data/Leland/E5B5.xml +++ b/data/Leland/E5B5.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E5B8.xml b/data/Leland/E5B8.xml index 4e665d51f7b..fcebe7d110f 100644 --- a/data/Leland/E5B8.xml +++ b/data/Leland/E5B8.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E5BB.xml b/data/Leland/E5BB.xml index be98da33f6f..36dadee8b04 100644 --- a/data/Leland/E5BB.xml +++ b/data/Leland/E5BB.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E5BC.xml b/data/Leland/E5BC.xml index d0f645f17b4..73128597461 100644 --- a/data/Leland/E5BC.xml +++ b/data/Leland/E5BC.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E5BD.xml b/data/Leland/E5BD.xml index 63bcf3effd7..d324d25f1a5 100644 --- a/data/Leland/E5BD.xml +++ b/data/Leland/E5BD.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E5BE.xml b/data/Leland/E5BE.xml index 061b422b057..80b87913b21 100644 --- a/data/Leland/E5BE.xml +++ b/data/Leland/E5BE.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E5C0.xml b/data/Leland/E5C0.xml index add821710b9..850ec206d2f 100644 --- a/data/Leland/E5C0.xml +++ b/data/Leland/E5C0.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E5C3.xml b/data/Leland/E5C3.xml index 312478e95af..0502391f4fa 100644 --- a/data/Leland/E5C3.xml +++ b/data/Leland/E5C3.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E5C6.xml b/data/Leland/E5C6.xml index e0a63d6f9a7..e60971f84ec 100644 --- a/data/Leland/E5C6.xml +++ b/data/Leland/E5C6.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E5C7.xml b/data/Leland/E5C7.xml index e8ac5f34c22..a8d167db299 100644 --- a/data/Leland/E5C7.xml +++ b/data/Leland/E5C7.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E5C8.xml b/data/Leland/E5C8.xml index afc2f27c7ee..14467130eb3 100644 --- a/data/Leland/E5C8.xml +++ b/data/Leland/E5C8.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E5E6.xml b/data/Leland/E5E6.xml index 1b83fd24541..832c2b0a5c5 100644 --- a/data/Leland/E5E6.xml +++ b/data/Leland/E5E6.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E612.xml b/data/Leland/E612.xml index 5601b0f499d..eb4b8491d37 100644 --- a/data/Leland/E612.xml +++ b/data/Leland/E612.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E613.xml b/data/Leland/E613.xml index 26df9057438..e6ce8bd7191 100644 --- a/data/Leland/E613.xml +++ b/data/Leland/E613.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E614.xml b/data/Leland/E614.xml index 7ff474d5354..cc19c9aa8cd 100644 --- a/data/Leland/E614.xml +++ b/data/Leland/E614.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E630.xml b/data/Leland/E630.xml index 7f3ab6b6b67..b9812a0c490 100644 --- a/data/Leland/E630.xml +++ b/data/Leland/E630.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E632.xml b/data/Leland/E632.xml index 3fb6f9caedd..df268640f88 100644 --- a/data/Leland/E632.xml +++ b/data/Leland/E632.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E650.xml b/data/Leland/E650.xml index 4e9cab7471b..8d35b286b52 100644 --- a/data/Leland/E650.xml +++ b/data/Leland/E650.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E651.xml b/data/Leland/E651.xml index 8aa64f74e69..55d7a681959 100644 --- a/data/Leland/E651.xml +++ b/data/Leland/E651.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E655.xml b/data/Leland/E655.xml index fdf68e70a6c..13bafb34637 100644 --- a/data/Leland/E655.xml +++ b/data/Leland/E655.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E880.xml b/data/Leland/E880.xml index bb47ef425ac..1480762eaca 100644 --- a/data/Leland/E880.xml +++ b/data/Leland/E880.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E883.xml b/data/Leland/E883.xml index daa786bc38d..a474291b38b 100644 --- a/data/Leland/E883.xml +++ b/data/Leland/E883.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E886.xml b/data/Leland/E886.xml index d901b1d8b38..17a85934502 100644 --- a/data/Leland/E886.xml +++ b/data/Leland/E886.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E887.xml b/data/Leland/E887.xml index adf9b51fdb9..c547a89c945 100644 --- a/data/Leland/E887.xml +++ b/data/Leland/E887.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E888.xml b/data/Leland/E888.xml index 4d0f7fee246..513f5744103 100644 --- a/data/Leland/E888.xml +++ b/data/Leland/E888.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E889.xml b/data/Leland/E889.xml index 692b7c3dc23..a1f54457cd5 100644 --- a/data/Leland/E889.xml +++ b/data/Leland/E889.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E93C.xml b/data/Leland/E93C.xml index 45c33675a94..d3e4be52f4c 100644 --- a/data/Leland/E93C.xml +++ b/data/Leland/E93C.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/E93D.xml b/data/Leland/E93D.xml index b97be880543..b542103f0f2 100644 --- a/data/Leland/E93D.xml +++ b/data/Leland/E93D.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/EAAD.xml b/data/Leland/EAAD.xml index b79eb6ef0f4..d60210a2c76 100644 --- a/data/Leland/EAAD.xml +++ b/data/Leland/EAAD.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leland/EAAE.xml b/data/Leland/EAAE.xml index ac30ea1a826..92772109a15 100644 --- a/data/Leland/EAAE.xml +++ b/data/Leland/EAAE.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/fonts/Leland.svg b/fonts/Leland.svg index a8132279fa2..8e4d4c63fdf 100644 --- a/fonts/Leland.svg +++ b/fonts/Leland.svg @@ -2,7 +2,7 @@ -Created by FontForge 20201107 at Thu Nov 25 15:58:24 2021 +Created by FontForge 20201107 at Sun Feb 20 09:14:11 2022 By Klaus Rettinghaus Copyright \(c\) 2021, MuseScore BVBA \(http://www.musescore.org/\) @@ -19,209 +19,230 @@ Copyright \(c\) 2021, MuseScore BVBA \(http://www.musescore.org/\) bbox="-273 -2005 2276 2004" underline-thickness="50" underline-position="-125" - stemh="32" + stemh="30" stemv="28" unicode-range="U+000D-F630" /> +d="M1880 259c15 -4 57 -21 57 -88c0 -16 -2 -34 -8 -56c-21 -81 -77 -137 -132 -137c-6 0 -13 0 -19 2c-34 9 -44 31 -44 31l-3 7l-58 -161h76v-20h-225v20h62l99 276c12 32 23 58 23 75c0 11 -5 18 -15 21c-3 1 -5 1 -8 1c-16 0 -35 -13 -43 -26c-10 -17 -23 -40 -38 -90 +c-21 -80 -76 -136 -131 -136c-6 0 -13 0 -19 2c-34 9 -44 31 -44 31l-2 7l-59 -161h76v-20h-225v20h62l99 276c12 32 23 58 23 75c0 11 -5 18 -15 21c-3 1 -5 1 -8 1c-16 0 -35 -13 -43 -26c-10 -17 -22 -40 -37 -90c-21 -80 -77 -136 -132 -136c-6 0 -13 0 -19 2 +c-34 9 -44 31 -44 31l-2 7l-59 -161h76v-20h-225v20h62l99 276c12 32 23 58 23 75c0 11 -5 18 -15 21c-3 1 -5 1 -8 1c-16 0 -35 -13 -43 -26c-10 -17 -22 -40 -37 -90c-21 -80 -77 -136 -132 -136c-6 0 -13 0 -19 2c-34 9 -43 31 -43 31l-3 7l-59 -161h76v-20h-225v20h62 +l99 276c12 32 23 58 23 75c0 10 -4 18 -14 21c-3 1 -5 1 -8 1c-16 0 -35 -13 -43 -26c-10 -17 -23 -40 -38 -90c-21 -80 -77 -136 -132 -136c-6 0 -13 0 -19 2c-34 9 -43 31 -43 31l-3 7l-59 -161h76v-20h-225v20h62l99 276c12 32 23 58 23 75c0 10 -4 18 -14 21 +c-3 1 -5 1 -8 1c-16 0 -35 -13 -43 -26c-10 -17 -23 -40 -38 -90c-21 -80 -76 -136 -131 -136c-6 0 -13 0 -19 2c-34 9 -44 31 -44 31l-3 7l-58 -161h75v-20h-224v20h61l99 276c5 10 23 53 23 77c0 7 -1 12 -5 15c-2 1 -5 2 -8 2h-4c-9 -2 -21 -10 -27 -19 +c-12 -16 -22 -47 -26 -60l-18 9c29 83 63 106 96 106c4 0 7 -1 11 -1c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c13 -3 46 -16 55 -63c23 54 67 67 101 67c5 0 10 0 15 -1c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2 +c13 -3 46 -16 55 -63c23 54 67 67 101 67c5 0 10 0 15 -1c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c13 -3 46 -16 55 -63c23 53 66 66 100 66c6 0 11 0 16 -1c35 -5 56 -43 56 -43l2 -3l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c13 -3 46 -16 55 -63 +c23 53 66 66 100 66c6 0 11 0 16 -1c35 -5 56 -43 56 -43l2 -3l2 3c17 17 49 43 80 43c4 0 9 -1 13 -2c13 -3 46 -16 55 -63c23 53 66 66 100 66c6 0 11 0 16 -1c35 -5 56 -43 56 -43l2 -3l2 3c17 17 49 43 80 43c4 0 9 -1 13 -2zM231 112c6 18 16 54 16 81c0 9 -1 17 -4 23 +c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 6 -2 8 -2c3 0 8 1 11 3c25 12 50 59 63 98zM554 112h1c6 18 16 54 16 81c0 9 -1 17 -4 23c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1 +c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 5 -2 7 -2h1c3 0 8 1 11 3c25 12 49 59 62 98zM878 112c6 18 17 55 17 82c0 9 -1 17 -4 22c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95 +c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 5 -2 7 -2c3 0 9 1 12 3c25 12 49 59 62 98zM1202 112c6 18 17 55 17 82c0 9 -1 17 -4 22c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -13 -2 -20 -6c-26 -15 -54 -57 -63 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43 +c2 -1 5 -2 7 -2c3 0 9 1 12 3c25 12 49 59 62 98zM1526 112c6 18 17 55 17 82c0 9 -1 17 -4 22c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -13 -2 -20 -6c-26 -15 -54 -57 -63 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 5 -2 7 -2c3 0 9 1 12 3c25 12 49 59 62 98z +M1850 112c6 18 17 55 17 82c0 9 -1 17 -4 22c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -13 -2 -20 -6c-26 -15 -54 -57 -63 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 5 -2 7 -2c3 0 9 1 12 3c25 12 49 59 62 98z" /> +d="M1556 259c15 -4 57 -21 57 -88c0 -16 -2 -34 -8 -56c-21 -81 -77 -137 -132 -137c-6 0 -13 0 -19 2c-34 9 -44 31 -44 31l-2 7l-59 -161h76v-20h-225v20h62l99 276c12 32 23 58 23 75c0 10 -4 18 -14 21c-3 1 -5 1 -8 1c-17 0 -36 -13 -44 -26c-10 -17 -22 -40 -37 -90 +c-21 -80 -77 -136 -132 -136c-6 0 -13 0 -19 2c-34 9 -43 31 -43 31l-3 7l-59 -161h76v-20h-225v20h62l99 276c12 32 23 58 23 75c0 10 -4 18 -14 21c-3 1 -5 1 -8 1c-17 0 -36 -13 -44 -26c-10 -17 -22 -40 -37 -90c-21 -80 -77 -136 -132 -136c-6 0 -13 0 -19 2 +c-34 9 -43 31 -43 31l-3 7l-58 -161h75v-20h-225v20h62l99 276c12 32 23 58 23 75c0 10 -4 18 -14 21c-3 1 -5 1 -8 1c-16 0 -35 -13 -43 -26c-10 -17 -23 -40 -38 -90c-21 -80 -77 -136 -132 -136c-6 0 -13 0 -19 2c-34 9 -43 31 -43 31l-3 7l-58 -161h75v-20h-225v20h62 +l99 276c12 32 23 58 23 75c0 10 -4 18 -14 21c-3 1 -5 1 -8 1c-16 0 -35 -13 -43 -26c-10 -17 -23 -40 -38 -90c-21 -80 -76 -136 -131 -136c-6 0 -13 0 -19 2c-34 9 -44 31 -44 31l-3 7l-58 -161h75v-20h-224v20h61l99 276c5 10 23 53 23 77c0 7 -1 12 -5 15 +c-2 1 -5 2 -8 2h-4c-9 -2 -21 -10 -27 -19c-12 -16 -22 -47 -26 -60l-18 9c29 83 63 105 96 105c4 0 7 0 11 -1c35 -5 56 -43 56 -43l2 -3l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c13 -3 46 -16 55 -63c23 53 66 66 100 66c6 0 11 0 16 -1c35 -5 56 -43 56 -43l2 -3l3 3 +c17 17 48 43 79 43c4 0 9 -1 13 -2c13 -3 46 -17 55 -64c23 54 67 67 101 67c5 0 10 0 15 -1c35 -5 56 -43 56 -43l2 -3l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c13 -3 46 -17 55 -64c23 54 67 67 101 67c5 0 10 0 15 -1c35 -5 56 -43 56 -43l2 -3l3 3c17 17 48 43 79 43 +c4 0 9 -1 13 -2c13 -3 46 -17 55 -64c23 54 67 67 101 67c5 0 10 0 15 -1c35 -5 56 -43 56 -43l2 -3l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2zM231 112c6 18 16 54 16 81c0 9 -1 17 -4 23c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95 +c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 6 -2 8 -2c3 0 8 1 11 3c25 12 50 59 63 98zM555 112c6 18 16 54 16 81c0 9 -1 17 -4 23c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43 +c2 -1 6 -2 8 -2c3 0 8 1 11 3c25 12 50 59 63 98zM879 112h-1c6 18 17 55 17 82c0 9 -1 17 -4 22c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 6 -2 8 -2c3 0 8 1 11 3c25 12 50 59 63 98z +M1202 112c6 18 17 55 17 82c0 9 -1 17 -4 22c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 5 -2 7 -2c3 0 9 1 12 3c25 12 49 59 62 98zM1526 112c6 18 17 55 17 82c0 9 -1 17 -4 22 +c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 5 -2 7 -2c3 0 9 1 12 3c25 12 49 59 62 98z" /> +d="M1232 259c15 -4 57 -21 57 -88c0 -16 -2 -34 -8 -56c-21 -81 -77 -137 -132 -137c-6 0 -13 0 -19 2c-34 9 -44 31 -44 31l-2 7l-59 -161h76v-20h-225v20h62l99 276c12 32 23 58 23 75c0 10 -4 18 -14 21c-3 1 -5 1 -8 1c-17 0 -36 -13 -44 -26c-10 -17 -22 -40 -37 -90 +c-21 -80 -77 -136 -132 -136c-6 0 -13 0 -19 2c-34 9 -43 31 -43 31l-3 7l-59 -161h76v-20h-225v20h62l99 276c12 32 23 58 23 75c0 10 -4 18 -14 21c-3 1 -5 1 -8 1c-17 0 -36 -13 -44 -26c-10 -17 -22 -40 -37 -90c-21 -80 -77 -136 -132 -136c-6 0 -13 0 -19 2 +c-34 9 -43 31 -43 31l-3 7l-58 -161h75v-20h-225v20h62l99 276c12 32 23 58 23 75c0 10 -4 18 -14 21c-3 1 -5 1 -8 1c-16 0 -35 -13 -43 -26c-10 -17 -23 -40 -38 -90c-21 -80 -76 -136 -131 -136c-6 0 -13 0 -19 2c-34 9 -44 31 -44 31l-3 7l-58 -161h75v-20h-224v20h61 +l99 276c5 10 23 53 23 77c0 7 -1 12 -5 15c-2 1 -5 2 -8 2h-4c-9 -2 -21 -10 -27 -19c-12 -16 -22 -47 -26 -60l-18 9c29 83 63 106 96 106c4 0 7 -1 11 -1c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c13 -3 46 -16 55 -63c23 53 66 66 100 66 +c6 0 11 0 16 -1c35 -5 56 -43 56 -43l2 -3l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c13 -3 46 -16 55 -63c23 53 66 66 100 66c6 0 11 0 16 -1c35 -5 56 -43 56 -43l2 -3l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c13 -3 46 -16 55 -63c23 53 66 66 100 66c6 0 11 0 16 -1 +c35 -5 56 -43 56 -43l2 -3l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2zM231 112c6 18 16 54 16 81c0 9 -1 17 -4 23c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 6 -2 8 -2c3 0 8 1 11 3 +c25 12 50 59 63 98zM555 112c6 18 16 54 16 81c0 9 -1 17 -4 23c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 5 -2 7 -2h1c3 0 8 1 11 3c25 12 50 59 63 98zM878 112c6 18 17 55 17 82 +c0 9 -1 17 -4 22c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 5 -2 7 -2c3 0 9 1 12 3c25 12 49 59 62 98zM1202 112c6 18 17 55 17 82c0 9 -1 17 -4 22c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1 +c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 5 -2 7 -2c3 0 9 1 12 3c25 12 49 59 62 98z" /> +d="M908 259c15 -4 57 -21 57 -88c0 -16 -2 -34 -8 -56c-21 -81 -77 -137 -132 -137c-6 0 -13 0 -19 2c-34 9 -43 31 -43 31l-3 7l-59 -161h76v-20h-225v20h62l99 276c12 32 23 58 23 75c0 10 -4 18 -14 21c-3 1 -5 1 -8 1c-16 0 -35 -13 -43 -26c-10 -17 -23 -40 -38 -90 +c-21 -80 -77 -136 -132 -136c-6 0 -13 0 -19 2c-34 9 -43 31 -43 31l-3 7l-58 -161h75v-20h-225v20h62l99 276c12 32 23 58 23 75c0 10 -4 18 -14 21c-3 1 -5 1 -8 1c-16 0 -35 -13 -43 -26c-10 -17 -23 -40 -38 -90c-21 -80 -76 -136 -131 -136c-6 0 -13 0 -19 2 +c-34 9 -44 31 -44 31l-3 7l-58 -161h75v-20h-224v20h61l99 276c5 10 23 54 23 78c0 7 -1 12 -5 15c-2 1 -5 2 -8 2h-4c-9 -2 -20 -10 -26 -19c-12 -16 -23 -48 -27 -61l-18 9c29 83 63 106 96 106c4 0 7 -1 11 -1c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43 +c4 0 9 -1 13 -2c13 -3 46 -16 55 -63c23 54 67 67 101 67c5 0 10 0 15 -1c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c13 -3 46 -16 55 -63c23 54 67 67 101 67c5 0 10 0 15 -1c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2z +M231 112c6 18 16 54 16 81c0 9 -1 17 -4 23c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 6 -1 8 -1c3 0 8 0 11 2c25 12 50 59 63 98zM555 112c6 18 16 54 16 81c0 9 -1 17 -4 23 +c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 6 -1 8 -1c3 0 8 0 11 2c25 12 50 59 63 98zM879 112h-1c6 18 17 55 17 82c0 9 -1 17 -4 22c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1 +c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 5 -1 7 -1c3 0 9 0 12 2c25 12 50 59 63 98z" /> +d="M584 259c15 -4 57 -21 57 -88c0 -16 -2 -34 -8 -56c-21 -81 -77 -137 -132 -137c-6 0 -13 0 -19 2c-34 9 -43 31 -43 31l-3 7l-58 -161h75v-20h-225v20h62l99 276c12 32 23 58 23 75c0 10 -4 18 -14 21c-3 1 -5 1 -8 1c-16 0 -35 -13 -43 -26c-10 -17 -23 -40 -38 -90 +c-21 -80 -76 -136 -131 -136c-6 0 -13 0 -19 2c-34 9 -44 31 -44 31l-3 7l-58 -161h75v-20h-224v20h61l99 276c5 10 23 54 23 78c0 7 -1 12 -5 15c-2 1 -5 2 -8 2h-4c-9 -2 -20 -10 -26 -19c-12 -16 -23 -48 -27 -61l-18 9c29 83 63 106 96 106c4 0 7 -1 11 -1 +c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c13 -3 46 -16 55 -63c23 54 67 67 101 67c5 0 10 0 15 -1c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2zM231 112c6 18 16 54 16 81c0 9 -1 17 -4 23c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1 +c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 6 -1 8 -1c3 0 8 0 11 2c25 12 50 59 63 98zM555 112c6 18 16 54 16 81c0 9 -1 17 -4 23c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95 +c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 6 -1 8 -1c3 0 8 0 11 2c25 12 50 59 63 98z" /> +d="M508 -163h-224v20h61l99 276c5 10 23 54 23 78c0 7 -1 12 -5 15c-2 1 -5 2 -8 2h-4c-9 -2 -21 -10 -27 -19c-12 -16 -22 -48 -26 -61l-18 9c29 83 63 106 96 106c4 0 7 -1 11 -1c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c15 -4 57 -21 57 -88 +c0 -16 -2 -34 -8 -56c-21 -81 -76 -137 -131 -137c-6 0 -13 0 -19 2c-34 9 -44 31 -44 31l-3 7l-58 -161h75v-20zM536 12c3 0 8 0 11 2c25 12 50 59 63 98c6 18 16 54 16 81c0 9 -1 17 -4 23c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95 +c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 6 -1 8 -1zM339 44c7 12 18 39 18 39l17 -8c-1 -2 -1 -4 -2 -6c-13 -35 -30 -71 -75 -71c-14 0 -32 6 -40 18c-7 10 -10 22 -10 36s3 29 9 45c21 54 27 94 27 104c0 5 -3 8 -5 9c-1 0 -1 1 -2 1h-1c-1 0 -2 -1 -3 -1 +c-23 -10 -55 -52 -75 -192c0 -3 -1 -6 -1 -7c-2 -11 -7 -12 -11 -12h-55c-3 0 -6 1 -8 3s-2 6 -2 9v4c0 0 15 47 30 96c12 41 22 73 22 90c0 5 -1 9 -3 11c-1 2 -4 3 -6 3c-34 0 -71 -131 -75 -146c-4 -14 -9 -32 -14 -54c-4 -16 -9 -16 -11 -16h-38h-15c-4 0 -6 2 -8 4 +c-1 2 -2 4 -2 6s1 3 1 5c3 9 40 120 40 121c11 32 19 56 19 70c0 8 -2 13 -8 15c-2 1 -3 1 -5 1c-22 0 -39 -54 -39 -54l-15 8c7 22 21 46 27 53c7 8 22 23 47 23c4 0 9 0 14 -1c25 -5 38 -34 38 -34l1 -5l3 4c17 23 38 34 66 34c27 0 43 -35 43 -35l2 -5l2 4 +c13 17 41 36 67 36c21 0 33 -13 38 -40c1 -4 1 -9 1 -14c0 -27 -7 -68 -13 -86c-2 -5 -7 -25 -9 -31c-4 -13 -8 -25 -8 -33c0 -5 2 -9 7 -11c2 -1 3 -1 5 -1c5 0 10 2 15 11z" /> +d="M289 -60c36 0 45 -26 45 -40c0 -16 -6 -34 -25 -42c-5 -2 -7 -6 -8 -10v-2c0 -4 2 -7 5 -9c4 -3 9 -5 14 -5c6 0 12 2 17 5c24 16 30 45 51 127l3 12c12 46 21 84 29 121c7 33 15 67 25 107v4h-62c-6 0 -10 4 -10 10v22c0 6 4 10 10 10h76v2c22 65 45 109 71 132 +c33 29 64 37 88 37c6 0 12 0 17 -1c32 -5 55 -23 63 -38c7 -12 10 -25 10 -37c0 -6 0 -12 -2 -17c-3 -11 -13 -24 -23 -29c-9 -5 -17 -7 -24 -7s-14 2 -18 4c-10 4 -18 13 -21 22c-1 5 -2 9 -2 14c0 14 5 27 15 35c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8 +c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -132v-3h59c6 0 10 -4 10 -10v-22c0 -6 -4 -10 -10 -10h-72v-2c-7 -23 -16 -54 -25 -86c-24 -85 -72 -234 -116 -278c-25 -25 -48 -35 -80 -35c-46 0 -81 29 -81 81c0 27 25 52 52 52zM339 44c7 12 18 39 18 39 +l17 -8c-1 -2 -1 -4 -2 -6c-13 -35 -30 -71 -75 -71c-14 0 -32 6 -40 18c-7 10 -10 22 -10 36s3 29 9 45c21 54 27 94 27 104c0 5 -3 8 -5 9c-1 0 -1 1 -2 1h-1c-1 0 -2 -1 -3 -1c-23 -10 -55 -52 -75 -192c0 -3 -1 -6 -1 -7c-2 -11 -7 -12 -11 -12h-55c-3 0 -6 1 -8 3 +s-2 6 -2 9v4c0 0 15 47 30 96c12 41 22 73 22 90c0 5 -1 9 -3 11c-1 2 -4 3 -6 3c-34 0 -71 -131 -75 -146c-4 -14 -9 -32 -14 -54c-4 -16 -9 -16 -11 -16h-38h-15c-4 0 -6 2 -8 4c-1 2 -2 4 -2 6s1 3 1 5c3 9 40 120 40 121c11 32 19 56 19 70c0 8 -2 13 -8 15 +c-2 1 -3 1 -5 1c-22 0 -39 -54 -39 -54l-15 8c7 22 21 46 27 53c7 8 22 23 47 23c4 0 9 0 14 -1c25 -5 38 -34 38 -34l1 -5l3 4c17 23 38 34 66 34c27 0 43 -35 43 -35l2 -5l2 4c13 17 41 36 67 36c21 0 33 -13 38 -40c1 -4 1 -9 1 -14c0 -27 -7 -68 -13 -86 +c-2 -5 -7 -25 -9 -31c-4 -13 -8 -25 -8 -33c0 -5 2 -9 7 -11c2 -1 3 -1 5 -1c5 0 10 2 15 11z" /> +d="M129 -163h-224v20h61l99 276c5 10 23 54 23 78c0 7 -1 12 -5 15c-2 1 -5 2 -8 2h-4c-9 -2 -21 -10 -27 -19c-12 -16 -22 -48 -26 -61l-18 9c29 83 63 106 96 106c4 0 7 -1 11 -1c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c15 -4 57 -21 57 -88 +c0 -16 -2 -34 -8 -56c-21 -81 -76 -137 -131 -137c-6 0 -13 0 -19 2c-34 9 -44 31 -44 31l-3 7l-58 -161h75v-20zM157 12c3 0 8 0 11 2c25 12 50 59 63 98c6 18 16 54 16 81c0 9 -1 17 -4 23c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95 +c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 6 -1 8 -1zM277 -60c36 0 45 -26 45 -40c0 -16 -6 -34 -25 -42c-5 -2 -7 -6 -8 -10v-2c0 -4 2 -7 5 -9c4 -3 9 -5 14 -5c6 0 12 2 17 5c24 16 30 45 51 127l3 12c12 46 21 84 29 121c7 33 15 67 25 107v4h-62 +c-6 0 -10 4 -10 10v22c0 6 4 10 10 10h76v2c22 65 45 109 71 132c33 29 64 37 88 37c6 0 12 0 17 -1c32 -5 55 -23 63 -38c7 -12 10 -25 10 -37c0 -6 0 -12 -2 -17c-3 -11 -13 -24 -23 -29c-9 -5 -17 -7 -24 -7s-14 2 -18 4c-10 4 -18 13 -21 22c-1 5 -2 9 -2 14 +c0 14 5 27 15 35c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -132v-3h59c6 0 10 -4 10 -10v-22c0 -6 -4 -10 -10 -10h-72v-2c-7 -23 -16 -54 -25 -86c-24 -85 -72 -234 -116 -278c-25 -25 -48 -35 -80 -35 +c-46 0 -81 29 -81 81c0 27 25 52 52 52z" /> +d="M181 253l-1 -3h156l1 2c22 66 45 109 71 133c32 30 63 37 87 37c7 0 13 0 18 -1c32 -5 57 -23 65 -38c7 -11 10 -23 10 -35c0 -6 -1 -13 -3 -19c-3 -11 -13 -24 -23 -29s-19 -7 -26 -7c-6 0 -12 1 -16 3c-10 4 -18 14 -21 23c-1 5 -2 10 -2 15c0 13 5 26 15 34 +c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -133l-1 -3h60c6 0 10 -4 10 -10v-22c0 -6 -4 -10 -10 -10h-73v-2c-7 -23 -16 -55 -25 -87c-25 -85 -73 -235 -117 -279c-25 -25 -48 -36 -80 -36c-46 0 -82 29 -82 82 +c0 27 25 52 52 52c36 0 46 -26 46 -40c0 -16 -6 -35 -25 -43c-5 -2 -8 -5 -9 -9c-1 -5 3 -10 6 -12c4 -3 8 -4 13 -4c6 0 12 2 17 5c24 16 31 45 52 127l3 12c12 46 21 85 29 122c7 33 15 68 25 108l1 4h-156v-2c-7 -23 -16 -55 -25 -87c-25 -85 -73 -235 -117 -279 +c-25 -25 -48 -36 -80 -36c-46 0 -82 28 -82 81c0 27 25 53 52 53c36 0 46 -26 46 -40c0 -16 -6 -35 -25 -43c-5 -2 -8 -6 -9 -10c-1 -5 3 -9 6 -11c4 -3 8 -4 13 -4c6 0 12 2 17 5c24 16 31 45 52 127l3 12c12 46 21 85 29 122c7 33 15 68 25 108l1 4h-63c-6 0 -10 4 -10 10 +v22c0 6 4 10 10 10h76l1 2c22 66 45 109 71 133c32 30 63 37 87 37c7 0 13 0 18 -1c32 -5 57 -23 65 -38c7 -11 10 -23 10 -35c0 -6 -1 -13 -3 -19c-3 -11 -13 -24 -23 -29s-19 -7 -26 -7c-6 0 -12 1 -16 3c-10 4 -18 14 -21 23c-1 5 -2 10 -2 15c0 13 5 26 15 34 +c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -133z" /> +d="M837 357v-1c0 -3 1 -7 1 -10c0 -5 -1 -12 -2 -17c-3 -11 -14 -24 -24 -29c-9 -5 -17 -6 -24 -6h-5c-4 0 -10 2 -13 3c-6 2 -13 9 -17 14c-2 2 -3 5 -4 8c-2 5 -2 11 -2 16c0 13 5 25 15 33c5 4 6 7 6 13c0 4 -2 13 -16 13c-11 0 -16 -4 -20 -7c-2 -2 -7 -7 -9 -10 +c-10 -14 -20 -43 -42 -123l-1 -3h60c6 0 10 -5 10 -11v-22c0 -6 -4 -10 -10 -10h-72l-1 -1v-1c-7 -23 -16 -55 -25 -87c-25 -85 -73 -235 -117 -279c-25 -25 -48 -35 -80 -35c-5 0 -13 0 -18 1c-37 6 -64 34 -64 80c0 27 25 52 52 52c36 0 46 -26 46 -40 +c0 -16 -6 -35 -25 -43c-1 0 -9 -2 -9 -9s5 -16 19 -16c4 0 5 0 8 1s7 2 9 4c9 6 16 14 22 26c10 20 17 51 30 102l3 12c9 37 16 69 24 99l34 134h-159v-2c-7 -23 -16 -55 -25 -87c-25 -85 -73 -235 -117 -279c-25 -25 -48 -36 -80 -36c-46 0 -82 29 -82 82c0 27 25 52 52 52 +c36 0 46 -26 46 -40c0 -16 -6 -35 -25 -43c-5 -2 -8 -5 -9 -9c-1 -5 3 -10 6 -12c4 -3 8 -4 13 -4c6 0 12 2 17 5c24 16 31 45 52 127l3 12c12 46 21 85 29 122c7 33 15 68 25 108l1 4h-156v-2c-7 -23 -16 -55 -25 -87c-25 -85 -73 -235 -117 -279c-25 -25 -48 -36 -80 -36 +c-46 0 -82 28 -82 81c0 27 25 53 52 53c36 0 46 -26 46 -40c0 -16 -6 -35 -25 -43c-5 -2 -8 -5 -9 -9c-1 -5 3 -10 6 -12c4 -3 8 -4 13 -4c6 0 12 2 17 5c24 16 31 45 52 127l3 12c12 46 21 85 29 122c7 33 15 68 25 108l1 4h-63c-6 0 -10 4 -10 10v22c0 6 4 10 10 10h76 +l1 2c22 66 45 109 71 133c32 30 63 37 87 37c7 0 13 0 18 -1c32 -5 57 -23 65 -38c7 -11 10 -23 10 -35c0 -6 -1 -13 -3 -19c-3 -11 -13 -24 -23 -29s-19 -7 -26 -7c-6 0 -12 1 -16 3c-10 4 -18 14 -21 23c-1 5 -2 10 -2 15c0 13 5 26 15 34c4 2 6 7 6 12c0 2 0 3 -1 5 +c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -29 -51 -132l-1 -4h156l1 2c22 66 45 109 71 133c32 30 63 37 87 37c7 0 13 0 18 -1c32 -5 57 -23 65 -38c7 -12 10 -25 10 -37c0 -6 0 -12 -2 -17c-3 -11 -14 -24 -24 -29s-19 -7 -26 -7c-6 0 -12 1 -16 3 +c-10 4 -18 14 -21 23c-1 5 -2 10 -2 15c0 13 5 26 15 34c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -29 -51 -132l-1 -4h156l1 2c22 66 45 109 71 133c21 20 42 30 61 35c8 2 20 3 28 3c5 0 12 0 17 -1 +c32 -5 56 -23 64 -38c4 -7 8 -19 9 -27z" /> +d="M1018 381c0 1 -1 13 -16 13c-11 0 -16 -4 -20 -7c-2 -2 -7 -7 -9 -10c-10 -14 -20 -43 -42 -123l-1 -3h60c6 0 10 -5 10 -11v-22c0 -6 -4 -10 -10 -10h-72l-1 -1v-1c-7 -23 -16 -55 -25 -87c-25 -85 -73 -235 -117 -279c-25 -25 -48 -35 -80 -35c-5 0 -13 0 -18 1 +c-37 6 -64 34 -64 80c0 27 25 52 52 52c36 0 46 -26 46 -40c0 -16 -6 -35 -25 -43c-1 0 -9 -2 -9 -9s5 -16 19 -16c4 0 5 0 8 1s7 2 9 4c9 6 16 14 22 26c10 20 17 51 30 102l3 12c9 37 17 69 24 99c2 8 3 16 5 23c1 6 3 13 4 19c6 28 13 57 21 89l1 3h-156v-2 +c-7 -23 -16 -55 -25 -87c-25 -85 -73 -235 -117 -279c-25 -25 -48 -36 -80 -36c-46 0 -82 28 -82 81c0 27 25 53 52 53c36 0 46 -26 46 -40c0 -16 -6 -35 -25 -43c-5 -2 -8 -5 -9 -9c-1 -5 3 -10 6 -12c4 -3 8 -4 13 -4c6 0 12 2 17 5c24 16 31 45 52 127l3 12 +c12 46 21 85 29 122c7 33 15 68 25 108l1 4h-156v-2c-7 -23 -16 -55 -25 -87c-25 -85 -73 -235 -117 -279c-25 -25 -48 -36 -80 -36c-46 0 -82 28 -82 81c0 27 25 53 52 53c36 0 46 -26 46 -40c0 -16 -6 -35 -25 -43c-5 -2 -8 -5 -9 -9c-1 -5 3 -10 6 -12c4 -3 8 -4 13 -4 +c6 0 12 2 17 5c24 16 31 45 52 127l3 12c12 46 21 85 29 122c7 33 15 68 25 108l1 4h-156v-2c-7 -23 -16 -55 -25 -87c-25 -85 -73 -235 -117 -279c-25 -25 -48 -36 -80 -36c-46 0 -82 28 -82 81c0 27 25 53 52 53c36 0 46 -26 46 -40c0 -16 -6 -35 -25 -43 +c-5 -2 -8 -5 -9 -9c-1 -5 3 -10 6 -12c4 -3 8 -4 13 -4c6 0 12 2 17 5c24 16 31 45 52 127l3 12c12 46 21 85 29 122c7 33 15 68 25 108l1 4h-63c-6 0 -10 4 -10 10v22c0 6 4 10 10 10h76l1 2c22 66 45 109 71 133c32 30 63 37 87 37c7 0 13 0 18 -1c32 -5 57 -23 65 -38 +c7 -11 10 -23 10 -35c0 -6 -1 -13 -3 -19c-3 -11 -13 -24 -23 -29s-19 -7 -26 -7c-6 0 -12 1 -16 3c-10 4 -18 14 -21 23c-1 5 -2 10 -2 15c0 13 5 26 15 34c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -133l-1 -3 +h156l1 2c22 66 45 109 71 133c32 30 63 37 87 37c7 0 13 0 18 -1c32 -5 57 -23 65 -38c7 -11 10 -23 10 -35c0 -6 -1 -13 -3 -19c-3 -11 -13 -24 -23 -29s-19 -7 -26 -7c-6 0 -12 1 -16 3c-10 4 -18 14 -21 23c-1 5 -2 10 -2 15c0 13 5 26 15 34c4 2 6 7 6 12c0 2 0 3 -1 5 +c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -133l-1 -3h156l1 2c22 66 45 109 71 133c32 30 63 37 87 37c7 0 13 0 18 -1c32 -5 57 -23 65 -38c7 -12 10 -25 10 -37c0 -6 0 -12 -2 -17c-3 -11 -14 -24 -24 -29s-19 -7 -26 -7c-6 0 -12 1 -16 3 +c-10 4 -18 14 -21 23c-1 5 -2 10 -2 15c0 13 5 26 15 34c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -133l-1 -3h156l1 2c21 66 45 109 71 133c21 20 42 30 61 35c8 2 20 3 28 3c5 0 12 0 17 -1 +c32 -5 56 -23 64 -38c4 -7 8 -19 9 -27v-1c0 -3 1 -7 1 -10c0 -5 -1 -12 -2 -17c-3 -11 -14 -24 -24 -29c-9 -5 -17 -6 -24 -6h-5c-4 0 -10 2 -13 3c-6 2 -13 9 -17 14c-2 2 -3 5 -4 8c-2 5 -2 11 -2 16c0 13 5 25 15 33c4 2 6 7 6 13z" /> +c6 0 11 2 16 5c24 16 31 46 52 128l3 12c12 46 21 85 29 122c7 33 15 68 25 108l1 3h-63c-6 0 -10 4 -10 10v22c0 6 4 11 10 11h76l1 1c22 66 45 110 71 133c33 30 64 38 88 38c6 0 12 0 17 -1c32 -5 57 -23 65 -38c7 -11 10 -24 10 -36c0 -7 -1 -13 -3 -19 +c-3 -11 -13 -24 -23 -29s-18 -7 -25 -7s-13 2 -17 4c-10 4 -18 13 -21 22c-1 5 -2 10 -2 15c0 13 5 26 15 34c4 2 6 7 6 13c0 1 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -133l-1 -3h156l1 1c22 66 45 109 71 133 +c33 30 64 38 88 38c6 0 12 0 17 -1c32 -5 57 -23 65 -38c7 -11 10 -24 10 -36c0 -7 -1 -13 -3 -19c-3 -11 -13 -24 -23 -29s-18 -7 -25 -7s-13 2 -17 4c-10 4 -18 13 -21 22c-1 5 -2 10 -2 15c0 13 5 26 15 34c4 2 6 7 6 13c0 1 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1 +c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -133l-1 -3h156l1 1c22 66 45 109 71 133c33 30 64 38 88 38c6 0 12 0 17 -1c32 -5 57 -23 65 -38c7 -11 10 -24 10 -36c0 -7 -1 -13 -3 -19c-3 -11 -13 -24 -23 -29s-18 -7 -25 -7s-13 2 -17 4c-10 4 -18 13 -21 22 +c-1 5 -2 10 -2 15c0 13 5 26 15 34c4 2 6 7 6 13c0 1 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -133l-1 -3h156l1 1c22 66 45 109 71 133c33 30 64 38 88 38c6 0 12 0 17 -1c32 -5 57 -23 65 -38c7 -12 10 -25 10 -38 +c0 -6 0 -12 -2 -17c-3 -11 -14 -24 -24 -29s-18 -7 -25 -7s-13 2 -17 4c-10 4 -18 13 -21 22c-1 5 -2 10 -2 15c0 13 5 26 15 34c4 2 6 7 6 13c0 1 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -133l-1 -3h156l1 1 +c22 66 45 109 71 133c21 20 42 30 61 35c8 2 20 3 28 3c5 0 12 0 17 -1c32 -5 56 -23 64 -38c4 -7 8 -19 9 -27v-1c0 -3 1 -7 1 -10c0 -5 -1 -12 -2 -17c-3 -11 -14 -24 -24 -29c-9 -5 -17 -6 -24 -6h-5c-4 0 -10 2 -13 3c-6 2 -13 9 -17 14c-2 2 -3 5 -4 8 +c-2 5 -2 11 -2 16c0 13 5 25 15 33c4 2 6 7 6 13c0 1 0 3 -1 5c-1 3 -5 6 -8 7c-1 0 -1 1 -2 1h-6c-3 0 -7 0 -9 -1c-3 -1 -7 -4 -10 -6s-7 -7 -9 -10c-10 -14 -20 -43 -42 -123l-1 -3h60c6 0 10 -5 10 -11v-22c0 -6 -4 -10 -10 -10h-72l-1 -1v-1c-7 -23 -16 -55 -25 -87 +c-25 -85 -73 -235 -117 -279c-25 -25 -48 -35 -80 -35c-5 0 -13 0 -18 1c-37 6 -64 34 -64 80c0 27 25 52 52 52c36 0 46 -26 46 -40c0 -16 -6 -35 -25 -43c-1 0 -9 -2 -9 -9s5 -16 19 -16z" /> +c24 16 31 45 52 127l3 12c12 46 21 85 29 122c7 33 15 68 25 108l1 4h-156v-2c-7 -23 -16 -55 -25 -87c-25 -85 -73 -235 -117 -279c-25 -25 -48 -36 -80 -36c-46 0 -82 29 -82 82c0 27 25 52 52 52c36 0 46 -26 46 -40c0 -16 -6 -35 -25 -43c-5 -2 -8 -5 -9 -9 +c-1 -5 3 -10 6 -12c4 -3 8 -4 13 -4c6 0 12 2 17 5c24 16 31 45 52 127l3 12c12 46 21 85 29 122c7 33 15 68 25 108l1 4h-156v-2c-7 -23 -16 -55 -25 -87c-25 -85 -73 -235 -117 -279c-25 -25 -48 -36 -80 -36c-46 0 -82 28 -82 81c0 27 25 53 52 53c36 0 46 -26 46 -40 +c0 -16 -6 -35 -25 -43c-5 -2 -8 -5 -9 -9c-1 -5 3 -10 6 -12c4 -3 8 -4 13 -4c6 0 12 2 17 5c24 16 31 45 52 127l3 12c12 46 21 85 29 122c7 33 15 68 25 108l1 4h-63c-6 0 -10 4 -10 10v22c0 6 4 10 10 10h76l1 2c22 66 45 109 71 133c32 30 63 37 87 37c7 0 13 0 18 -1 +c32 -5 57 -23 65 -38c7 -11 10 -23 10 -35c0 -6 -1 -13 -3 -19c-3 -11 -13 -24 -23 -29s-19 -7 -26 -7c-6 0 -12 1 -16 3c-10 4 -18 14 -21 23c-1 5 -2 10 -2 15c0 13 5 26 15 34c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8 +c-15 -12 -23 -30 -51 -133l-1 -3h156l1 2c22 66 45 109 71 133c32 30 63 37 87 37c7 0 13 0 18 -1c32 -5 57 -23 65 -38c7 -11 10 -23 10 -35c0 -6 -1 -13 -3 -19c-3 -11 -13 -24 -23 -29s-19 -7 -26 -7c-6 0 -12 1 -16 3c-10 4 -18 14 -21 23c-1 5 -2 10 -2 15 +c0 13 5 26 15 34c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -133l-1 -3h156l1 2c22 66 45 109 71 133c32 30 63 37 87 37c7 0 13 0 18 -1c32 -5 57 -23 65 -38c7 -12 10 -25 10 -37c0 -6 0 -12 -2 -17 +c-3 -11 -14 -24 -24 -29s-19 -7 -26 -7c-6 0 -12 1 -16 3c-10 4 -18 14 -21 23c-1 5 -2 10 -2 15c0 13 5 26 15 34c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -133l-1 -3h156l1 2c22 66 45 109 71 133 +c32 30 63 37 87 37c7 0 13 0 18 -1c32 -5 57 -23 65 -38c7 -11 10 -23 10 -35c0 -6 -1 -13 -3 -19c-3 -11 -13 -24 -23 -29s-19 -7 -26 -7c-6 0 -12 1 -16 3c-10 4 -18 14 -21 23c-1 5 -2 10 -2 15c0 13 5 26 15 34c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8 +c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -133l-1 -3h156l1 2c22 66 45 109 71 133c32 30 64 37 88 37c7 0 13 0 18 -1c32 -5 56 -23 64 -38c7 -12 10 -25 10 -37c0 -6 0 -12 -2 -17c-3 -11 -14 -24 -24 -29s-19 -7 -26 -7c-6 0 -12 1 -16 3 +c-10 4 -18 14 -21 23c-1 5 -2 10 -2 15c0 13 5 26 15 34c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -133l-1 -3h156l1 1v1c22 66 45 109 71 133c21 20 41 29 60 34c8 2 21 4 29 4c5 0 12 -1 17 -2 +c32 -5 56 -23 64 -38c4 -7 8 -19 9 -27c0 -3 1 -8 1 -11c0 -5 -1 -11 -2 -16c-3 -11 -14 -24 -24 -29c-9 -5 -18 -7 -25 -7h-4c-4 0 -10 2 -13 3c-6 2 -13 9 -17 14c-2 2 -3 6 -4 9c-2 5 -2 11 -2 16c0 13 5 25 15 33c4 2 6 7 6 12c0 2 0 3 -1 5c-1 3 -5 6 -8 7 +c-1 0 -1 1 -2 1c-2 0 -4 1 -6 1c-3 0 -7 -1 -9 -2c-3 -1 -7 -4 -10 -6s-7 -7 -9 -10c-10 -14 -20 -43 -42 -123l-1 -3h60c6 0 10 -4 10 -10v-22c0 -6 -4 -10 -10 -10h-72l-1 -1v-1c-7 -23 -16 -55 -25 -87c-25 -85 -73 -235 -117 -279c-25 -25 -48 -36 -80 -36 +c-5 0 -13 1 -18 2c-37 6 -64 33 -64 79c0 27 25 53 52 53c36 0 46 -26 46 -40c0 -16 -6 -35 -25 -43c-1 0 -9 -3 -9 -10c0 -4 2 -8 5 -11z" /> +d="M393 -163h-224v20h61l99 276c5 10 23 54 23 78c0 7 -1 12 -5 15c-2 1 -5 2 -8 2h-4c-9 -2 -21 -10 -27 -19c-12 -16 -22 -48 -26 -61l-18 9c29 83 63 106 96 106c4 0 7 -1 11 -1c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c15 -4 57 -21 57 -88 +c0 -16 -2 -34 -8 -56c-21 -81 -76 -137 -131 -137c-6 0 -13 0 -19 2c-34 9 -44 31 -44 31l-3 7l-58 -161h75v-20zM421 12c3 0 8 0 11 2c25 12 50 59 63 98c6 18 16 54 16 81c0 9 -1 17 -4 23c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95 +c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 6 -1 8 -1zM-84 -60c36 0 45 -26 45 -40c0 -16 -6 -34 -25 -42c-5 -2 -7 -6 -8 -10v-2c0 -4 2 -7 5 -9c4 -3 9 -5 14 -5c6 0 12 2 17 5c24 16 30 45 51 127l3 12c12 46 21 84 29 121c7 33 15 67 25 107v4h-62 +c-6 0 -10 4 -10 10v22c0 6 4 10 10 10h76v2c22 65 45 109 71 132c33 29 64 37 88 37c6 0 12 0 17 -1c32 -5 55 -23 63 -38c7 -12 10 -25 10 -37c0 -6 0 -12 -2 -17c-3 -11 -13 -24 -23 -29c-9 -5 -17 -7 -24 -7s-14 2 -18 4c-10 4 -18 13 -21 22c-1 5 -2 9 -2 14 +c0 14 5 27 15 35c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -132v-3h59c6 0 10 -4 10 -10v-22c0 -6 -4 -10 -10 -10h-72v-2c-7 -23 -16 -54 -25 -86c-24 -85 -72 -234 -116 -278c-25 -25 -48 -35 -80 -35 +c-46 0 -81 29 -81 81c0 27 25 52 52 52z" /> +d="M383 203c-5 -1 -19 -2 -33 -2h-10c-16 1 -29 4 -34 5c-4 0 -5 0 -7 -4s-16 -39 -19 -46s-4 -12 -10 -12h-11c-5 0 -9 4 -9 8v2c3 7 24 30 34 85c2 11 8 16 14 18c1 0 3 1 5 1c8 0 23 -3 29 -4c13 -2 26 -3 43 -3c9 0 19 0 31 1l48 4h1c2 0 7 -1 8 -9v-6c0 -1 -1 -4 -2 -5 +c-4 -9 -12 -17 -20 -25c-7 -7 -143 -122 -143 -122s-1 -1 -1 -2s0 -1 2 -2c4 -2 22 -9 38 -21s22 -20 27 -23c2 -2 5 -2 7 -2c8 0 17 8 22 16c4 6 5 13 5 20v6c-1 4 -17 8 -17 27c0 13 9 28 26 28c21 0 28 -14 28 -34s-11 -63 -42 -87c-14 -11 -32 -16 -51 -16 +c-23 0 -46 8 -56 25c-6 11 -10 24 -27 24s-23 -18 -29 -28c-5 -7 -16 -20 -30 -20c-4 0 -7 1 -11 3c0 0 -7 5 -7 14c0 6 3 13 13 21c26 21 190 154 191 155s2 2 2 4c0 1 0 1 -1 3s-2 3 -4 3zM-85 -60c36 0 45 -26 45 -40c0 -16 -6 -34 -25 -42c-5 -2 -7 -6 -8 -10v-2 +c0 -4 2 -7 5 -9c4 -3 9 -5 14 -5c6 0 12 2 17 5c24 16 30 45 51 127l3 12c12 46 21 84 29 121c7 33 15 67 25 107v4h-62c-6 0 -10 4 -10 10v22c0 6 4 10 10 10h76v2c22 65 45 109 71 132c33 29 64 37 88 37c6 0 12 0 17 -1c32 -5 55 -23 63 -38c7 -12 10 -25 10 -37 +c0 -6 0 -12 -2 -17c-3 -11 -13 -24 -23 -29c-9 -5 -17 -7 -24 -7s-14 2 -18 4c-10 4 -18 13 -21 22c-1 5 -2 9 -2 14c0 14 5 27 15 35c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -132v-3h59c6 0 10 -4 10 -10v-22 +c0 -6 -4 -10 -10 -10h-72v-2c-7 -23 -16 -54 -25 -86c-24 -85 -72 -234 -116 -278c-25 -25 -48 -35 -80 -35c-46 0 -81 29 -81 81c0 27 25 52 52 52z" /> +d="M148 -60c36 0 45 -26 45 -40c0 -16 -6 -34 -25 -42c-5 -2 -7 -6 -8 -10v-2c0 -4 2 -7 5 -9c4 -3 9 -5 14 -5c6 0 12 2 17 5c24 16 30 45 51 127l3 12c12 46 21 84 29 121c7 33 15 67 25 107v4h-62c-6 0 -10 4 -10 10v22c0 6 4 10 10 10h76v2c22 65 45 109 71 132 +c33 29 64 37 88 37c6 0 12 0 17 -1c32 -5 55 -23 63 -38c7 -12 10 -25 10 -37c0 -6 0 -12 -2 -17c-3 -11 -13 -24 -23 -29c-9 -5 -17 -7 -24 -7s-14 2 -18 4c-10 4 -18 13 -21 22c-1 5 -2 9 -2 14c0 14 5 27 15 35c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8 +c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -132v-3h59c6 0 10 -4 10 -10v-22c0 -6 -4 -10 -10 -10h-72v-2c-7 -23 -16 -54 -25 -86c-24 -85 -72 -234 -116 -278c-25 -25 -48 -35 -80 -35c-46 0 -81 29 -81 81c0 27 25 52 52 52zM168 228c0 0 -8 13 -34 13 +s-45 -21 -45 -38s5 -23 30 -37s77 -29 77 -89s-58 -82 -110 -82s-86 23 -86 68c0 30 20 41 35 41s32 -11 32 -37c0 -24 -13 -31 -16 -33c-1 0 -1 -1 -1 -2c0 -5 7 -15 36 -15c37 0 49 34 49 44s-4 24 -21 34s-33 18 -45 25c-28 16 -35 39 -35 60c0 39 30 83 97 83 +c58 0 77 -35 77 -58c0 -3 0 -6 -1 -8c-2 -10 -9 -24 -28 -24s-28 17 -28 28c0 7 3 19 17 27z" /> +d="M619 -159h-225v21h62l99 275c5 10 22 52 22 77c0 7 -1 13 -5 16c-2 1 -4 2 -7 2h-4c-9 -2 -21 -10 -27 -19c-12 -16 -22 -48 -26 -61l-18 9c29 83 63 106 96 106c4 0 7 -1 11 -1c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c15 -4 57 -21 57 -88 +c0 -16 -2 -34 -8 -56c-21 -81 -77 -137 -132 -137c-6 0 -13 0 -19 2c-34 9 -44 32 -44 32l-2 6l-59 -160h76v-21zM646 16c3 0 9 0 12 2c25 12 49 59 62 98c6 18 17 55 17 82c0 9 -1 17 -4 22c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95 +c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 5 -1 7 -1zM148 -60c36 0 45 -26 45 -40c0 -16 -6 -34 -25 -42c-5 -2 -7 -6 -8 -10v-2c0 -4 2 -7 5 -9c4 -3 9 -5 14 -5c6 0 12 2 17 5c24 16 30 45 51 127l3 12c12 46 21 84 29 121c7 33 15 67 25 107v4h-62 +c-6 0 -10 4 -10 10v22c0 6 4 10 10 10h76v2c22 65 45 109 71 132c33 29 64 37 88 37c6 0 12 0 17 -1c32 -5 55 -23 63 -38c7 -12 10 -25 10 -37c0 -6 0 -12 -2 -17c-3 -11 -13 -24 -23 -29c-9 -5 -17 -7 -24 -7s-14 2 -18 4c-10 4 -18 13 -21 22c-1 5 -2 9 -2 14 +c0 14 5 27 15 35c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -132v-3h59c6 0 10 -4 10 -10v-22c0 -6 -4 -10 -10 -10h-72v-2c-7 -23 -16 -54 -25 -86c-24 -85 -72 -234 -116 -278c-25 -25 -48 -35 -80 -35 +c-46 0 -81 29 -81 81c0 27 25 52 52 52zM168 228c0 0 -8 13 -34 13s-45 -21 -45 -38s5 -23 30 -37s77 -29 77 -89s-58 -82 -110 -82s-86 23 -86 68c0 30 20 41 35 41s32 -11 32 -37c0 -24 -13 -31 -16 -33c-1 0 -1 -1 -1 -2c0 -5 7 -15 36 -15c37 0 49 34 49 44 +s-4 24 -21 34s-33 18 -45 25c-28 16 -35 39 -35 60c0 39 30 83 97 83c58 0 77 -35 77 -58c0 -3 0 -6 -1 -8c-2 -10 -9 -24 -28 -24s-28 17 -28 28c0 7 3 19 17 27z" /> +d="M1074 259c15 -4 57 -21 57 -88c0 -16 -2 -34 -8 -56c-21 -81 -77 -137 -132 -137c-6 0 -13 0 -19 2c-34 9 -43 31 -43 31l-3 7l-58 -161h75v-20h-225v20h62l99 276c12 32 23 58 23 75c0 10 -4 18 -14 21c-3 1 -5 1 -8 1c-16 0 -35 -13 -43 -26c-10 -17 -23 -40 -38 -90 +c-21 -80 -76 -136 -131 -136c-6 0 -13 0 -19 2c-34 9 -44 31 -44 31l-3 7l-58 -161h75v-20h-224v20h61l99 276c5 10 23 54 23 78c0 7 -1 12 -5 15c-2 1 -5 2 -8 2h-4c-9 -2 -20 -10 -26 -19c-12 -16 -23 -48 -27 -61l-18 9c29 83 63 106 96 106c4 0 7 -1 11 -1 +c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c13 -3 46 -16 55 -63c23 54 67 67 101 67c5 0 10 0 15 -1c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2zM721 112c6 18 16 54 16 81c0 9 -1 17 -4 23c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1 +c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 6 -1 8 -1c3 0 8 0 11 2c25 12 50 59 63 98zM1045 112c6 18 16 54 16 81c0 9 -1 17 -4 23c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95 +c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 6 -1 8 -1c3 0 8 0 11 2c25 12 50 59 63 98zM148 -60c36 0 45 -26 45 -40c0 -16 -6 -34 -25 -42c-5 -2 -7 -6 -8 -10v-2c0 -4 2 -7 5 -9c4 -3 9 -5 14 -5c6 0 12 2 17 5c24 16 30 45 51 127l3 12c12 46 21 84 29 121 +c7 33 15 67 25 107v4h-62c-6 0 -10 4 -10 10v22c0 6 4 10 10 10h76v2c22 65 45 109 71 132c33 29 64 37 88 37c6 0 12 0 17 -1c32 -5 55 -23 63 -38c7 -12 10 -25 10 -37c0 -6 0 -12 -2 -17c-3 -11 -13 -24 -23 -29c-9 -5 -17 -7 -24 -7s-14 2 -18 4c-10 4 -18 13 -21 22 +c-1 5 -2 9 -2 14c0 14 5 27 15 35c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -132v-3h59c6 0 10 -4 10 -10v-22c0 -6 -4 -10 -10 -10h-72v-2c-7 -23 -16 -54 -25 -86c-24 -85 -72 -234 -116 -278 +c-25 -25 -48 -35 -80 -35c-46 0 -81 29 -81 81c0 27 25 52 52 52zM168 228c0 0 -8 13 -34 13s-45 -21 -45 -38s5 -23 30 -37s77 -29 77 -89s-58 -82 -110 -82s-86 23 -86 68c0 30 20 41 35 41s32 -11 32 -37c0 -24 -13 -31 -16 -33c-1 0 -1 -1 -1 -2c0 -5 7 -15 36 -15 +c37 0 49 34 49 44s-4 24 -21 34s-33 18 -45 25c-28 16 -35 39 -35 60c0 39 30 83 97 83c58 0 77 -35 77 -58c0 -3 0 -6 -1 -8c-2 -10 -9 -24 -28 -24s-28 17 -28 28c0 7 3 19 17 27z" /> +d="M618 203c-5 -1 -19 -2 -33 -2h-10c-16 1 -29 4 -34 5c-4 0 -5 0 -7 -4s-16 -39 -19 -46s-4 -12 -10 -12h-11c-5 0 -9 4 -9 8v2c3 7 24 30 34 85c2 11 8 16 14 18c1 0 3 1 5 1c8 0 23 -3 29 -4c13 -2 26 -3 43 -3c9 0 19 0 31 1l48 4h1c2 0 7 -1 8 -9v-6c0 -1 -1 -4 -2 -5 +c-4 -9 -12 -17 -20 -25c-7 -7 -143 -122 -143 -122s-1 -1 -1 -2s0 -1 2 -2c4 -2 22 -9 38 -21s22 -20 27 -23c2 -2 5 -2 7 -2c8 0 17 8 22 16c4 6 5 13 5 20v6c-1 4 -17 8 -17 27c0 13 9 28 26 28c21 0 28 -14 28 -34s-11 -63 -42 -87c-14 -11 -32 -16 -51 -16 +c-23 0 -46 8 -56 25c-6 11 -10 24 -27 24s-23 -18 -29 -28c-5 -7 -16 -20 -30 -20c-4 0 -7 1 -11 3c0 0 -7 5 -7 14c0 6 3 13 13 21c26 21 190 154 191 155s2 2 2 4c0 1 0 1 -1 3s-2 3 -4 3zM168 228c0 0 -8 13 -34 13s-45 -21 -45 -38s5 -23 30 -37s77 -29 77 -89 +s-58 -82 -110 -82s-86 23 -86 68c0 30 20 41 35 41s32 -11 32 -37c0 -24 -13 -31 -16 -33c-1 0 -1 -1 -1 -2c0 -5 7 -15 36 -15c37 0 49 34 49 44s-4 24 -21 34s-33 18 -45 25c-28 16 -35 39 -35 60c0 39 30 83 97 83c58 0 77 -35 77 -58c0 -3 0 -6 -1 -8 +c-2 -10 -9 -24 -28 -24s-28 17 -28 28c0 7 3 19 17 27zM148 -60c36 0 45 -26 45 -40c0 -16 -6 -34 -25 -42c-5 -2 -7 -6 -8 -10v-2c0 -4 2 -7 5 -9c4 -3 9 -5 14 -5c6 0 12 2 17 5c24 16 30 45 51 127l3 12c12 46 21 84 29 121c7 33 15 67 25 107v4h-62c-6 0 -10 4 -10 10 +v22c0 6 4 10 10 10h76v2c22 65 45 109 71 132c33 29 64 37 88 37c6 0 12 0 17 -1c32 -5 55 -23 63 -38c7 -12 10 -25 10 -37c0 -6 0 -12 -2 -17c-3 -11 -13 -24 -23 -29c-9 -5 -17 -7 -24 -7s-14 2 -18 4c-10 4 -18 13 -21 22c-1 5 -2 9 -2 14c0 14 5 27 15 35c4 2 6 7 6 12 +c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -132v-3h59c6 0 10 -4 10 -10v-22c0 -6 -4 -10 -10 -10h-72v-2c-7 -23 -16 -54 -25 -86c-24 -85 -72 -234 -116 -278c-25 -25 -48 -35 -80 -35c-46 0 -81 29 -81 81c0 27 25 52 52 52z +" /> - +c0 39 30 83 97 83c58 0 77 -35 77 -58c0 -3 0 -6 -1 -8c-2 -10 -9 -24 -28 -24s-28 17 -28 28c0 7 3 19 17 27zM148 -65c36 0 45 -26 45 -40c0 -16 -6 -34 -25 -42c-5 -2 -7 -6 -8 -10v-2c0 -4 2 -7 5 -9c4 -3 9 -5 14 -5c6 0 12 2 17 5c24 16 30 45 51 127l3 12 +c12 46 21 84 29 121c7 33 15 67 25 107v4h-62c-6 0 -10 4 -10 10v22c0 6 4 10 10 10h76v2c22 65 45 109 71 132c33 29 64 37 88 37c6 0 12 0 17 -1c32 -5 55 -23 63 -38c7 -12 10 -25 10 -37c0 -6 0 -12 -2 -17c-3 -11 -13 -24 -23 -29c-9 -5 -17 -7 -24 -7s-14 2 -18 4 +c-10 4 -18 13 -21 22c-1 5 -2 9 -2 14c0 14 5 27 15 35c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -132v-3h59c6 0 10 -4 10 -10v-22c0 -6 -4 -10 -10 -10h-72v-2c-7 -23 -16 -54 -25 -86 +c-24 -85 -72 -234 -116 -278c-25 -25 -48 -35 -80 -35c-46 0 -81 29 -81 81c0 27 25 52 52 52z" /> + +d="M167 -60c36 0 45 -26 45 -40c0 -16 -6 -34 -25 -42c-5 -2 -7 -6 -8 -10v-2c0 -4 2 -7 5 -9c4 -3 9 -5 14 -5c6 0 12 2 17 5c24 16 30 45 51 127l3 12c12 46 21 84 29 121c7 33 15 67 25 107v4h-62c-6 0 -10 4 -10 10v22c0 6 4 10 10 10h76v2c22 65 45 109 71 132 +c33 29 64 37 88 37c6 0 12 0 17 -1c32 -5 55 -23 63 -38c7 -12 10 -25 10 -37c0 -6 0 -12 -2 -17c-3 -11 -13 -24 -23 -29c-9 -5 -17 -7 -24 -7s-14 2 -18 4c-10 4 -18 13 -21 22c-1 5 -2 9 -2 14c0 14 5 27 15 35c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8 +c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -132v-3h59c6 0 10 -4 10 -10v-22c0 -6 -4 -10 -10 -10h-72v-2c-7 -23 -16 -54 -25 -86c-24 -85 -72 -234 -116 -278c-25 -25 -48 -35 -80 -35c-46 0 -81 29 -81 81c0 27 25 52 52 52zM189 253c22 0 41 -16 41 -39 +s-8 -37 -19 -46c-6 -5 -17 -9 -29 -9c-9 0 -19 2 -26 10c-4 4 -6 11 -6 17c0 8 3 16 12 23v2s0 2 -3 4c-1 1 -2 1 -3 1c-3 0 -7 -2 -11 -6c-16 -16 -48 -50 -68 -191c0 -3 -1 -6 -1 -7c-2 -11 -7 -12 -11 -12h-55c-3 0 -6 1 -8 3s-2 6 -2 9v4l34 109c11 35 20 64 20 81 +c0 8 -2 14 -7 16c-2 1 -3 1 -5 1c-22 0 -39 -54 -39 -54l-15 8c7 22 21 46 27 53c7 8 21 24 46 24c5 0 10 -1 15 -2c29 -7 38 -41 38 -41l3 4c6 8 13 16 22 22c8 5 27 16 50 16z" /> +d="M636 203c-5 -1 -19 -2 -33 -2h-10c-16 1 -29 4 -34 5c-4 0 -5 0 -7 -4s-16 -39 -19 -46s-4 -12 -10 -12h-11c-5 0 -9 4 -9 8v2c3 7 24 30 34 85c2 11 8 16 14 18c1 0 3 1 5 1c8 0 23 -3 29 -4c13 -2 26 -3 43 -3c9 0 19 0 31 1l48 4h1c2 0 7 -1 8 -9v-6c0 -1 -1 -4 -2 -5 +c-4 -9 -12 -17 -20 -25c-7 -7 -143 -122 -143 -122s-1 -1 -1 -2s0 -1 2 -2c4 -2 22 -9 38 -21s22 -20 27 -23c2 -2 5 -2 7 -2c8 0 17 8 22 16c4 6 5 13 5 20v6c-1 4 -17 8 -17 27c0 13 9 28 26 28c21 0 28 -14 28 -34s-11 -63 -42 -87c-14 -11 -32 -16 -51 -16 +c-23 0 -46 8 -56 25c-6 11 -10 24 -27 24s-23 -18 -29 -28c-5 -7 -16 -20 -30 -20c-4 0 -7 1 -11 3c0 0 -7 5 -7 14c0 6 3 13 13 21c26 21 190 154 191 155s2 2 2 4c0 1 0 1 -1 3s-2 3 -4 3zM167 -60c36 0 45 -26 45 -40c0 -16 -6 -34 -25 -42c-5 -2 -7 -6 -8 -10v-2 +c0 -4 2 -7 5 -9c4 -3 9 -5 14 -5c6 0 12 2 17 5c24 16 30 45 51 127l3 12c12 46 21 84 29 121c7 33 15 67 25 107v4h-62c-6 0 -10 4 -10 10v22c0 6 4 10 10 10h76v2c22 65 45 109 71 132c33 29 64 37 88 37c6 0 12 0 17 -1c32 -5 55 -23 63 -38c7 -12 10 -25 10 -37 +c0 -6 0 -12 -2 -17c-3 -11 -13 -24 -23 -29c-9 -5 -17 -7 -24 -7s-14 2 -18 4c-10 4 -18 13 -21 22c-1 5 -2 9 -2 14c0 14 5 27 15 35c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -132v-3h59c6 0 10 -4 10 -10v-22 +c0 -6 -4 -10 -10 -10h-72v-2c-7 -23 -16 -54 -25 -86c-24 -85 -72 -234 -116 -278c-25 -25 -48 -35 -80 -35c-46 0 -81 29 -81 81c0 27 25 52 52 52zM189 253c22 0 41 -16 41 -39s-8 -37 -19 -46c-6 -5 -17 -9 -29 -9c-9 0 -19 2 -26 10c-4 4 -6 11 -6 17c0 8 3 16 12 23v2 +s0 2 -3 4c-1 1 -2 1 -3 1c-3 0 -7 -2 -11 -6c-16 -16 -48 -50 -68 -191c0 -3 -1 -6 -1 -7c-2 -11 -7 -12 -11 -12h-55c-3 0 -6 1 -8 3s-2 6 -2 9v4l34 109c11 35 20 64 20 81c0 8 -2 14 -7 16c-2 1 -3 1 -5 1c-22 0 -39 -54 -39 -54l-15 8c7 22 21 46 27 53c7 8 21 24 46 24 +c5 0 10 -1 15 -2c29 -7 38 -41 38 -41l3 4c6 8 13 16 22 22c8 5 27 16 50 16z" /> +d="M484 277c4 -3 7 -7 7 -12c0 -2 -1 -4 -1 -5c-1 -3 -60 -260 -368 -260h-122v14v90c0 8 6 13 14 13h159c191 0 291 154 293 157c2 4 7 5 11 5c2 0 5 -1 7 -2z" /> +d="M484 -277c-2 -1 -5 -2 -7 -2c-4 0 -9 1 -11 5c-2 3 -102 157 -293 157h-159c-8 0 -14 5 -14 13v90v14h122c308 0 367 -257 368 -260c0 -1 1 -3 1 -5c0 -5 -3 -9 -7 -12z" /> +d="M7 277c2 1 5 2 7 2c4 0 9 -1 11 -5c2 -3 102 -157 293 -157h159c8 0 14 -5 14 -13v-90v-14h-122c-308 0 -367 257 -368 260c0 1 -1 3 -1 5c0 5 3 9 7 12z" /> +d="M7 -277c-4 3 -7 7 -7 12c0 2 1 4 1 5c1 3 60 260 368 260h122v-14v-90c0 -8 -6 -13 -14 -13h-159c-191 0 -291 -154 -293 -157c-2 -4 -7 -5 -11 -5c-2 0 -5 1 -7 2z" /> +d="M14 653l994 463c3 2 7 3 10 3c13 0 24 -11 24 -24v0v-205v0c0 -8 -6 -18 -14 -21l-994 -464c-3 -1 -7 -2 -10 -2c-13 0 -24 10 -24 24v0v204v0c0 9 6 18 14 22zM14 153l994 463c3 2 7 3 10 3c13 0 24 -11 24 -24v0v-205v0c0 -8 -6 -18 -14 -21l-994 -464 +c-3 -1 -7 -2 -10 -2c-13 0 -24 10 -24 24v0v204v0c0 9 6 18 14 22z" /> +d="M17 639l1491 470c2 1 5 1 7 1c13 0 24 -10 24 -23v-195v0c0 -10 -7 -20 -17 -23l-1491 -470c-2 0 -5 -1 -7 -1c-13 0 -24 11 -24 24v195c0 9 8 19 17 22zM17 151l1491 470c2 0 5 1 7 1c13 0 24 -11 24 -24v-195c0 -9 -8 -20 -17 -22l-1491 -470c-2 -1 -5 -2 -7 -2 +c-13 0 -24 11 -24 24v195v0c0 9 7 20 17 23z" /> +d="M20 661l2228 392h4c13 0 24 -10 24 -24v0v-188v0c0 -11 -9 -21 -20 -23l-2228 -393h-4c-13 0 -24 10 -24 24v0v188v0c0 11 9 22 20 24zM20 186l2228 392c1 1 3 1 4 1c13 0 24 -11 24 -24v0v-188v0c0 -11 -9 -22 -20 -24l-2228 -392c-1 -1 -3 -1 -4 -1 +c-13 0 -24 11 -24 24v0v189v0c0 11 9 21 20 23z" /> +d="M379 479l191 -98c56 -29 84 -85 84 -164s-49 -199 -203 -199c-153 0 -167 76 -171 95c-1 3 -1 6 -1 10c0 20 11 49 44 57c5 1 11 2 16 2c34 0 67 -24 77 -59c12 -40 38 -63 74 -63c40 0 95 31 95 118c0 43 -43 73 -96 102l-172 89l-205 -362c-2 -3 -6 -6 -9 -7h-3 +c-2 0 -6 1 -8 2l-15 11c-3 2 -6 7 -6 11c0 2 0 5 1 7l204 360l-189 99c-58 33 -87 83 -87 162s50 199 204 199c153 0 167 -76 171 -95c1 -3 1 -6 1 -9c0 -21 -11 -51 -45 -59c-5 -1 -11 -2 -16 -2c-34 0 -67 24 -77 59c-12 40 -38 64 -74 64c-40 0 -95 -31 -95 -118 +c0 -49 33 -68 82 -94l187 -96l204 361c2 4 8 7 12 7c2 0 6 -1 8 -2l16 -11c3 -2 6 -8 6 -12c0 -2 -1 -4 -2 -6zM36 308c-12 12 -19 29 -19 45s7 33 19 45s30 19 46 19s33 -7 45 -19s19 -29 19 -45s-7 -33 -19 -45s-29 -19 -45 -19s-34 7 -46 19zM528 507 +c-12 12 -19 29 -19 45s7 34 19 46s29 19 45 19s33 -7 45 -19s19 -30 19 -46s-7 -33 -19 -45s-29 -19 -45 -19s-33 7 -45 19z" /> @@ -273,309 +295,315 @@ c8 0 14 -6 14 -14v-99c137 -10 247 -138 253 -298zM389 324h148c0 142 -40 257 -148 d="M632 324h93c8 0 13 -5 13 -13v-12c0 -8 -5 -13 -13 -13h-93v-256c0 -17 -13 -30 -30 -30h-213v-99c0 -8 -6 -14 -14 -14h-11c-8 0 -14 6 -14 14v99h-214c-17 0 -30 13 -30 30v256h-92c-8 0 -14 5 -14 13v12c0 8 6 13 14 13h92v268c0 17 13 30 30 30h214v99 c0 8 6 14 14 14h11c8 0 14 -6 14 -14v-99h213c17 0 30 -13 30 -30v-268zM526 324v268h-137v-268h137zM350 324v268h-137v-268h137zM213 286v-256h137v256h-137zM389 286v-256h137v256h-137z" /> +d="M442 154c3 2 33 24 33 74c0 97 -56 114 -86 131c-5 2 -13 7 -24 12v-171c27 -13 53 -28 77 -46zM225 438v-171c34 -17 75 -36 104 -50v172c-34 16 -75 36 -104 49zM166 297c5 -3 13 -7 23 -12v170c-27 14 -52 29 -76 46c-4 -1 -34 -15 -34 -74c0 -77 57 -114 87 -130z +M189 624v176c-31 16 -59 33 -85 53c-2 -2 -24 -20 -24 -62c0 -95 62 -142 109 -167zM329 555v179c-34 16 -75 36 -104 49v-179c26 -14 55 -28 104 -49zM365 716v-177c28 -11 54 -24 78 -39c3 2 32 18 32 73c0 84 -45 111 -110 143zM225 101v-97c0 -7 -6 -12 -12 -12h-11 +c-7 0 -13 5 -13 12v112c-100 42 -189 103 -189 217c0 112 61 164 89 187c-54 46 -89 112 -89 174c0 86 19 127 76 183c-47 43 -76 115 -76 181c0 106 69 223 231 223c175 0 228 -64 251 -106c9 -17 16 -35 16 -53c0 -46 -31 -64 -73 -64c-48 0 -78 33 -98 89 +c-16 44 -43 86 -120 86s-127 -46 -127 -105c0 -95 63 -134 109 -160v34c0 7 6 13 13 13h11c7 0 12 -6 12 -13v-53c26 -14 55 -28 104 -49v102c0 7 6 13 13 13h10c7 0 13 -6 13 -13v-118c100 -42 189 -103 189 -217c0 -108 -57 -161 -86 -184c51 -39 86 -89 86 -161 +c0 -111 -61 -164 -88 -187c53 -45 88 -121 88 -193c0 -90 -49 -222 -231 -222c-88 0 -264 39 -264 156c0 35 19 68 56 73c74 0 89 -25 113 -95c18 -54 42 -87 119 -87s128 39 128 98c0 95 -64 142 -110 167v-28c0 -7 -5 -12 -13 -12h-10c-8 0 -13 5 -13 12v48 +c-26 13 -55 27 -104 49z" /> +d="M562 -21c0 89 -65 150 -155 150c7 -44 34 -203 55 -323c71 29 100 102 100 173zM420 -206l-58 329c-59 -14 -104 -63 -104 -124c0 -49 22 -75 61 -99c12 -8 22 -13 22 -22s-9 -13 -17 -13c-80 0 -135 96 -135 166c0 94 62 190 153 217c-7 41 -14 88 -23 142 +c-15 -15 -31 -29 -48 -44c-88 -76 -174 -185 -174 -307c0 -151 122 -251 265 -251c19 0 38 2 58 6zM332 822c-8 -31 -11 -65 -11 -102c0 -42 5 -81 11 -121c69 68 146 146 146 250c0 69 -24 118 -39 118c-52 0 -98 -105 -107 -145zM122 -513c0 66 45 123 115 123 +c75 0 116 -57 116 -111c0 -64 -47 -104 -94 -111c-3 -1 -5 -2 -5 -4c0 -1 2 -2 3 -3c2 0 23 -5 47 -5c101 0 154 55 154 159c0 53 -11 123 -30 219c-23 -4 -50 -7 -79 -7c-186 0 -349 147 -349 334c0 200 126 321 217 406c21 17 73 70 74 71c-17 112 -22 161 -22 215 +c0 84 18 212 82 288c33 39 64 51 71 51c18 0 47 -35 71 -86c16 -36 44 -110 44 -201c0 -159 -73 -284 -179 -395c9 -56 19 -115 29 -175c146 0 253 -102 253 -253c0 -103 -73 -205 -171 -237c6 -39 12 -69 15 -89c10 -57 16 -102 16 -141c0 -63 -14 -129 -68 -167 +c-36 -22 -77 -34 -124 -34c-135 0 -186 87 -186 153z" /> +d="M562 -21c0 13 -1 23 -2 32c-9 48 -52 118 -153 118c7 -44 34 -203 55 -323c71 29 100 102 100 173zM420 -206l-58 329c-59 -14 -104 -63 -104 -124c0 -49 22 -75 61 -99c12 -8 22 -13 22 -22s-9 -13 -17 -13c-80 0 -135 96 -135 166c0 94 62 190 153 217 +c-7 41 -14 88 -23 142c-15 -15 -31 -29 -48 -44c-88 -76 -174 -185 -174 -307c0 -151 122 -251 265 -251c19 0 38 2 58 6zM332 822c-8 -31 -11 -65 -11 -102c0 -42 5 -81 11 -121c69 68 146 146 146 250c0 69 -24 118 -39 118c-52 0 -98 -105 -107 -145zM269 773 +c0 84 18 212 82 288c33 39 64 51 71 51c18 0 47 -35 71 -86c16 -36 44 -110 44 -201c0 -159 -73 -284 -179 -395c9 -56 19 -115 29 -175c146 0 253 -102 253 -253c0 -103 -73 -205 -171 -237c6 -39 12 -69 15 -89c10 -57 16 -102 16 -141c0 -63 -14 -129 -68 -167 +c-36 -22 -80 -34 -124 -34h-12l-48 -179c-3 -11 -4 -17 -4 -20s1 -5 22 -5h19l-3 -23h-139l3 23h18c12 0 19 0 21 2c3 2 4 5 6 12l35 132c2 6 2 9 2 11c0 3 0 6 -11 6h-32l6 21h2c30 0 70 11 84 22c-81 10 -155 64 -155 151c0 66 45 123 115 123c75 0 116 -57 116 -111 +c0 -64 -47 -104 -94 -111c-3 -1 -5 -2 -5 -4c0 -1 2 -2 3 -3c2 0 23 -5 47 -5c101 0 154 55 154 159c0 53 -11 123 -30 219c-23 -4 -50 -7 -79 -7c-186 0 -349 147 -349 334c0 200 126 321 217 406c21 17 73 70 74 71c-17 112 -22 161 -22 215zM329 -867c0 -3 11 -9 24 -9 +c27 0 48 29 48 67c0 24 -11 38 -29 38c-8 0 -12 -1 -27 -7c-2 -12 -9 -19 -19 -19c-8 0 -13 6 -13 14c0 7 4 13 12 17l30 103l3 -1c26 -6 48 -9 69 -9c16 0 29 2 43 8v0c3 1 3 1 4 1c3 0 5 -2 5 -5c0 -39 -47 -54 -77 -54c-14 0 -15 0 -38 5l-10 -34c14 5 24 7 38 7 +c35 0 67 -22 67 -60c0 -56 -45 -93 -99 -93c-42 0 -68 21 -68 53c0 21 13 35 32 35c16 0 28 -11 28 -27c0 -13 -10 -25 -21 -27c-2 -1 -2 -1 -2 -3z" /> +d="M423 -717c0 -24 -14 -40 -43 -53c18 -13 28 -32 28 -55c0 -43 -38 -73 -92 -73c-44 0 -74 22 -74 55c0 31 26 51 52 61c-14 14 -21 28 -21 47c0 45 41 71 83 71c33 0 67 -16 67 -53zM323 -877c22 0 38 15 38 34c0 14 -8 24 -27 35v0c-2 2 -2 2 -14 8c-3 2 -4 2 -8 4 +c-17 -10 -26 -26 -26 -46c0 -21 15 -35 37 -35zM361 -757c15 12 21 23 21 39c0 21 -12 33 -31 33c-20 0 -34 -13 -34 -31c0 -12 5 -19 20 -28l2 -1c3 -2 7 -4 22 -12zM640 2c0 -103 -73 -204 -171 -237c7 -38 12 -69 15 -89c10 -57 16 -102 16 -141 +c0 -128 -63 -201 -192 -201c-135 0 -185 87 -185 153s44 123 114 123c75 0 116 -57 116 -111c0 -63 -47 -104 -94 -111c-3 -1 -5 -2 -5 -4c0 -1 2 -2 3 -2c2 -1 23 -6 47 -6c101 0 155 55 155 159c0 53 -12 124 -30 219c-24 -4 -51 -7 -80 -7c-186 0 -349 147 -349 335 +c0 199 126 321 217 405c21 18 73 71 74 71c-17 113 -22 162 -22 216c0 84 18 211 83 287c32 39 64 51 71 51c17 0 46 -35 70 -86c17 -36 45 -110 45 -201c0 -158 -74 -284 -179 -395c9 -56 18 -115 28 -175c146 0 253 -102 253 -253zM332 822c-7 -31 -11 -64 -11 -102 +c0 -41 5 -81 11 -121c69 69 147 147 147 250c0 70 -25 118 -40 118c-52 0 -97 -105 -107 -145zM362 -212c20 0 38 3 58 7l-58 328c-58 -14 -104 -63 -104 -124c0 -48 22 -75 61 -98c13 -8 22 -14 22 -22c0 -10 -9 -14 -17 -14c-80 0 -135 96 -135 167c0 93 62 190 153 216 +c-7 42 -14 88 -23 142c-15 -15 -31 -29 -48 -43c-88 -77 -174 -186 -174 -308c0 -151 122 -251 265 -251zM462 -193c71 29 101 101 101 173c0 12 -2 23 -3 31c-9 48 -52 118 -153 118c7 -44 34 -203 55 -322z" /> +d="M640 3c0 -104 -73 -205 -171 -238c6 -38 12 -69 15 -89c10 -56 16 -102 16 -141c0 -128 -63 -201 -192 -201c-135 0 -186 87 -186 153s45 123 115 123c75 0 116 -57 116 -110c0 -64 -47 -104 -94 -112c-3 -1 -5 -1 -5 -3c0 -1 2 -3 3 -3c2 -1 23 -6 47 -6 +c101 0 155 55 155 159c0 53 -12 124 -31 220c-23 -5 -50 -8 -79 -8c-186 0 -349 147 -349 335c0 200 126 321 217 405c21 18 73 71 74 71c-17 113 -22 162 -22 216c0 84 18 211 82 287c18 22 36 35 49 43c-39 3 -65 24 -65 54c0 31 27 51 53 61c-15 14 -21 28 -22 47 +c0 45 41 71 83 71c33 0 67 -16 67 -53c0 -24 -14 -40 -43 -52c18 -14 28 -33 28 -56c0 -35 -25 -61 -64 -70c17 -12 38 -42 56 -80c16 -36 44 -109 44 -201c0 -158 -73 -284 -178 -395c8 -55 18 -114 28 -175c146 0 253 -102 253 -252zM444 1316c-20 0 -34 -13 -34 -31 +c0 -12 5 -19 21 -28l1 -1c3 -2 7 -4 22 -12c15 12 21 23 21 39c0 21 -11 33 -31 33zM379 1160c0 -22 15 -36 37 -36s38 15 38 34c0 14 -7 24 -27 35v0c-2 2 -2 2 -14 8c-3 2 -4 2 -8 4c-17 -10 -26 -26 -26 -45zM332 822c-8 -31 -11 -64 -11 -102c0 -41 5 -80 11 -121 +c69 69 146 147 146 250c0 70 -24 119 -39 119c-52 0 -98 -105 -107 -146zM362 -211c19 0 38 2 58 6l-58 328c-58 -14 -104 -62 -104 -124c0 -48 22 -74 61 -98c12 -8 22 -14 22 -22c0 -10 -9 -14 -17 -14c-80 0 -135 96 -135 167c0 93 62 190 153 216c-7 42 -14 88 -23 142 +c-15 -14 -31 -29 -48 -43c-88 -77 -174 -186 -174 -308c0 -151 122 -250 265 -250zM462 -193c71 29 100 101 100 173c0 12 -1 23 -2 31c-9 48 -52 118 -153 118c7 -44 34 -203 55 -322z" /> +d="M462 -194c71 29 100 101 100 173c0 12 -1 23 -2 32c-9 47 -52 118 -153 118c7 -45 34 -204 55 -323zM362 -212c19 0 38 2 58 6l-58 328c-58 -14 -104 -62 -104 -124c0 -48 22 -74 61 -98c12 -8 22 -14 22 -22c0 -10 -9 -13 -17 -13c-80 0 -135 95 -135 166 +c0 93 62 190 153 217c-7 41 -14 87 -23 141c-15 -14 -31 -29 -48 -43c-88 -77 -174 -186 -174 -307c0 -152 122 -251 265 -251zM332 821c-7 -31 -11 -64 -11 -102c0 -41 5 -80 11 -121c69 69 147 147 147 251c0 69 -25 118 -40 118c-52 0 -97 -105 -107 -146zM640 2 +c0 -104 -73 -205 -171 -238c7 -38 12 -69 15 -89c10 -56 16 -102 16 -141c0 -63 -14 -129 -68 -167c-36 -22 -77 -34 -124 -34c-135 0 -185 87 -185 153s44 124 114 124c75 0 116 -58 116 -111c0 -64 -47 -104 -94 -112c-3 -1 -5 -1 -5 -3c0 -1 2 -3 3 -3c2 -1 23 -6 47 -6 +c101 0 155 55 155 159c0 53 -12 124 -30 220c-24 -5 -51 -8 -80 -8c-186 0 -349 147 -349 335c0 200 126 321 217 406c21 17 73 70 74 71c-17 112 -22 161 -22 215c0 84 18 211 82 287c27 32 53 46 65 50c-19 9 -30 25 -30 46c0 20 13 34 32 34c17 0 28 -10 28 -26 +c0 -13 -7 -23 -20 -27c-2 -1 -2 -2 -2 -3c0 -4 10 -9 23 -9c27 0 49 29 49 67c0 24 -11 38 -30 38c-7 0 -12 -1 -26 -7c-2 -12 -9 -19 -20 -19c-7 0 -13 6 -13 14c0 7 4 13 13 17l30 103l2 -1c26 -6 49 -9 69 -9c17 0 30 2 44 8v0c2 1 3 1 4 1c2 0 4 -2 4 -5 +c0 -11 -8 -27 -19 -37c-14 -12 -31 -17 -58 -17c-14 0 -14 0 -38 5l-9 -34c14 5 25 7 38 7c37 0 66 -21 66 -60c0 -56 -45 -93 -99 -93c-5 0 -10 0 -15 1c17 -13 37 -42 54 -79c17 -36 45 -109 45 -200c0 -159 -74 -285 -179 -396c8 -55 18 -114 28 -174 +c146 0 253 -103 253 -253zM379 1131l-3 -23h-139l3 23h19c12 0 20 0 22 3v0c1 1 2 3 3 7h1c0 1 1 6 4 16l32 120c1 6 2 9 2 11c0 3 0 5 -11 5h-33l6 22h2c31 0 72 12 86 22v1h18l-49 -182c-3 -11 -4 -17 -4 -20c0 -4 1 -5 22 -5h19z" /> +d="M1044 2c0 -104 -73 -205 -171 -238c7 -38 12 -69 16 -89c9 -56 15 -102 15 -141c0 -128 -63 -201 -192 -201c-135 0 -185 87 -185 153s45 123 115 123c75 0 115 -57 115 -110c0 -64 -47 -105 -94 -112c-3 -1 -4 -2 -4 -4c0 -1 1 -2 3 -2c2 -1 22 -6 47 -6 +c100 0 154 55 154 159c0 53 -12 124 -30 220c-24 -5 -51 -8 -80 -8c-74 0 -145 24 -203 64c-24 -20 -51 -36 -81 -46c7 -38 12 -69 16 -89c9 -56 15 -102 15 -141c0 -128 -63 -201 -192 -201c-135 0 -185 87 -185 153s45 123 115 123c75 0 115 -57 115 -110 +c0 -64 -47 -105 -94 -112c-3 -1 -4 -2 -4 -4c0 -1 1 -2 3 -2c2 -1 22 -6 47 -6c100 0 154 55 154 159c0 53 -12 124 -30 220c-24 -5 -51 -8 -80 -8c-186 0 -349 147 -349 335c0 200 126 321 217 406c21 17 73 70 74 70c-17 113 -22 162 -22 216c0 84 18 211 83 287 +c32 39 64 52 71 52c18 0 47 -36 70 -87c17 -36 45 -109 45 -200c0 -159 -74 -285 -179 -396c9 -55 18 -114 28 -175c18 0 35 -1 51 -4c44 105 121 179 183 237c21 17 73 70 74 70c-17 113 -22 162 -22 216c0 84 18 211 83 287c32 39 64 52 71 52c18 0 47 -36 70 -87 +c17 -36 45 -109 45 -200c0 -159 -74 -285 -179 -396c9 -55 18 -114 28 -175c146 0 253 -102 253 -252zM736 821c-7 -31 -11 -64 -11 -102c0 -41 5 -80 12 -121c68 69 146 147 146 251c0 69 -25 118 -40 118c-52 0 -97 -105 -107 -146zM676 346c-47 -41 -93 -90 -126 -145 +c26 -21 48 -47 63 -78c25 58 73 107 133 125c-6 41 -14 87 -23 141c-15 -14 -31 -29 -47 -43zM332 821c-7 -31 -11 -64 -11 -102c0 -41 5 -80 12 -121c68 69 146 147 146 251c0 69 -25 118 -40 118c-52 0 -97 -105 -107 -146zM362 -213c20 0 38 3 58 7l-57 328 +c-59 -14 -104 -62 -104 -124c0 -48 22 -74 60 -98c13 -8 22 -14 22 -22c0 -10 -9 -14 -17 -14c-80 0 -135 96 -135 167c0 93 62 190 153 217c-6 41 -14 87 -23 141c-15 -14 -31 -29 -47 -43c-88 -77 -175 -186 -175 -308c0 -151 122 -251 265 -251zM462 -194 +c71 29 101 101 101 173c0 12 -1 23 -3 31c-9 48 -52 118 -153 118c7 -44 34 -203 55 -322zM766 -213c20 0 38 3 58 7l-57 328c-59 -14 -104 -62 -104 -124c0 -48 22 -74 60 -98c13 -8 22 -14 22 -22c0 -10 -9 -14 -17 -14c-42 0 -77 27 -100 62c-10 -27 -23 -53 -41 -76 +c48 -40 111 -63 179 -63zM866 -194c71 29 101 101 101 173c0 12 -1 23 -3 31c-9 48 -52 118 -153 118c7 -44 34 -203 55 -322z" /> +d="M360 -758c16 12 22 22 22 39c0 20 -12 32 -31 32c-20 0 -34 -12 -34 -30c0 -13 5 -19 20 -29l7 -4c3 -2 8 -4 16 -8zM323 -878c22 0 38 14 38 33c0 15 -8 25 -27 36l-22 11c-17 -10 -26 -26 -26 -45c0 -21 15 -35 37 -35zM422 -718c0 -24 -13 -41 -42 -53 +c18 -14 28 -33 28 -55c0 -43 -38 -73 -92 -73c-44 0 -74 22 -74 54c0 31 26 51 52 62c-15 14 -21 28 -21 46c0 45 41 72 83 72c33 0 66 -16 66 -53zM440 -641l4 -3c53 -27 86 -76 86 -137s-33 -111 -86 -139l-4 -2v22l1 1c38 28 44 73 44 118c0 44 -6 90 -44 117l-1 1v22z +M462 -194c71 29 100 101 100 173c0 12 -1 23 -2 32c-9 47 -52 118 -153 118c7 -45 34 -204 55 -323zM362 -212c19 0 38 2 58 6l-58 329c-58 -15 -104 -63 -104 -125c0 -48 22 -74 61 -98c12 -8 22 -14 22 -22c0 -10 -9 -13 -17 -13c-80 0 -135 95 -135 166 +c0 93 62 190 153 217c-7 41 -14 87 -23 141c-15 -14 -31 -28 -48 -43c-88 -77 -174 -186 -174 -307c0 -152 122 -251 265 -251zM332 822c-7 -31 -11 -65 -11 -103c0 -41 5 -80 11 -121c69 69 147 147 147 251c0 69 -25 118 -40 118c-52 0 -97 -105 -107 -145zM387 255 +c146 0 253 -103 253 -253c0 -104 -73 -205 -171 -238c7 -38 12 -69 15 -89c10 -56 16 -102 16 -140c0 -129 -63 -202 -192 -202c-29 0 -55 4 -77 12v-8l-1 -1c-38 -26 -43 -74 -43 -117c0 -44 5 -92 43 -119l1 -1v-21l-4 2c-52 28 -85 78 -85 139c0 56 28 103 74 131 +c-67 29 -93 88 -93 136c0 66 44 124 114 124c75 0 116 -57 116 -111c0 -64 -47 -104 -94 -112c-3 -1 -5 -1 -5 -3c0 -1 2 -3 3 -3c2 -1 23 -5 47 -5c101 0 155 55 155 158c0 54 -12 124 -30 220c-24 -5 -51 -8 -80 -8c-186 0 -349 147 -349 335c0 200 126 321 217 406 +c21 17 73 70 74 71c-17 112 -22 161 -22 215c0 84 18 211 82 288c33 38 64 51 72 51c17 0 46 -36 70 -87c17 -36 45 -109 45 -200c0 -159 -74 -285 -179 -396c8 -55 18 -114 28 -174z" /> +d="M13 469h72c7 0 13 -6 13 -13v-910c0 -7 -6 -13 -13 -13h-72c-7 0 -13 6 -13 13v910c0 7 6 13 13 13zM627 -261c0 -140 -103 -219 -224 -219c-75 0 -182 31 -182 123c0 49 34 81 83 81c44 0 75 -32 75 -76c0 -43 -29 -74 -73 -74c-6 0 -10 1 -11 1c23 -16 54 -25 85 -25 +c105 0 122 84 122 174c0 77 -2 189 -90 189s-106 -95 -108 -106c0 -1 0 -13 -14 -13s-15 12 -15 13c-11 56 -33 151 -92 175v-436c0 -7 -5 -13 -12 -13s-13 6 -13 13v910c0 7 6 13 13 13s12 -6 12 -13v-436c56 23 83 119 92 174c0 1 1 14 15 14s14 -13 14 -14 +c2 -10 20 -105 108 -105s90 112 90 189c0 90 -17 174 -122 174c-31 0 -62 -9 -85 -25c48 0 84 -18 84 -73c0 -44 -31 -76 -75 -76c-49 0 -83 32 -83 81c0 92 107 123 182 123c121 0 224 -79 224 -219c0 -108 -60 -221 -182 -221c-43 0 -56 3 -94 26c-2 -4 -22 -44 -55 -67 +c33 -23 53 -63 55 -67c39 24 56 26 79 26c131 0 197 -97 197 -221z" /> +d="M254 251c93 0 164 -29 211 -85c41 -49 63 -118 63 -201c0 -67 -25 -145 -69 -220c-25 -42 -56 -84 -92 -123c-40 -43 -86 -83 -137 -120c-91 -71 -205 -118 -206 -118s-4 -1 -5 -1c-6 0 -15 2 -18 12c0 2 -1 3 -1 5c0 12 12 19 12 19c1 0 99 45 203 140 +c39 35 83 98 116 164c30 59 65 148 65 241c0 168 -50 250 -152 250c-35 0 -67 -6 -92 -20c-17 -9 -39 -29 -50 -45s-23 -45 -26 -64c8 7 25 17 35 21c9 3 20 5 32 5c17 0 37 -4 58 -18c30 -19 48 -51 48 -86c0 -39 -19 -75 -50 -92c-19 -11 -42 -17 -64 -17 +c-13 0 -26 2 -38 6c-30 10 -53 29 -65 56c-9 19 -13 41 -13 65c0 17 2 35 7 53c9 35 32 86 90 129c1 0 62 44 138 44zM568 124c0 28 22 51 48 51s48 -23 48 -51s-22 -50 -48 -50s-48 22 -48 50zM568 -123c0 28 22 51 48 51s48 -23 48 -51s-22 -51 -48 -51s-48 23 -48 51z +" /> +d="M567 124c0 28 22 51 48 51s48 -23 48 -51s-22 -50 -48 -50s-48 22 -48 50zM567 -123c0 28 22 51 48 51s48 -23 48 -51s-22 -51 -48 -51s-48 23 -48 51zM259 -710c0 -4 1 -6 22 -6h19l-3 -23h-139l3 23h19c12 0 20 0 22 3v1c1 1 2 1 3 6l1 1c0 1 1 5 4 15l32 120 +c1 3 2 8 2 11s0 6 -11 6h-33l6 21h2c31 1 72 12 86 22v1h18l-49 -182c-3 -11 -4 -16 -4 -19zM490 -510c2 0 4 -1 4 -5c0 -11 -9 -27 -19 -36c-14 -12 -32 -18 -58 -18c-14 0 -15 0 -38 5l-9 -34c14 5 25 7 38 7c20 0 36 -5 48 -16s18 -26 18 -44c0 -26 -10 -49 -28 -66 +s-43 -27 -71 -27c-41 0 -68 21 -68 53c0 21 13 35 32 35c17 0 28 -11 28 -27c0 -13 -7 -23 -20 -27c-1 0 -2 -1 -2 -1c0 -5 10 -11 23 -11c27 0 49 29 49 67c0 25 -11 39 -30 39c-7 0 -11 -2 -26 -8c-2 -12 -10 -19 -20 -19c-8 0 -13 6 -13 14s4 14 13 18l30 102l2 -1 +c26 -6 49 -9 69 -9c17 0 30 2 44 8l1 1h3zM253 251c93 0 165 -29 212 -85c41 -49 63 -118 63 -201c0 -67 -25 -145 -69 -220c-25 -42 -56 -84 -92 -123c-40 -43 -86 -82 -137 -119c-91 -71 -205 -119 -206 -119s-5 -1 -6 -1c-6 0 -14 2 -17 12c0 2 -1 4 -1 5 +c0 12 11 19 11 19h1c1 0 99 45 203 140c39 35 83 98 116 164c30 59 65 148 65 241c0 168 -50 250 -152 250c-35 0 -67 -6 -92 -20c-17 -9 -39 -29 -50 -45s-23 -45 -26 -64c8 7 24 17 34 21c9 3 19 5 32 5c17 0 38 -4 59 -18c30 -19 48 -51 48 -86c0 -39 -20 -76 -51 -93 +c-18 -11 -40 -16 -61 -16c-14 0 -27 2 -40 6c-30 10 -53 29 -65 56c-9 19 -13 41 -13 65c0 17 2 35 7 53c9 35 32 86 90 129c1 0 61 44 137 44z" /> +d="M568 124c0 28 22 51 48 51s48 -23 48 -51s-22 -50 -48 -50s-48 22 -48 50zM568 -123c0 28 22 51 48 51s48 -23 48 -51s-22 -51 -48 -51s-48 23 -48 51zM352 -560v-1c0 -24 -14 -41 -43 -53c18 -13 29 -33 29 -55c0 -43 -38 -73 -92 -73c-44 0 -74 22 -74 55 +c0 17 9 34 24 46c8 6 17 10 28 15c-15 14 -21 28 -21 47c0 20 8 38 23 51s36 20 59 20c19 0 36 -5 48 -14c10 -8 19 -25 19 -38zM267 -588l1 -1c4 -2 8 -5 22 -12c16 12 21 23 21 39c0 21 -11 33 -31 33s-33 -13 -33 -31c0 -13 4 -19 20 -28zM242 -640 +c-17 -10 -26 -27 -26 -46c0 -21 14 -35 36 -35s39 15 39 34c0 14 -8 24 -27 35c-2 1 -2 2 -14 8c-3 2 -4 2 -8 4zM254 251c93 0 164 -29 211 -85c41 -49 63 -118 63 -201c0 -67 -24 -145 -68 -220c-25 -42 -57 -84 -93 -123c-40 -43 -86 -82 -137 -119 +c-91 -71 -205 -119 -206 -119s-4 -1 -5 -1c-6 0 -15 2 -18 12c0 2 -1 3 -1 5c0 12 12 19 12 19c1 0 99 45 203 140c39 35 83 98 116 164c30 59 65 148 65 241c0 168 -50 250 -152 250c-35 0 -67 -6 -92 -20c-17 -9 -39 -29 -50 -45s-23 -45 -26 -64c8 7 25 17 35 21 +c9 3 20 5 32 5c17 0 37 -4 58 -18c30 -19 48 -51 48 -86c0 -39 -19 -76 -50 -93c-18 -11 -40 -16 -62 -16c-14 0 -27 2 -40 6c-30 10 -53 29 -65 56c-9 19 -13 41 -13 65c0 17 2 35 7 53c9 35 32 86 90 129c1 0 62 44 138 44z" /> +d="M569 124c0 28 22 51 48 51s48 -23 48 -51s-22 -50 -48 -50s-48 22 -48 50zM569 -123c0 28 22 51 48 51s48 -23 48 -51s-22 -51 -48 -51s-48 23 -48 51zM282 248c176 -12 244 -137 244 -284c0 -122 -83 -308 -298 -461c-92 -72 -205 -119 -205 -119h-4c-6 0 -15 1 -18 11 +c0 2 -1 3 -1 5c0 11 11 18 11 18s97 44 203 140c69 63 182 240 182 406s-48 251 -153 251c-155 0 -169 -133 -169 -133s28 28 69 28c17 0 36 -5 57 -18c33 -21 48 -53 48 -85c0 -37 -20 -74 -51 -92c-19 -11 -42 -17 -63 -17c-43 0 -84 22 -102 62c-8 18 -13 41 -13 66 +c0 58 26 127 97 180c0 0 50 36 117 42c-32 7 -53 27 -53 54c0 18 10 36 26 48c8 6 16 11 28 16c-16 15 -22 29 -22 48c0 21 9 40 24 53s37 21 61 21c20 0 38 -5 50 -15c11 -8 19 -26 19 -39v-1c0 -25 -14 -43 -44 -55c19 -14 29 -34 29 -57c0 -37 -27 -65 -69 -73zM278 404 +h2c4 -2 7 -5 22 -13c16 12 23 24 23 41c0 22 -12 34 -33 34c-20 0 -35 -13 -35 -32c0 -13 5 -20 21 -30zM252 351c-17 -11 -27 -27 -27 -47c0 -22 15 -37 38 -37s40 15 40 35c0 15 -8 26 -28 37c-3 2 -3 2 -15 8z" /> +d="M569 124c0 28 22 51 48 51s48 -23 48 -51s-22 -50 -48 -50s-48 22 -48 50zM569 -123c0 28 22 51 48 51s48 -23 48 -51s-22 -51 -48 -51s-48 23 -48 51zM225 278h20l-4 -23h-144l4 23h19c12 0 21 1 23 4c1 1 3 2 4 7c0 1 1 7 4 17l33 123c1 3 2 9 2 12s0 6 -12 6h-33l6 22 +h2c32 1 75 12 89 23h18l-50 -188c-3 -11 -4 -17 -4 -20c0 -4 1 -6 23 -6zM292 285l-2 -1v-1c0 -5 11 -11 25 -11c28 0 50 31 50 70c0 25 -11 40 -30 40c-8 0 -13 -1 -28 -8c-2 -13 -9 -20 -20 -20c-8 0 -14 6 -14 14s5 15 14 19l30 105h3c27 -6 50 -10 71 -10 +c17 0 31 3 45 9h2c1 0 2 1 3 1c2 0 4 -2 4 -6c0 -11 -9 -28 -20 -37c-14 -12 -33 -18 -60 -18c-15 0 -15 0 -39 5l-10 -35c15 5 27 7 40 7c20 0 38 -6 50 -17s19 -26 19 -45c0 -27 -11 -52 -30 -69s-45 -27 -73 -27c-43 0 -70 21 -70 54c0 21 13 36 33 36 +c17 0 29 -11 29 -27c0 -14 -8 -23 -22 -28zM252 249c198 0 273 -131 273 -285c0 -122 -82 -308 -297 -461c-92 -72 -206 -119 -206 -119h-4c-5 0 -14 1 -17 11c0 2 -1 3 -1 5c0 11 11 18 11 18s97 44 203 140c69 63 181 240 181 406s-48 251 -153 251 +c-155 0 -168 -133 -168 -133s27 28 68 28c17 0 36 -5 57 -18c34 -21 48 -54 48 -86c0 -37 -19 -73 -50 -91c-19 -11 -41 -17 -63 -17c-43 0 -85 22 -103 62c-8 18 -13 41 -13 66c0 58 26 127 97 180c0 0 60 43 137 43z" /> +d="M36 746h369v-81h-136v-374h-96v374h-137v81zM0 -231l165 463h110l164 -463h-105l-31 95h-170l-32 -95h-101zM219 126l-60 -182h119zM393 -329c14 -20 21 -43 21 -71s-7 -51 -21 -68c-8 -10 -20 -18 -36 -26c24 -9 42 -22 54 -41s18 -41 18 -68s-7 -52 -21 -74 +c-9 -14 -19 -26 -32 -36c-15 -11 -33 -20 -53 -24c-21 -4 -42 -6 -63 -6h-2h-209v464h224c57 -1 96 -18 120 -50zM242 -360h-101v-102h113c20 0 36 3 49 11s19 21 19 41c0 22 -8 36 -25 43c-14 5 -33 7 -55 7zM255 -539h-114v-123h113c20 0 36 3 47 8c20 10 30 29 30 58 +c0 24 -9 40 -29 49c-11 5 -27 8 -47 8z" /> +d="M24 500h247v-54h-91v-251h-64v251h-92v54zM0 -154l111 310h73l110 -310h-70l-21 63h-114l-21 -63h-68zM147 85l-40 -122h79zM263 -220c10 -13 14 -29 14 -48c0 -18 -4 -34 -14 -45c-5 -7 -13 -12 -24 -17c16 -7 28 -15 36 -28s12 -27 12 -46c0 -18 -4 -34 -14 -49 +c-6 -9 -12 -18 -21 -24c-10 -8 -22 -14 -36 -16c-14 -3 -28 -4 -42 -4h-1h-140v311h150c38 -1 64 -12 80 -34zM162 -241h-68v-68h76c14 0 24 2 33 7c9 6 13 14 13 28c0 15 -6 24 -17 29c-9 3 -22 4 -37 4zM171 -361h-77v-82h76c14 0 24 2 32 5c13 7 20 20 20 39 +c0 16 -6 27 -20 33c-7 3 -18 5 -31 5z" /> +d="M92 -381c0 49 33 93 86 93c56 0 86 -43 86 -84c0 -48 -35 -78 -70 -83c-2 -1 -3 -1 -3 -3c0 -1 1 -2 2 -2s17 -4 35 -4c76 0 116 41 116 119c0 40 -9 93 -23 165c-18 -4 -38 -6 -59 -6c-140 0 -262 110 -262 251c0 150 94 241 162 304c16 13 55 53 56 54 +c-13 84 -17 121 -17 161c0 63 14 158 62 216c25 29 48 38 54 38c13 0 35 -27 53 -65c12 -27 33 -82 33 -150c0 -119 -55 -213 -134 -297c6 -41 14 -86 21 -131c110 0 190 -77 190 -189c0 -78 -55 -154 -128 -179c5 -28 8 -51 11 -66c7 -43 12 -77 12 -106 +c0 -96 -47 -151 -144 -151c-101 0 -139 66 -139 115zM249 620c-6 -23 -8 -48 -8 -76c0 -31 3 -61 8 -91c51 52 110 110 110 188c0 52 -19 88 -30 88c-39 0 -73 -78 -80 -109zM315 -150l-43 246c-44 -11 -78 -47 -78 -93c0 -36 16 -56 45 -74c9 -6 16 -10 16 -16 +c0 -8 -6 -10 -12 -10c-60 0 -101 71 -101 125c0 69 46 142 114 162c-5 31 -10 66 -17 106c-11 -11 -23 -21 -36 -32c-66 -58 -130 -140 -130 -231c0 -113 91 -188 198 -188c15 0 29 2 44 5zM422 -11c0 66 -50 112 -117 112c5 -34 26 -153 41 -242c53 21 76 76 76 130z" /> +d="M10 355h54c5 0 9 -4 9 -9v-683c0 -5 -4 -10 -9 -10h-54c-5 0 -10 5 -10 10v683c0 5 5 9 10 9zM471 -192c0 -105 -77 -165 -168 -165c-83 0 -114 38 -118 42c-13 17 -20 34 -20 51c0 36 27 61 63 61c32 0 56 -26 56 -58c0 -10 -3 -20 -8 -30c-12 -21 -33 -24 -55 -24 +c17 -12 41 -18 64 -18c79 0 91 62 91 130c0 58 -1 141 -67 141s-79 -71 -81 -79c0 -1 0 -10 -11 -10s-11 9 -11 10c-1 4 -6 39 -26 85c-12 28 -29 41 -42 46v-327c0 -5 -5 -10 -10 -10s-10 5 -10 10v683c0 5 5 9 10 9s10 -4 10 -9v-328c41 16 62 92 68 131c0 1 0 11 11 11 +s11 -10 11 -11c2 -8 15 -79 81 -79s67 85 67 142c0 68 -12 130 -91 130c-23 0 -47 -6 -64 -18c22 0 43 -3 55 -24c5 -10 8 -20 8 -30c0 -32 -23 -59 -56 -59c-37 0 -63 26 -63 62c0 17 7 34 20 51c4 4 35 41 118 41c91 0 168 -59 168 -164c0 -81 -45 -166 -137 -166 +c-28 0 -47 4 -71 19c-2 -3 -16 -33 -41 -50c25 -17 39 -47 41 -50c28 17 49 19 62 19c97 0 146 -74 146 -165z" /> +d="M348 131c1 -1 0 -1 1 -2c30 -36 47 -86 47 -149c0 -50 -19 -108 -52 -164c-39 -66 -98 -130 -172 -182c-68 -53 -153 -89 -154 -89s-3 -1 -4 -1c-4 0 -11 2 -13 9c0 1 -1 3 -1 4c0 9 9 14 9 14c1 0 74 34 152 105c23 21 57 63 87 123c14 27 29 64 39 105c3 13 7 33 8 46 +c0 3 1 7 1 10c0 7 1 13 1 20c0 126 -37 188 -114 188c-60 0 -91 -27 -107 -50c-8 -12 -17 -33 -19 -47c9 9 27 19 49 19c14 0 29 -4 45 -14c23 -14 36 -37 36 -63c0 -30 -15 -57 -38 -70c-12 -7 -34 -13 -48 -13c-8 0 -20 3 -28 5c-22 7 -40 22 -49 42c-7 15 -10 32 -10 50 +c0 12 2 25 5 38c7 26 24 64 68 97c0 0 46 33 103 33c36 0 67 -7 94 -18c1 -1 2 -1 3 -2c9 -4 24 -11 32 -17l4 -4c8 -6 19 -16 25 -23zM341 137l-2 2zM365 106c-1 1 -2 3 -3 4c1 -1 2 -3 3 -4zM381 70c0 1 -1 1 -1 2c0 -1 1 -1 1 -2zM462 61c-20 0 -36 17 -36 38 +s16 38 36 38s36 -17 36 -38s-16 -38 -36 -38zM462 -55c20 0 36 -17 36 -38s-16 -38 -36 -38s-36 17 -36 38s16 38 36 38z" /> +d="M137 128c18 -13 28 -33 28 -55c0 -43 -38 -73 -92 -73c-44 0 -73 21 -73 54c0 17 9 35 24 47c8 6 17 10 28 15c-15 14 -21 27 -21 46c0 20 8 39 23 52s36 20 59 20c19 0 36 -6 48 -15c10 -8 19 -25 19 -38c0 -24 -14 -41 -43 -53zM95 153h1c4 -2 8 -5 22 -12 +c16 12 21 23 21 39c0 21 -11 33 -31 33s-34 -13 -34 -31c0 -13 5 -20 21 -29zM69 101c-17 -10 -26 -26 -26 -45c0 -21 15 -35 37 -35s39 14 39 33c0 14 -8 25 -27 36c-2 1 -3 1 -15 7c-3 2 -4 2 -8 4z" /> +d="M101 28c0 -4 1 -5 22 -5h19l-3 -23h-139l3 23h19c12 0 20 0 22 3c1 1 3 2 4 7c0 1 1 6 4 16l32 120c1 3 2 8 2 11s0 6 -11 6h-33l6 21h2c31 1 72 12 86 22v1h18l-49 -182c-3 -11 -4 -17 -4 -20zM332 229c2 0 4 -1 4 -5c0 -11 -9 -27 -19 -36c-14 -12 -32 -18 -58 -18 +c-14 0 -15 0 -38 5l-9 -34c14 5 25 7 38 7c20 0 36 -5 48 -16s18 -26 18 -44c0 -26 -10 -50 -28 -67s-43 -26 -71 -26c-41 0 -68 21 -68 53c0 21 13 35 32 35c17 0 28 -11 28 -27c0 -13 -7 -23 -20 -27l-2 -1c0 -5 10 -11 23 -11c27 0 49 29 49 67c0 25 -11 38 -30 38 +c-7 0 -11 -1 -26 -7c-2 -12 -10 -19 -20 -19c-8 0 -13 6 -13 14s4 13 13 17l30 103l2 -1c26 -6 49 -9 69 -9c17 0 30 2 44 8h1c1 0 2 1 3 1z" /> +c58 87 197 112 197 229c0 45 -7 63 -26 75c-12 8 -28 11 -42 11c-15 0 -29 -3 -34 -5c-18 -5 -23 -12 -23 -18c0 -5 4 -10 7 -11c26 -10 46 -41 46 -69c0 -41 -33 -74 -74 -74s-75 33 -75 74c0 46 28 137 179 137s170 -83 170 -125c0 -60 -27 -112 -133 -145 +s-131 -71 -131 -71c10 2 18 3 26 3c54 0 68 -40 133 -40c49 0 69 72 77 94z" /> +d="M272 16h-2c44 -14 94 -45 94 -118c0 -109 -104 -142 -200 -142c-22 0 -71 1 -110 37c-36 33 -39 69 -39 82v4c0 36 29 65 65 65s64 -29 64 -65c0 -33 -27 -62 -60 -64c11 -8 37 -16 65 -16c42 0 87 18 87 85c0 70 -23 100 -67 106c-32 5 -55 5 -72 6c-11 1 -13 12 -13 12 +v20s1 14 13 14s68 4 80 6s59 11 59 74c0 54 -45 79 -87 79c-19 0 -38 -5 -52 -15l-3 -3c28 -6 50 -34 50 -63c0 -36 -28 -64 -64 -64s-65 28 -65 64l1 2h-1s-5 122 167 122s175 -113 175 -122v-5c0 -18 -5 -70 -85 -101z" /> +d="M208 -127h-172c-9 0 -11 6 -11 6s-7 11 -10 18c-1 2 -1 4 -1 6c0 6 3 11 3 11c26 37 56 87 82 168s31 155 31 155c1 6 6 12 13 12h149c4 0 7 -2 10 -4l22 -22c1 -1 3 -5 3 -10c0 -4 -1 -9 -5 -14c-118 -158 -230 -278 -230 -278h116v82c0 4 1 8 4 11l91 83c2 2 6 3 9 3h2 +c2 0 3 0 5 -1l12 -6c4 -2 7 -7 7 -13v-159h90c8 0 14 -7 14 -14v-19c0 -8 -6 -15 -14 -15h-90v-74h90c8 0 14 -6 14 -14v-19c0 -8 -6 -14 -14 -14h-303c-7 0 -14 6 -14 14v19c0 8 7 14 14 14h83v74z" /> +d="M27 218v4c0 14 12 17 22 17c7 0 12 -1 12 -1c43 -6 78 -10 114 -10c37 0 75 4 124 16c6 1 10 2 14 2c13 0 18 -6 18 -14c0 -3 -1 -7 -2 -10c-8 -21 -24 -58 -71 -77c-22 -9 -53 -12 -83 -12c-35 0 -68 4 -83 5h-1c-6 0 -11 -5 -11 -11v-63c0 -4 3 -7 7 -7c1 0 3 0 4 1 +c29 20 64 28 97 28c45 0 88 -14 113 -31c37 -25 61 -77 61 -131c0 -40 -13 -82 -45 -115c-36 -37 -91 -53 -142 -53c-37 0 -73 9 -98 23c-52 30 -62 68 -62 102s27 70 66 70s73 -19 73 -68s-31 -60 -40 -66c-3 -2 -4 -4 -4 -7c0 -2 2 -5 5 -6c6 -4 19 -7 42 -7h8 +c66 3 82 75 82 125c0 48 -13 109 -84 109c-63 0 -74 -52 -79 -65c-2 -6 -6 -7 -10 -7h-5c-5 1 -26 6 -35 8c-6 1 -7 9 -7 13v3s4 66 5 122v13c0 52 -5 100 -5 100z" /> +d="M247 48c63 0 140 -37 140 -135c0 -116 -131 -157 -166 -157s-72 2 -130 46c-59 52 -76 121 -76 182c0 56 15 105 25 129c20 46 85 132 175 132c100 0 142 -53 155 -89c4 -8 6 -23 6 -32v-1v-2c0 -36 -29 -64 -65 -64s-64 28 -64 64c0 23 17 50 38 59 +c-10 11 -25 19 -50 19c-54 0 -79 -46 -85 -83c-3 -18 -5 -32 -5 -48s2 -32 5 -53c14 15 36 33 97 33zM210 -202c33 0 61 45 61 101s-28 102 -61 102s-60 -46 -60 -102s27 -101 60 -101z" /> +d="M162 -123c23 33 125 206 133 222c-10 -10 -47 -13 -67 -13c-80 0 -83 38 -118 38s-50 -31 -50 -54v-32c0 -6 -5 -11 -11 -11h-23c-6 0 -11 5 -11 11v185c0 6 5 11 11 11h23c6 0 11 -5 11 -11v-48c3 6 41 69 103 69c65 0 77 -86 119 -86c40 0 42 69 42 79s7 14 12 14h18 +c6 0 10 -4 11 -14s1 -14 1 -23c0 -23 -6 -78 -17 -109c-22 -63 -54 -148 -66 -195c-6 -22 -8 -46 -8 -67c0 -37 6 -68 6 -70v-3c1 -9 -16 -20 -25 -20c-7 0 -34 7 -63 7c-3 0 -7 -1 -10 -1c-32 -2 -42 -6 -58 -6c-11 0 -14 6 -14 17c0 37 29 77 51 110z" /> +d="M324 18c52 -27 69 -72 69 -120c0 -81 -85 -146 -189 -146s-189 65 -189 146c0 48 25 85 70 111c-47 30 -57 66 -57 106c0 72 79 131 176 131s176 -59 176 -131c0 -40 -23 -72 -56 -97zM204 -192c63 0 98 35 98 62c0 55 -97 89 -165 112c0 0 -52 -16 -52 -83 +c0 -56 55 -91 119 -91zM268 45c18 9 40 32 40 80c0 46 -42 75 -104 75c-43 0 -79 -16 -79 -55c0 -45 75 -78 143 -100z" /> +d="M155 -47c-63 0 -140 37 -140 135c0 116 131 157 166 157s72 -2 130 -46c59 -52 76 -121 76 -182c0 -56 -15 -105 -25 -129c-20 -46 -85 -132 -175 -132c-100 0 -142 53 -155 89c-4 8 -6 23 -6 32v1v2c0 36 29 64 65 64s64 -28 64 -64c0 -23 -17 -50 -38 -59 +c10 -11 25 -19 50 -19c54 0 79 46 85 83c3 18 5 32 5 48s-2 32 -5 53c-14 -15 -36 -33 -97 -33zM192 204c-33 0 -61 -46 -61 -102s28 -101 61 -101s60 45 60 101s-27 102 -60 102z" /> +c1 -4 2 -11 2 -15v-6c0 -50 -40 -90 -90 -90h-11c-41 5 -74 37 -79 78c-1 4 -1 8 -1 12c0 32 18 61 43 77z" /> +d="M424 -83h13c5 0 8 -3 8 -8c-4 -107 -81 -165 -180 -165h-9v-109c0 -6 -5 -11 -11 -11h-27c-6 0 -11 5 -11 11v112c-195 21 -207 156 -207 265c0 61 22 225 207 244v121c0 6 5 11 11 11h27c6 0 11 -5 11 -11v-120c159 -4 196 -93 205 -134c1 -4 2 -11 2 -15v-6 +c0 -50 -40 -90 -90 -90h-10c-41 5 -75 37 -80 78c-1 4 -1 8 -1 12c0 32 18 61 43 77c2 1 2 2 2 4c0 1 0 2 -1 4c-10 16 -29 33 -70 35v-446h9c88 0 147 50 151 133c0 4 4 8 8 8zM136 102v-191c0 -66 23 -109 71 -126v432c-57 -16 -71 -68 -71 -115z" /> +d="M23 179c8 0 14 -6 14 -14v-329s-7 -14 -14 -14h-9c-8 0 -14 7 -14 14v329s6 14 14 14h9zM451 179c8 0 14 -6 14 -14v-329s-7 -14 -14 -14h-9c-8 0 -14 7 -14 14v79c-30 -30 -81 -50 -158 -50c-78 0 -129 20 -159 50v-79c0 -6 -7 -14 -14 -14h-9c-8 0 -14 7 -14 14v329 +s6 14 14 14h9c8 0 14 -6 14 -14v-78c30 29 81 49 159 49c77 0 128 -20 158 -49v78c0 8 6 14 14 14h9zM321 -97c24 8 33 25 33 51s-19 90 -33 117c-14 26 -32 33 -59 33c-16 0 -32 -3 -44 -6c-22 -8 -32 -22 -32 -45v-6c1 -27 19 -92 32 -117c13 -24 32 -33 60 -33 +c15 0 31 3 43 6zM524 179c8 0 14 -6 14 -14v-329s-7 -14 -14 -14h-9c-8 0 -14 7 -14 14v329s6 14 14 14h9z" /> +d="M187 136c138 0 186 -70 186 -135s-48 -135 -186 -135s-187 70 -187 135s49 135 187 135zM238 -96c24 7 32 25 32 51c0 25 -18 89 -32 116s-32 33 -60 33c-15 0 -31 -2 -43 -6c-24 -8 -34 -24 -32 -51c1 -27 19 -91 32 -116s32 -33 60 -33c15 0 31 2 43 6z" /> +d="M213 132c62 0 112 -33 112 -92c0 -88 -109 -173 -213 -173c-81 0 -112 48 -112 91c0 93 116 174 213 174zM186 -44c3 2 104 50 104 93c0 22 -16 36 -40 36c-36 0 -107 -40 -111 -42s-104 -51 -104 -93c0 -9 7 -36 40 -36c35 0 108 40 111 42z" /> - +d="M186 23h128c6 0 11 -6 11 -14v-19c0 -7 -5 -13 -11 -13h-128v-101c0 -4 -6 -8 -14 -8h-19c-7 0 -13 4 -13 8v101h-129c-6 0 -11 6 -11 13v19c0 8 5 14 11 14h128v100c0 5 6 9 14 9h19c8 0 14 -4 14 -9v-100z" /> +d="M184 0l85 -80c17 22 27 50 27 80c0 27 -8 52 -22 73zM162 -19l-93 -76c24 -24 58 -38 94 -38c33 0 64 12 87 32zM140 1l-84 79c-17 -22 -27 -50 -27 -80c0 -27 8 -52 22 -73zM163 20l93 76c-24 24 -58 38 -94 38c-33 0 -64 -13 -87 -33zM162 163c90 0 163 -73 163 -163 +s-73 -162 -163 -162s-162 72 -162 162s72 163 162 163z" /> +d="M350 179h9c8 0 14 -7 14 -14v-329c0 -8 -6 -14 -14 -14h-9c-7 0 -14 6 -14 14v134c-49 -35 -138 -98 -140 -99c-2 -2 -6 -3 -10 -3c-3 0 -7 1 -13 6l-137 95v-133c0 -8 -6 -14 -13 -14h-9c-8 0 -14 6 -14 14v329c0 7 6 14 14 14h9c7 0 13 -7 13 -14v-134l141 99 +c2 2 5 3 9 3c5 0 8 -1 10 -3c2 -1 92 -64 140 -98v133c0 7 7 14 14 14zM153 -80l149 104l-82 57l-149 -104z" /> +d="M196 -130c-2 -2 -6 -3 -10 -3c-3 0 -7 1 -13 6l-170 118c-2 2 -3 5 -3 8c0 4 2 7 5 9l172 121c2 2 5 3 9 3c5 0 8 -1 10 -3c3 -2 172 -120 172 -120c3 -2 5 -6 5 -9c0 -4 -2 -7 -5 -9c0 0 -170 -120 -172 -121zM153 -81l149 104l-82 57l-149 -104z" /> +d="M330 -9l-154 -120c-2 -2 -5 -3 -9 -3c-3 0 -6 1 -8 3l-154 120c-3 2 -5 6 -5 9c0 4 2 7 5 9l154 121c2 2 5 3 8 3c4 0 7 -1 9 -3l154 -121c3 -2 5 -6 5 -9c0 -4 -2 -7 -5 -9zM197 -80l74 57l-133 104l-74 -58z" /> +d="M330 -10l-154 -119c-2 -2 -5 -3 -9 -3c-3 0 -6 1 -8 3l-154 119c-3 3 -5 6 -5 10c0 3 2 7 5 9l154 121c2 2 5 3 8 3c4 0 7 -1 9 -3l154 -121c3 -2 5 -6 5 -10c0 -3 -2 -6 -5 -9z" /> +d="M230 230c127 0 230 -103 230 -230s-103 -230 -230 -230s-230 103 -230 230s103 230 230 230zM376 -146c19 19 34 41 44 66s16 52 16 80s-6 55 -16 80c-21 49 -61 89 -110 110c-25 10 -52 16 -80 16s-55 -6 -80 -16c-49 -21 -89 -61 -110 -110c-10 -25 -16 -52 -16 -80 +s6 -55 16 -80c21 -49 61 -89 110 -110c25 -10 52 -16 80 -16s55 6 80 16s47 25 66 44zM388 96l-122 -96l122 -96c3 -2 5 -6 5 -10c0 -3 -2 -7 -4 -9l-12 -13c-2 -3 -6 -4 -10 -4c-3 0 -7 1 -9 3l-127 101l-128 -101c-2 -2 -6 -3 -9 -3c-4 0 -8 1 -10 4l-12 13 +c-2 2 -4 6 -4 9c0 4 2 8 5 10l122 96l-122 96c-3 2 -5 6 -5 10s2 8 4 10l13 12c3 2 5 4 9 4c3 0 7 -1 9 -3l128 -101l127 101c2 2 6 3 9 3c4 0 7 -2 10 -4l12 -12c2 -2 4 -5 4 -9v-1c0 -4 -2 -8 -5 -10z" /> +d="M23 179c8 0 14 -6 14 -14v-329s-7 -14 -14 -14h-9c-8 0 -14 7 -14 14v329s6 14 14 14h9zM451 179c8 0 14 -6 14 -14v-329s-7 -14 -14 -14h-9c-8 0 -14 7 -14 14v79c-30 -30 -81 -50 -158 -50c-78 0 -129 20 -159 50v-79c0 -6 -7 -14 -14 -14h-9c-8 0 -14 7 -14 14v329 +s6 14 14 14h9c8 0 14 -6 14 -14v-78c30 29 81 49 159 49c77 0 128 -20 158 -49v78c0 8 6 14 14 14h9zM321 -97c24 8 33 25 33 51s-19 90 -33 117c-14 26 -32 33 -59 33c-16 0 -32 -3 -44 -6c-22 -8 -32 -22 -32 -45v-6c1 -27 19 -92 32 -117c13 -24 32 -33 60 -33 +c15 0 31 3 43 6zM524 179c8 0 14 -6 14 -14v-329s-7 -14 -14 -14h-9c-8 0 -14 7 -14 14v329s6 14 14 14h9z" /> +d="M187 136c138 0 186 -70 186 -135s-48 -135 -186 -135s-187 70 -187 135s49 135 187 135zM238 -96c24 7 32 25 32 51c0 25 -18 89 -32 116s-32 33 -60 33c-15 0 -31 -2 -43 -6c-24 -8 -34 -24 -32 -51c1 -27 19 -91 32 -116s32 -33 60 -33c15 0 31 2 43 6z" /> +d="M0 -865v823c0 93 116 174 213 174c62 0 112 -34 112 -92c0 -88 -109 -173 -213 -173c-38 0 -65 10 -83 26v-758h-29zM186 -44c3 2 104 50 104 93c0 21 -16 36 -40 36c-36 0 -107 -40 -111 -42s-104 -51 -104 -93c0 -9 7 -36 40 -36c35 0 108 40 111 42z" /> +d="M325 865v-825c0 -73 -98 -171 -215 -171c-69 0 -110 39 -110 85c0 85 101 178 215 178c15 0 54 -2 81 -24v757h29z" /> +d="M0 -864v822c0 93 116 174 213 174c62 0 112 -34 112 -92c0 -88 -109 -173 -213 -173c-38 0 -65 10 -83 26v-757h-29z" /> +d="M325 631v-591c0 -73 -98 -171 -215 -171c-69 0 -110 39 -110 85c0 85 101 178 215 178c15 0 54 -2 81 -24v769c0 7 6 13 13 13c5 0 11 -4 12 -8c0 -1 9 -36 10 -39c1 -4 18 -61 56 -118c27 -42 107 -146 119 -165s79 -95 79 -224c0 -61 -12 -175 -62 -264 +c-4 -7 -10 -11 -16 -11c-2 0 -3 0 -5 1c-4 2 -6 5 -6 9s2 9 4 15c26 72 45 146 45 218c0 129 -107 273 -220 327z" /> +d="M530 365c1 10 1 20 1 30c0 37 -8 78 -48 129c-35 47 -100 117 -151 117c7 -49 33 -86 67 -120c49 -49 79 -81 106 -116c8 -11 17 -24 25 -40zM296 107v771c0 7 3 13 15 13c11 0 13 -5 14 -13c3 -10 28 -103 66 -158s88 -106 136 -168c34 -45 48 -93 48 -145 +c0 -49 -9 -86 -19 -123c3 -21 5 -45 5 -74c0 -56 -26 -110 -44 -138c-4 -6 -8 -15 -15 -14c-2 0 -4 0 -5 1c-5 3 -7 7 -7 11c0 5 2 11 4 16c15 40 21 91 22 115c0 4 0 8 1 11c0 108 -103 221 -192 269v-442c0 -73 -98 -170 -215 -170c-69 0 -110 38 -110 85 +c0 84 101 178 215 178c15 0 54 -2 81 -25z" /> +d="M0 -875v833c0 93 116 174 213 174c62 0 112 -33 112 -92c0 -47 -31 -94 -77 -127c29 -30 58 -77 58 -139c0 -27 -2 -44 -6 -58c6 -37 9 -73 9 -107c0 -185 -139 -262 -193 -312c-40 -38 -71 -68 -86 -172c-2 -8 -7 -16 -15 -16s-15 9 -15 16zM112 -133 +c-38 0 -65 11 -83 26v-339c49 15 135 56 198 129c16 18 28 37 33 57l1 4c3 12 4 24 4 37c0 54 -17 87 -41 117c-35 -19 -74 -31 -112 -31zM37 -624c48 12 122 33 183 109c26 33 47 81 47 159c-27 -49 -96 -105 -154 -150c-59 -44 -67 -81 -74 -107c0 -3 -1 -7 -2 -11z" /> +d="M296 107v947c0 7 3 12 15 12c11 0 13 -5 14 -12c3 -10 28 -103 66 -158c38 -56 88 -107 136 -169c34 -45 48 -92 48 -144c0 -36 -4 -66 -11 -94c7 -23 11 -48 11 -73c0 -50 -9 -93 -19 -131c3 -21 5 -46 5 -74c0 -24 -29 -149 -59 -153c-1 0 -3 1 -5 2c-5 2 -7 6 -7 11 +s2 11 4 16c15 41 22 86 22 130c0 105 -104 218 -191 264v-442c0 -73 -98 -170 -215 -170c-69 0 -110 38 -110 85c0 84 101 178 215 178c15 0 54 -2 81 -25zM483 700c-36 47 -101 116 -152 116c5 -22 13 -47 28 -69c38 -55 120 -125 168 -187c1 -2 3 -4 4 -6v14 +c0 39 -8 80 -48 132zM504 406c9 -11 18 -24 26 -39c1 11 1 21 1 32c0 39 -7 81 -48 134c-36 46 -100 109 -152 109c8 -49 33 -85 68 -121c49 -49 79 -80 105 -115z" /> +d="M0 -1064v1022c0 93 116 174 213 174c62 0 112 -33 112 -92c0 -47 -31 -93 -76 -126c28 -30 57 -77 57 -139c0 -30 -4 -56 -11 -78c9 -36 11 -71 11 -109c-1 -16 -4 -33 -7 -50c6 -41 10 -81 10 -118c0 -184 -139 -262 -193 -312c-40 -38 -71 -68 -86 -171 +c-2 -8 -7 -16 -15 -16s-15 8 -15 15zM37 -626c110 42 229 109 229 243c0 6 0 11 -1 17c-3 -6 -7 -11 -11 -16c-27 -35 -82 -73 -141 -123c-56 -47 -67 -81 -74 -107c0 -3 -1 -8 -2 -14zM112 -133c-38 0 -65 11 -83 26v-338c92 27 236 117 236 227c0 54 -16 86 -41 116 +c-34 -19 -73 -31 -112 -31zM35 -813c141 40 232 112 232 264c-7 -12 -16 -25 -26 -36c-51 -58 -140 -105 -178 -160c-14 -21 -23 -46 -28 -68z" /> +d="M527 560c1 -2 2 -4 4 -6v19c0 39 -7 81 -48 134c-36 46 -101 109 -152 109c5 -23 13 -47 28 -69c38 -55 120 -125 168 -187zM504 406c9 -11 18 -24 26 -39c0 11 1 21 1 32c0 39 -7 81 -48 134c-36 47 -101 109 -152 109c8 -49 33 -85 68 -121c49 -49 79 -80 105 -115z +M483 887c-36 48 -101 117 -153 117h-1c4 -24 13 -54 30 -79c38 -55 120 -129 168 -191c1 -2 2 -4 3 -5c1 9 1 18 1 27c0 39 -8 80 -48 131zM296 107v1134c0 7 3 13 15 13c11 0 13 -5 14 -13c3 -10 28 -103 66 -158s88 -106 136 -168c34 -45 48 -92 48 -144 +c0 -40 -5 -72 -13 -102c8 -25 12 -52 13 -79c0 -37 -5 -70 -12 -100c8 -24 12 -49 12 -74c0 -48 -9 -93 -20 -131c4 -21 6 -45 6 -74c0 -56 -26 -110 -44 -138c-4 -6 -8 -15 -15 -14c-2 0 -4 0 -5 1c-5 3 -7 6 -7 11s2 11 4 16c15 40 22 90 22 115c0 117 -90 226 -191 279 +v-442c0 -73 -98 -170 -215 -170c-69 0 -110 38 -110 85c0 84 101 178 215 178c15 0 54 -4 81 -25z" /> +d="M0 -1251v1210c0 92 116 173 213 173c62 0 112 -33 112 -92c0 -47 -31 -93 -76 -126c28 -30 57 -77 57 -139c0 -30 -4 -56 -11 -77c9 -37 11 -72 11 -110c-2 -23 -6 -48 -12 -72c10 -40 12 -77 12 -118c-1 -16 -3 -32 -7 -49c7 -40 10 -79 10 -115 +c0 -185 -139 -262 -193 -313c-40 -38 -71 -68 -86 -171c-2 -8 -7 -16 -15 -16s-15 8 -15 15zM35 -816c112 42 231 108 231 244c0 7 0 13 -1 20c-7 -11 -15 -22 -24 -33c-51 -58 -140 -105 -178 -160c-15 -22 -24 -48 -28 -71zM37 -626c111 43 229 109 229 244 +c0 5 0 10 -1 16c-3 -6 -7 -11 -11 -16c-27 -35 -82 -72 -141 -123c-56 -47 -67 -81 -74 -106c0 -4 -1 -9 -2 -15zM112 -133c-38 0 -65 11 -83 27v-339c93 28 236 117 236 228c0 53 -16 85 -41 115c-34 -19 -73 -31 -112 -31zM36 -1000c138 39 231 111 231 261 +c-7 -12 -16 -24 -26 -35c-51 -59 -140 -105 -178 -160c-14 -21 -22 -44 -27 -66z" /> +d="M296 107v1333c0 7 3 12 15 12c11 0 13 -5 14 -12c3 -9 28 -95 66 -150s88 -107 136 -169c34 -45 48 -100 48 -152c0 -39 -5 -70 -13 -100c9 -25 13 -50 13 -78c0 -40 -6 -76 -14 -109c9 -26 14 -52 14 -80c0 -40 -5 -76 -13 -108c8 -25 13 -52 13 -79 +c0 -50 -9 -93 -19 -131c3 -21 5 -45 5 -73c0 -24 -29 -149 -59 -153c-1 0 -3 1 -5 2c-5 2 -7 6 -7 11s2 11 4 16c15 41 22 86 22 130c0 105 -104 218 -191 264v-442c0 -73 -98 -170 -215 -170c-69 0 -110 38 -110 85c0 84 101 178 215 178c15 0 54 -2 81 -25zM483 1094 +c-36 47 -101 111 -153 111h-1c4 -24 13 -53 30 -78c38 -56 120 -130 168 -192c1 -1 2 -3 3 -5c1 9 1 18 1 27c0 41 -8 85 -48 137zM504 406c9 -11 18 -24 26 -39c1 10 1 21 1 32c0 38 -7 80 -48 132c-36 48 -101 110 -153 110v0c8 -54 30 -86 69 -125 +c49 -49 79 -75 105 -110zM527 559c1 -2 2 -3 3 -5c1 11 1 21 1 32c0 39 -7 80 -48 132c-36 48 -101 110 -153 110h-1v0c4 -26 12 -56 30 -82c38 -55 120 -125 168 -187zM527 746c1 -2 2 -3 3 -4c0 11 1 22 1 34c0 38 -7 80 -48 132c-36 47 -101 110 -153 110h-1v0 +c4 -25 12 -55 30 -81c38 -55 120 -129 168 -191z" /> +d="M296 107v1520c0 7 3 12 15 12c11 0 13 -5 14 -12c3 -9 28 -95 66 -150s88 -107 136 -169c34 -45 48 -100 48 -152c0 -38 -5 -70 -13 -99c9 -25 13 -51 13 -78c0 -40 -5 -76 -13 -108c8 -25 13 -52 13 -79c0 -41 -6 -77 -14 -110c9 -26 14 -52 14 -80 +c0 -40 -5 -76 -13 -108c8 -25 13 -52 13 -79c0 -50 -9 -93 -19 -131c3 -21 5 -45 5 -73c0 -24 -29 -149 -59 -153c-1 0 -3 1 -5 2c-5 2 -7 6 -7 11s2 11 4 16c15 41 22 86 22 130c0 105 -104 218 -191 264v-442c0 -73 -98 -170 -215 -170c-69 0 -110 38 -110 85 +c0 84 101 178 215 178c15 0 54 -2 81 -25zM483 1281c-36 47 -101 111 -153 111h-1c4 -24 13 -52 30 -77c38 -56 120 -130 168 -192c1 -1 2 -3 3 -5c1 9 1 18 1 27c0 40 -8 85 -48 136zM504 406c9 -11 18 -24 26 -39c1 10 1 21 1 32c0 38 -7 80 -48 133 +c-36 47 -101 109 -153 109v0c8 -54 29 -85 69 -125c49 -49 79 -75 105 -110zM527 559c1 -2 2 -3 3 -5c1 11 1 21 1 32c0 39 -7 80 -48 132c-36 48 -101 110 -153 110h-1v0c4 -26 12 -56 30 -82c38 -55 120 -125 168 -187zM527 746c1 -2 2 -3 3 -4c0 11 1 22 1 34 +c0 38 -7 80 -48 132c-36 48 -101 110 -153 110h-1v0c4 -25 12 -55 30 -81c38 -55 120 -129 168 -191zM527 935c1 -1 2 -2 3 -4c1 11 1 22 1 32c0 39 -7 81 -48 133c-36 47 -101 110 -153 110h-1c4 -25 13 -54 30 -79c38 -55 120 -130 168 -192z" /> +d="M0 -1626v1585c0 92 116 173 213 173c62 0 112 -33 112 -92c0 -47 -31 -93 -76 -126c28 -30 57 -77 57 -139c0 -30 -4 -55 -11 -77c9 -37 11 -72 11 -110c-2 -23 -6 -48 -12 -72c10 -40 12 -77 12 -118c-2 -22 -5 -46 -12 -71c10 -39 12 -76 12 -116 +c-2 -22 -5 -47 -12 -71c10 -39 12 -76 12 -116c-1 -16 -3 -33 -7 -50c7 -40 10 -80 10 -116c0 -185 -139 -262 -193 -312c-40 -38 -71 -68 -86 -172c-2 -8 -7 -16 -15 -16s-15 9 -15 16zM35 -1190c113 42 231 108 231 245c0 5 0 11 -1 17c-7 -12 -15 -23 -24 -33 +c-51 -59 -140 -105 -178 -160c-15 -22 -23 -47 -28 -69zM35 -1003c112 43 231 109 231 245c0 5 0 11 -1 17c-7 -12 -15 -23 -24 -33c-51 -59 -140 -105 -178 -160c-14 -22 -23 -46 -28 -69zM35 -816c111 42 231 109 231 244c0 7 0 14 -1 20c-7 -11 -15 -22 -24 -32 +c-51 -59 -140 -105 -178 -161c-15 -22 -24 -48 -28 -71zM37 -625c111 42 229 108 229 243c0 5 0 10 -1 16c-3 -6 -7 -11 -11 -16c-27 -35 -82 -72 -141 -123c-56 -47 -67 -81 -74 -106c0 -4 -1 -9 -2 -14zM112 -133c-38 0 -65 11 -83 27v-339c92 28 236 118 236 228 +c0 53 -16 86 -41 115c-34 -19 -73 -31 -112 -31zM36 -1375c139 39 231 111 231 262c-7 -13 -16 -25 -26 -36c-51 -59 -140 -105 -178 -160c-14 -21 -22 -45 -27 -66z" /> +d="M296 107v1702c0 7 3 13 15 13c11 0 13 -5 14 -13c3 -9 28 -95 66 -150s88 -106 136 -168c34 -45 48 -100 48 -152c0 -38 -5 -69 -12 -98c8 -24 12 -49 12 -75c0 -40 -5 -76 -13 -108c8 -25 13 -52 13 -79c0 -40 -5 -76 -13 -108c8 -26 13 -52 13 -80 +c0 -41 -6 -77 -14 -110c9 -25 14 -52 14 -80c0 -40 -5 -76 -13 -108c8 -25 13 -51 13 -79c0 -49 -9 -93 -19 -130c3 -21 5 -45 5 -74c0 -56 -26 -110 -44 -138c-4 -6 -8 -14 -15 -14c-2 0 -3 0 -5 1c-5 3 -7 7 -7 11c0 5 2 11 4 16c15 42 22 87 22 131 +c0 103 -104 218 -191 264v-442c0 -73 -98 -170 -215 -170c-69 0 -110 38 -110 85c0 84 101 178 215 178c15 0 54 -2 81 -25zM483 1463c-36 48 -101 112 -153 112v0c4 -23 13 -50 29 -74c38 -55 120 -129 168 -191c1 -2 2 -4 4 -6v20c0 41 -7 87 -48 139zM504 405 +c9 -11 18 -23 26 -39c1 11 1 21 1 32c0 39 -7 80 -48 133c-36 47 -101 109 -153 109v0c8 -53 30 -85 69 -124c49 -49 79 -76 105 -111zM527 558c1 -1 2 -3 3 -4c1 10 1 21 1 32c0 38 -7 80 -48 132c-36 47 -101 109 -153 109h-1v0c4 -25 12 -56 30 -82 +c38 -55 120 -125 168 -187zM527 745c1 -1 2 -3 3 -4c0 11 1 23 1 34c0 39 -7 80 -48 133c-36 47 -101 109 -153 109h-1v0c4 -24 12 -55 30 -81c38 -55 120 -129 168 -191zM527 935c1 -2 2 -3 3 -4c1 10 1 21 1 32c0 38 -7 80 -48 133c-36 47 -101 109 -153 109h-1 +c4 -24 13 -53 30 -79c38 -55 120 -129 168 -191zM527 1123c1 -2 2 -3 3 -4c1 10 1 21 1 31c0 39 -7 80 -48 133c-36 47 -101 109 -153 109h-1c4 -24 13 -53 30 -78c38 -55 120 -129 168 -191z" /> +d="M0 -1814v1772c0 93 116 174 213 174c62 0 112 -34 112 -92c0 -47 -31 -94 -76 -126c28 -30 57 -78 57 -140c0 -30 -4 -55 -11 -77c9 -36 11 -72 11 -109c-2 -23 -6 -48 -12 -73c9 -39 12 -76 12 -117c-2 -23 -5 -47 -12 -71c10 -39 12 -76 12 -116c-2 -23 -5 -47 -12 -72 +c10 -39 12 -76 12 -116c-2 -23 -5 -47 -12 -71c10 -40 12 -77 12 -117c-1 -16 -3 -32 -7 -49c7 -40 10 -80 10 -116c0 -185 -139 -262 -193 -312c-40 -38 -71 -68 -86 -172c-2 -8 -7 -16 -15 -16s-15 9 -15 16zM35 -1379c113 43 231 108 231 245c0 6 0 11 -1 17 +c-7 -11 -15 -22 -24 -33c-51 -58 -140 -105 -178 -160c-15 -21 -23 -46 -28 -69zM35 -1191c113 43 231 108 231 245c0 6 0 11 -1 17c-7 -11 -15 -22 -24 -33c-51 -58 -140 -105 -178 -160c-15 -22 -23 -47 -28 -69zM35 -1003c112 42 231 108 231 244c0 6 0 11 -1 17 +c-7 -11 -15 -22 -24 -33c-51 -58 -140 -105 -178 -160c-14 -21 -23 -46 -28 -68zM35 -816c112 42 231 108 231 244c0 6 0 13 -1 20c-7 -12 -15 -23 -24 -33c-51 -58 -140 -105 -178 -160c-15 -22 -24 -48 -28 -71zM37 -626c110 42 229 109 229 243c0 5 0 11 -1 16 +c-3 -5 -7 -11 -11 -16c-27 -35 -82 -72 -141 -122c-56 -47 -67 -81 -74 -107c0 -3 -1 -8 -2 -14zM112 -133c-38 0 -65 10 -83 26v-338c92 27 236 117 236 227c0 54 -16 86 -41 116c-34 -20 -73 -31 -112 -31zM36 -1563c138 39 231 111 231 261c-7 -12 -16 -24 -26 -35 +c-51 -59 -140 -105 -178 -161c-14 -20 -22 -44 -27 -65z" /> +d="M296 107v1885c0 7 3 12 15 12c11 0 13 -5 14 -12c3 -9 28 -95 66 -150s88 -107 136 -169c34 -44 48 -100 48 -152c0 -37 -5 -68 -12 -97c8 -24 12 -49 12 -75c0 -39 -5 -74 -13 -106c9 -24 13 -50 13 -77c0 -40 -5 -76 -13 -108c8 -25 13 -51 13 -79 +c0 -40 -5 -76 -13 -108c8 -26 13 -52 13 -80c0 -40 -6 -77 -14 -109c9 -26 14 -53 14 -81c0 -39 -5 -75 -13 -107c8 -26 13 -52 13 -79c0 -50 -9 -93 -19 -131c3 -21 5 -45 5 -73c0 -24 -29 -149 -59 -153c-1 0 -3 1 -5 2c-5 2 -7 6 -7 11s2 11 4 16c15 41 22 86 22 130 +c0 105 -103 218 -191 264v-442c0 -73 -98 -170 -215 -170c-69 0 -110 38 -110 85c0 84 101 178 215 178c19 0 56 -3 81 -25zM483 1646c-36 47 -101 112 -153 112v0c4 -23 13 -50 29 -74c38 -55 120 -129 168 -191c1 -2 2 -4 4 -6v20c0 41 -7 87 -48 139zM504 406 +c9 -11 18 -24 26 -39c1 10 1 21 1 32c0 38 -7 80 -48 132c-36 47 -101 110 -153 110v0c8 -54 30 -86 69 -125c49 -49 79 -75 105 -110zM527 558c1 -1 2 -2 3 -4c1 11 1 21 1 32c0 38 -7 80 -48 132c-36 47 -101 109 -153 109h-1v0c4 -25 12 -56 30 -81 +c38 -56 120 -126 168 -188zM527 745c1 -1 2 -2 3 -4c0 12 1 23 1 35c0 38 -7 80 -48 132c-36 47 -101 109 -153 109h-1v0c4 -24 12 -54 30 -81c38 -55 120 -129 168 -191zM527 935c1 -1 2 -3 3 -4c1 11 1 21 1 32c0 39 -7 80 -48 133c-36 47 -101 109 -153 109h-1 +c4 -24 13 -53 30 -79c38 -55 120 -129 168 -191zM527 1123c1 -1 2 -3 3 -4c1 10 1 21 1 32c0 38 -8 79 -48 132c-36 47 -101 109 -153 109h-1c4 -24 13 -53 30 -78c38 -55 120 -129 168 -191zM527 1310c1 -2 2 -3 3 -5c1 10 1 21 1 31c0 38 -8 78 -48 129 +c-36 48 -101 110 -153 110v0c4 -23 13 -50 29 -74c38 -55 120 -129 168 -191z" /> +d="M0 -1990v1948c0 93 116 174 213 174c62 0 112 -34 112 -92c0 -47 -31 -94 -76 -126c28 -30 57 -78 57 -140c0 -30 -4 -55 -11 -77c9 -36 11 -72 11 -109c-2 -23 -6 -48 -12 -73c9 -39 12 -76 12 -117c-2 -23 -5 -47 -12 -71c10 -39 12 -76 12 -116c-2 -23 -5 -47 -12 -72 +c10 -39 12 -76 12 -116c-2 -23 -5 -47 -12 -71c10 -40 12 -77 12 -117c-2 -23 -5 -47 -12 -71c10 -40 12 -77 12 -117c-1 -16 -4 -33 -7 -51c6 -40 10 -81 10 -118c0 -184 -139 -262 -193 -312c-40 -38 -68 -83 -86 -155c-2 -8 -7 -16 -15 -16s-15 8 -15 15zM35 -1567 +c113 43 231 108 231 245c0 6 0 12 -1 18c-7 -12 -15 -23 -24 -33c-51 -59 -140 -105 -178 -161c-15 -21 -23 -46 -28 -69zM35 -1379c113 43 231 108 231 245c0 6 0 11 -1 17c-7 -11 -15 -22 -24 -33c-51 -58 -140 -105 -178 -160c-15 -21 -23 -46 -28 -69zM35 -1191 +c113 43 231 108 231 245c0 6 0 11 -1 17c-7 -11 -15 -22 -24 -33c-51 -58 -140 -105 -178 -160c-15 -22 -23 -47 -28 -69zM35 -1003c112 42 231 108 231 244c0 6 0 11 -1 17c-7 -11 -15 -22 -24 -33c-51 -58 -140 -105 -178 -160c-14 -21 -23 -46 -28 -68zM35 -816 +c112 42 231 108 231 244c0 6 0 13 -1 20c-7 -12 -15 -23 -24 -33c-51 -58 -140 -105 -178 -160c-15 -22 -24 -48 -28 -71zM37 -626c110 42 229 109 229 243c0 5 0 11 -1 16c-3 -5 -7 -11 -11 -16c-27 -35 -82 -72 -141 -122c-56 -47 -67 -81 -74 -107c0 -3 -1 -8 -2 -14z +M112 -133c-38 0 -65 10 -83 26v-338c92 27 236 117 236 227c0 54 -16 86 -41 116c-34 -20 -73 -31 -112 -31zM35 -1755c143 40 232 112 232 266c-7 -13 -16 -25 -26 -36c-51 -59 -140 -105 -178 -160c-15 -22 -23 -47 -28 -70z" /> +d="M179 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0zM11 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0z" /> +d="M350 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0zM179 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0zM11 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55 +c-16 -15 -40 -15 -56 0z" /> +d="M518 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0zM350 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0zM179 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55 +c-16 -15 -40 -15 -56 0zM11 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0z" /> +d="M350 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0zM179 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0zM11 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55 +c-16 -15 -40 -15 -56 0zM350 179c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0zM179 179c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0zM11 179c-15 16 -15 40 0 55c16 16 40 16 56 0 +c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0z" /> +d="M0 0c-71 0 -137 11 -187 30c-56 21 -86 51 -86 84s30 63 86 84c50 20 116 30 187 30s137 -10 187 -30c56 -21 86 -51 86 -84s-30 -63 -86 -84c-50 -19 -116 -30 -187 -30zM0 195c-67 0 -129 -10 -176 -27c-40 -16 -64 -36 -64 -54s24 -38 64 -54c47 -17 109 -27 176 -27 +s129 10 176 27c40 16 64 36 64 54s-24 38 -64 54c-47 17 -109 27 -176 27z" /> +d="M0 0c-37 0 -75 11 -105 33c-8 6 -16 13 -23 21l38 34c5 -5 10 -9 15 -13c17 -12 39 -20 61 -23c5 0 9 -1 14 -1c17 0 32 4 45 10c20 10 29 26 29 48c0 19 -6 31 -21 42s-39 19 -62 27c-25 8 -51 17 -71 31c-27 19 -40 44 -40 76c0 22 6 42 18 59c12 16 26 27 45 35 +c16 7 34 10 52 10c40 0 81 -16 111 -46l-37 -37c-22 22 -50 31 -74 31c-12 0 -23 -2 -32 -5c-14 -6 -32 -19 -32 -47s24 -40 76 -58c27 -9 54 -18 77 -34c28 -21 42 -49 42 -84c0 -21 -5 -41 -16 -57c-11 -17 -24 -28 -42 -37c-20 -10 -44 -15 -68 -15z" /> +d="M0 -227v226c0 7 6 13 13 13c6 0 11 -4 12 -8c0 0 9 -36 10 -39c2 -4 19 -61 56 -118c27 -42 122 -165 119 -165c0 0 74 -95 79 -224v-12c1 -63 -15 -169 -62 -252c-4 -7 -9 -11 -16 -11c-1 0 -3 0 -5 1c-4 2 -5 5 -5 9c-1 4 1 9 3 15c26 72 45 146 45 218 +c0 83 -29 126 -47 157c-65 111 -151 165 -194 179c-7 3 -8 8 -8 11z" /> +d="M209 -473c8 -11 17 -24 25 -40c1 10 2 20 2 30c0 38 -9 78 -48 129c-36 47 -101 116 -152 116c1 -8 2 -15 3 -20c7 -26 25 -60 64 -99c49 -49 79 -81 106 -116zM0 -381v381c0 7 3 12 15 12c11 0 12 -5 14 -12c0 0 28 -103 66 -158s89 -107 136 -169 +c34 -45 48 -92 48 -144c0 -49 -9 -86 -19 -123c3 -21 5 -45 5 -74c0 -56 -26 -110 -44 -138c-4 -6 -8 -14 -15 -14c-2 0 -3 0 -5 1c-5 3 -7 7 -7 11c0 5 3 11 4 16c15 40 22 91 22 115c1 6 1 11 1 17c0 34 -8 70 -42 121c-60 89 -138 139 -164 148c-7 3 -15 7 -15 10z" /> +d="M37 240c48 13 122 34 183 109c26 34 45 82 47 159c-27 -48 -96 -104 -154 -149c-59 -45 -67 -82 -74 -107c0 -3 -1 -7 -2 -12zM0 -10v398c0 2 8 24 15 27c45 10 142 52 212 133c16 18 27 37 32 57v0l1 3c4 12 5 25 5 38c0 67 -26 101 -61 138c-4 4 -10 8 -10 11 +c0 2 1 3 5 5s8 3 12 3c6 0 12 -2 16 -5c33 -26 79 -81 79 -160c0 -26 -2 -44 -6 -57c6 -37 9 -74 9 -107c0 -185 -140 -262 -193 -313c-40 -38 -71 -68 -86 -171c-2 -8 -7 -16 -15 -16s-15 8 -15 16z" /> +d="M209 -474c8 -11 17 -23 25 -39c1 12 2 24 2 36c0 38 -9 78 -48 130c-36 47 -101 109 -153 109c2 -8 3 -16 4 -21c7 -26 25 -60 64 -99c49 -50 79 -81 106 -116zM188 -180c-36 47 -102 116 -153 116c5 -22 13 -47 28 -69c38 -55 121 -125 168 -187c1 -2 3 -4 4 -6 +c0 5 1 10 1 16c0 38 -9 79 -48 130zM0 -382v556c0 7 3 12 15 12c11 0 12 -5 14 -12c0 0 28 -103 66 -158s89 -107 136 -169c34 -45 48 -92 48 -144v-9c0 -32 -5 -59 -11 -85c7 -23 11 -48 11 -73c0 -50 -9 -93 -19 -131c3 -21 5 -45 5 -74c0 -56 -26 -110 -44 -138 +c-4 -6 -8 -14 -15 -14c-2 0 -3 0 -5 1c-5 3 -7 7 -7 11c0 5 3 11 4 16c15 40 22 91 22 115c1 6 1 11 1 17c0 34 -8 70 -42 121c-60 89 -138 139 -164 148c-7 3 -15 7 -15 10z" /> +d="M35 51c50 14 128 39 190 115c26 33 42 75 42 149c-7 -13 -16 -25 -26 -36c-52 -59 -140 -105 -178 -160c-14 -21 -23 -46 -28 -68zM113 359c-57 -47 -67 -81 -74 -107c0 -3 -1 -8 -2 -14c87 33 142 65 181 113c31 39 48 80 48 130c0 5 0 11 -1 16c-3 -5 -7 -11 -11 -16 +c-27 -35 -82 -72 -141 -122zM0 -200v588c0 2 8 24 15 27c45 10 142 52 212 133c26 30 38 61 38 98c0 67 -26 101 -61 138c-4 5 -10 8 -10 11c0 2 1 3 5 5s9 3 13 3c6 0 11 -2 15 -5c33 -26 79 -81 79 -160c0 -30 -4 -55 -11 -77c6 -25 11 -54 11 -84v-8v-17 +c-1 -17 -4 -34 -7 -51c6 -40 10 -80 10 -117c0 -185 -140 -262 -193 -312c-40 -38 -71 -68 -86 -172c-2 -8 -7 -16 -15 -16s-15 9 -15 16z" /> +d="M231 -320c1 -2 3 -4 4 -6c0 7 1 15 1 22c0 38 -9 79 -48 130c-36 47 -101 110 -153 110c5 -23 13 -48 28 -69c38 -55 121 -125 168 -187zM209 -474c8 -11 17 -24 25 -39c1 12 2 23 2 35c0 38 -9 79 -48 130c-36 47 -101 110 -153 110c2 -9 3 -16 4 -22 +c7 -25 25 -60 64 -99c49 -49 79 -80 106 -115zM188 7c-37 47 -102 116 -153 116h-2c4 -24 13 -53 30 -78c38 -56 121 -130 168 -192c1 -1 2 -3 3 -4c1 9 2 19 2 29c0 38 -9 78 -48 129zM0 -383v744c0 7 3 12 15 12c11 0 12 -5 14 -12c0 0 28 -103 66 -158s89 -107 136 -169 +c34 -45 48 -92 48 -144v-8c0 -36 -6 -65 -13 -93c9 -26 13 -52 13 -79v-10c0 -33 -5 -63 -11 -91c7 -23 11 -48 11 -73c0 -50 -9 -94 -19 -131c3 -21 5 -46 5 -74c0 -56 -26 -110 -44 -139c-4 -6 -8 -13 -15 -14c-1 0 -3 1 -5 2c-5 2 -7 6 -7 11s3 11 4 16 +c15 40 22 90 22 115c1 6 1 11 1 17c-1 34 -8 70 -42 121c-60 89 -138 138 -164 148c-7 2 -15 7 -15 9z" /> +d="M36 -136c50 14 127 39 189 115c26 32 42 74 42 146c-7 -12 -16 -24 -26 -36c-52 -58 -140 -105 -178 -160c-14 -20 -22 -44 -27 -65zM113 359c-57 -47 -67 -81 -74 -107c0 -3 -1 -8 -2 -14c87 33 142 66 181 113c31 39 48 80 48 130c0 6 0 11 -1 17c-3 -6 -7 -11 -11 -17 +c-27 -34 -82 -72 -141 -122zM218 161c31 39 48 81 48 131c0 6 0 13 -1 20c-7 -12 -15 -23 -24 -33c-52 -58 -140 -105 -178 -160c-15 -22 -24 -48 -28 -71c89 33 144 65 183 113zM0 -387v775c0 3 8 24 15 27c45 10 142 52 212 133c26 30 38 61 38 98c0 67 -26 101 -61 138 +c-4 5 -10 8 -10 11c0 2 1 4 5 5c4 3 9 4 13 4c6 -1 11 -3 15 -6c33 -26 79 -81 79 -160c0 -30 -4 -55 -11 -77c6 -25 11 -54 11 -83v-9v-17c-2 -23 -6 -48 -12 -73c6 -27 12 -57 12 -89v-8v-20c-1 -16 -3 -32 -7 -49c6 -40 10 -80 10 -116c0 -184 -140 -262 -193 -312 +c-40 -38 -71 -68 -86 -172c-2 -7 -7 -16 -15 -16s-15 9 -15 16z" /> +d="M0 -382v943c0 7 3 12 15 12c11 0 12 -5 14 -12c3 -10 28 -95 66 -150s89 -107 136 -169c34 -45 48 -100 48 -152c0 -34 -4 -66 -13 -100c9 -24 13 -50 13 -77c0 -38 -4 -73 -14 -110c10 -26 14 -52 14 -80c0 -37 -4 -72 -13 -108c9 -25 13 -52 13 -79 +c0 -50 -9 -93 -19 -131c3 -21 5 -45 5 -73c0 -56 -26 -110 -44 -139c-4 -5 -8 -14 -15 -14c-2 1 -3 1 -5 2c-5 2 -7 6 -7 11s3 11 4 16c15 40 22 90 22 115c1 6 1 11 1 17c0 34 -8 70 -42 121c-60 89 -138 139 -164 148c-7 2 -15 7 -15 9zM188 215c-37 47 -102 111 -153 111 +h-2c4 -24 13 -53 30 -78c38 -56 121 -130 168 -192c1 -1 2 -3 4 -5c0 9 1 17 1 26c0 41 -8 86 -48 138zM209 -473c8 -11 17 -24 25 -39c1 11 2 22 2 34c0 38 -9 79 -48 131c-37 47 -102 109 -153 109h-1c2 -11 4 -22 5 -28c7 -26 25 -57 64 -97c49 -49 79 -75 106 -110z +M231 -320c1 -2 2 -3 3 -5c1 11 2 23 2 34c0 38 -9 79 -48 130c-37 48 -102 110 -153 110h-2v0c4 -26 13 -56 30 -82c38 -55 121 -125 168 -187zM231 -133c1 -2 2 -3 3 -4c1 11 2 23 2 35c0 38 -9 80 -48 131c-37 47 -102 110 -153 110h-2v0c4 -25 12 -55 30 -81 +c38 -55 121 -129 168 -191z" /> +d="M0 -575v963c0 2 8 24 15 27c45 10 142 52 212 133c26 30 38 61 38 98c0 67 -26 101 -61 138c-4 4 -10 8 -10 11c0 2 1 3 5 5s8 3 12 3c6 0 12 -2 16 -5c33 -26 79 -81 79 -160c0 -30 -4 -55 -11 -77c6 -25 11 -54 11 -84v-8v-18c-2 -23 -6 -47 -12 -72 +c6 -27 12 -57 12 -89v-8v-20c-2 -23 -5 -47 -12 -71c6 -27 12 -57 12 -89v-7v-20c-1 -16 -3 -33 -7 -50c6 -40 10 -80 10 -116c0 -185 -140 -262 -193 -312c-40 -38 -71 -68 -86 -172c-2 -8 -7 -16 -15 -16s-15 9 -15 16zM218 -26c31 39 48 81 48 131c0 6 0 11 -1 17 +c-7 -11 -15 -23 -24 -33c-52 -58 -140 -105 -178 -160c-14 -21 -23 -46 -28 -68c89 33 144 65 183 113zM218 161c31 39 48 80 48 131c0 6 0 13 -1 20c-7 -12 -15 -23 -24 -33c-52 -59 -140 -105 -178 -160c-15 -23 -24 -49 -28 -71c89 33 144 65 183 113zM113 359 +c-57 -47 -67 -82 -74 -107c0 -4 -1 -9 -2 -14c87 33 142 65 181 113c31 38 47 80 48 130c0 5 0 11 -1 16c-3 -5 -7 -11 -11 -16c-27 -35 -82 -72 -141 -122zM36 -324c49 14 127 39 189 115c26 32 40 74 42 147c-7 -13 -16 -25 -26 -36c-52 -58 -140 -105 -178 -160 +c-14 -21 -22 -44 -27 -66z" /> +d="M0 -381v1129c0 7 3 12 15 12c11 0 12 -5 14 -12c3 -10 28 -95 66 -150s89 -107 136 -169c34 -45 48 -100 48 -152c0 -34 -4 -66 -13 -99c9 -25 13 -50 13 -77c0 -37 -4 -73 -13 -109c9 -25 13 -52 13 -79c0 -38 -4 -73 -14 -110c10 -25 14 -52 14 -80 +c0 -37 -4 -72 -13 -108c9 -25 13 -51 13 -79c0 -49 -9 -93 -19 -131c3 -20 5 -45 5 -73c0 -56 -26 -110 -44 -138c-4 -6 -8 -14 -15 -14s-12 5 -12 12c0 5 3 11 4 16c15 40 22 90 22 115c1 6 1 11 1 17c0 34 -8 70 -42 121c-60 89 -138 139 -164 148c-7 3 -15 7 -15 10z +M188 402c-37 47 -102 111 -153 111h-2c4 -24 13 -52 30 -77c38 -56 121 -130 168 -192c1 -1 2 -3 4 -5c0 9 1 17 1 26c0 40 -8 85 -48 137zM209 -473c8 -11 17 -24 25 -39c1 11 2 22 2 34c0 38 -9 79 -48 131c-37 47 -102 109 -153 109h-1c2 -11 4 -22 5 -28 +c7 -26 25 -57 64 -96c49 -50 79 -76 106 -111zM231 -320c1 -2 2 -3 3 -4c1 11 2 22 2 33c0 38 -9 79 -48 131c-37 47 -102 109 -153 109h-2v0c4 -25 13 -56 30 -82c38 -55 121 -125 168 -187zM231 -133c1 -2 2 -3 3 -4c1 12 2 23 2 35c0 39 -9 80 -48 131 +c-37 48 -102 110 -153 110h-2v0c4 -25 12 -55 30 -81c38 -55 121 -129 168 -191zM231 57c1 -2 2 -3 3 -5c1 12 2 23 2 34c0 38 -9 79 -48 131c-37 47 -102 110 -153 110h-2c4 -25 13 -54 30 -79c38 -55 121 -129 168 -191z" /> +d="M0 -763v1151c0 2 8 24 15 26c45 11 142 52 212 133c26 31 38 62 38 99c0 67 -26 101 -61 137c-4 5 -10 9 -10 12c0 1 1 3 5 5s8 3 12 3c6 0 12 -2 16 -5c33 -26 79 -81 79 -160c0 -30 -4 -55 -11 -77c6 -26 11 -54 11 -84v-8v-18c-2 -23 -6 -48 -12 -72 +c6 -27 12 -57 12 -89v-8v-20c-2 -23 -5 -47 -12 -72c6 -26 12 -56 12 -88v-7v-21c-2 -22 -5 -47 -12 -71c6 -27 12 -57 12 -89v-7v-20c-1 -16 -3 -33 -7 -50c6 -40 10 -80 10 -116c0 -185 -140 -262 -193 -312c-40 -38 -71 -68 -86 -172c-2 -8 -7 -16 -15 -16s-15 9 -15 16z +M218 -214c31 39 48 81 48 132c0 5 0 11 -1 17c-7 -12 -15 -23 -24 -33c-52 -59 -140 -105 -178 -160c-15 -22 -23 -47 -28 -69c89 33 144 65 183 113zM218 -26c31 39 48 80 48 131c0 5 0 11 -1 17c-7 -12 -15 -23 -24 -33c-52 -59 -140 -105 -178 -160 +c-14 -22 -23 -46 -28 -68c89 33 144 65 183 113zM218 161c31 39 48 80 48 130c0 7 0 14 -1 20c-7 -11 -15 -22 -24 -32c-52 -59 -140 -105 -178 -160c-15 -23 -24 -49 -28 -72c89 34 144 66 183 114zM113 359c-57 -48 -67 -82 -74 -107c0 -4 -1 -9 -2 -14 +c87 33 142 65 181 112c31 39 47 81 48 131c0 5 0 11 -1 16c-3 -6 -7 -11 -11 -16c-27 -35 -82 -72 -141 -122zM36 -512c49 14 127 39 189 115c26 32 40 74 42 147c-7 -13 -16 -25 -26 -36c-52 -58 -140 -105 -178 -160c-14 -21 -22 -44 -27 -66z" /> +d="M0 -381v1312c0 7 3 12 15 12c11 0 12 -5 14 -12c0 0 28 -95 66 -150s89 -107 136 -169c34 -45 48 -100 48 -152v-8c0 -34 -5 -62 -12 -89c8 -24 12 -49 12 -75v-9c0 -36 -6 -69 -13 -99c9 -25 13 -52 13 -79v-9c0 -37 -6 -70 -13 -100c9 -25 13 -51 13 -79v-9 +c0 -37 -6 -70 -14 -101c10 -25 14 -52 14 -80v-9c0 -36 -6 -69 -13 -99c9 -25 13 -51 13 -79c0 -49 -9 -93 -19 -130c3 -21 5 -45 5 -74c0 -56 -26 -110 -44 -138c-4 -6 -8 -14 -15 -14c-2 0 -3 0 -5 1c-5 3 -7 7 -7 11c0 5 3 11 4 16c15 40 22 91 22 115c1 6 1 11 1 17 +c0 34 -8 70 -42 121c-60 89 -138 139 -164 148c-7 3 -15 7 -15 10zM188 585c-37 47 -102 111 -153 111h-1c4 -23 13 -50 29 -73c38 -56 121 -130 168 -192c1 -1 3 -3 4 -5c0 8 1 15 1 23c0 40 -9 85 -48 136zM209 -473c8 -11 17 -23 25 -39c1 11 2 22 2 34 +c0 38 -9 79 -48 131c-37 47 -102 109 -153 109h-1c2 -11 4 -22 5 -28c7 -26 25 -57 64 -96c49 -49 79 -76 106 -111zM231 -320c1 -1 2 -3 3 -4c1 11 2 22 2 33c0 38 -9 79 -48 131c-37 47 -102 109 -153 109h-2v0c4 -25 13 -56 30 -82c38 -55 121 -125 168 -187zM231 -133 +c1 -1 2 -3 3 -4c1 12 2 23 2 36c0 38 -9 79 -48 131c-37 47 -102 109 -153 109h-2v0c4 -25 12 -55 30 -81c38 -55 121 -129 168 -191zM231 57c1 -2 2 -3 3 -4c1 11 2 22 2 33c0 38 -9 80 -48 131c-37 48 -102 110 -153 110h-2c4 -24 13 -54 30 -79c38 -55 121 -129 168 -191 +zM231 245c1 -2 2 -3 3 -5c1 11 2 23 2 34c0 38 -9 79 -48 130c-37 47 -102 110 -153 110h-2c4 -24 13 -53 30 -78c38 -55 121 -129 168 -191z" /> +d="M0 -950v1338c0 3 8 24 15 27c45 10 142 52 212 133c26 30 38 61 38 98c0 67 -26 101 -61 138c-4 5 -10 8 -10 11c0 2 1 4 5 5c4 3 9 4 13 4c6 -1 11 -3 15 -6c33 -26 79 -81 79 -160c0 -29 -4 -55 -11 -77c6 -25 11 -54 11 -83v-9v-17c-2 -23 -6 -48 -12 -73 +c6 -27 12 -57 12 -89v-8v-20c-2 -23 -5 -47 -12 -71c6 -27 12 -57 12 -88v-8v-20c-2 -23 -5 -47 -12 -72c6 -26 12 -56 12 -88v-8v-20c-2 -23 -5 -47 -12 -71c6 -27 12 -57 12 -89v-8v-20c-1 -16 -3 -32 -7 -49c6 -40 10 -80 10 -116c0 -185 -140 -262 -193 -312 +c-40 -38 -71 -68 -86 -172c-2 -8 -7 -16 -15 -16s-15 9 -15 16zM218 -401c31 39 48 80 48 131c0 6 0 12 -1 17c-7 -11 -15 -22 -24 -33c-52 -58 -140 -104 -178 -160c-15 -21 -23 -46 -28 -69c89 34 144 66 183 114zM218 -214c31 39 48 81 48 132c0 6 0 11 -1 17 +c-7 -11 -15 -22 -24 -33c-52 -58 -140 -105 -178 -160c-15 -21 -23 -47 -28 -69c89 34 144 66 183 113zM218 -26c31 39 48 81 48 131c0 6 0 12 -1 17c-7 -11 -15 -22 -24 -33c-52 -58 -140 -105 -178 -160c-14 -21 -23 -46 -28 -68c89 33 144 66 183 113zM218 161 +c31 39 48 81 48 131c0 6 0 13 -1 20c-7 -12 -15 -23 -24 -33c-52 -58 -140 -105 -178 -160c-15 -22 -24 -48 -28 -71c89 33 144 65 183 113zM113 359c-57 -47 -67 -81 -74 -107c0 -3 -1 -8 -2 -14c87 33 142 66 181 113c31 39 48 80 48 130c0 6 0 11 -1 17 +c-3 -6 -7 -11 -11 -16c-27 -35 -82 -73 -141 -123zM36 -699c49 14 127 39 189 115c26 32 42 74 42 147c-7 -13 -16 -25 -26 -36c-52 -59 -140 -105 -178 -160c-14 -21 -22 -45 -27 -66z" /> +d="M0 -381v1495c0 7 3 12 15 12c11 0 12 -5 14 -12c0 0 28 -95 66 -150s89 -107 136 -169c34 -45 48 -100 48 -152v-8c0 -34 -5 -62 -12 -89c8 -24 12 -49 12 -75v-9c0 -35 -5 -68 -13 -97c9 -25 13 -50 13 -77v-9c0 -36 -6 -69 -13 -99c9 -25 13 -52 13 -79v-9 +c0 -36 -6 -70 -13 -99c9 -26 13 -52 13 -80v-9c0 -37 -6 -70 -14 -100c10 -26 14 -53 14 -81v-9c0 -36 -6 -69 -13 -99c9 -25 13 -51 13 -79c0 -49 -9 -93 -19 -130c3 -21 5 -45 5 -73c0 -57 -26 -111 -44 -139c-4 -6 -8 -14 -15 -14c-2 0 -3 0 -5 1c-5 3 -7 7 -7 11 +c0 5 3 11 4 16c15 41 23 88 23 132c0 34 -8 70 -42 122c-60 88 -138 138 -164 147c-7 3 -15 7 -15 10zM188 768c-37 47 -102 111 -153 111l-1 1c4 -23 13 -51 29 -74c38 -56 121 -130 168 -192c1 -1 3 -3 4 -5c0 8 1 15 1 23c0 40 -9 85 -48 136zM209 -473 +c8 -11 17 -23 25 -39c1 11 2 23 2 34c0 38 -9 79 -48 131c-37 47 -102 109 -153 109h-1c2 -11 4 -22 5 -28c7 -25 25 -57 64 -96c49 -49 79 -76 106 -111zM231 -320c1 -1 2 -3 3 -4c1 11 2 22 2 33c0 38 -9 79 -48 131c-37 47 -102 109 -153 109h-2v0c4 -25 13 -56 30 -82 +c38 -55 121 -125 168 -187zM231 -133c1 -1 2 -3 3 -4c1 12 2 24 2 36c0 38 -9 79 -48 131c-37 47 -102 109 -153 109h-2v0c4 -24 12 -55 30 -81c38 -55 121 -129 168 -191zM231 57c1 -2 2 -3 3 -4c1 11 2 22 2 33c0 39 -9 80 -48 132c-37 47 -102 109 -153 109h-2 +c4 -24 13 -54 30 -79c38 -55 121 -129 168 -191zM231 245c1 -2 2 -3 3 -5c1 12 2 23 2 34c0 38 -9 79 -48 130c-37 48 -102 110 -153 110h-2c4 -24 13 -53 30 -78c38 -55 121 -129 168 -191zM231 432c1 -2 2 -4 3 -5c1 10 2 21 2 31c0 38 -9 78 -48 129 +c-37 47 -102 110 -153 110h-1c4 -24 13 -51 29 -74c38 -55 121 -129 168 -191z" /> +d="M0 -1126v1514c0 2 8 24 15 26c45 11 142 52 212 133c26 31 38 62 38 99c0 67 -26 101 -61 138c-4 4 -10 8 -10 11c0 2 1 3 5 5s8 3 12 3c6 0 12 -2 16 -5c33 -26 79 -81 79 -160c0 -30 -4 -55 -11 -77c6 -26 11 -54 11 -84v-8v-18c-2 -23 -6 -47 -12 -72 +c6 -27 12 -57 12 -89v-8v-20c-2 -23 -5 -47 -12 -72c6 -26 12 -56 12 -88v-7v-20c-2 -23 -5 -48 -12 -72c6 -27 12 -57 12 -89v-7v-20c-2 -23 -5 -48 -12 -72c6 -26 12 -57 12 -88v-8v-20c-2 -23 -5 -47 -12 -72c6 -26 12 -56 12 -88v-8v-20c-1 -16 -4 -34 -7 -51 +c6 -40 10 -81 10 -118c0 -185 -140 -262 -193 -312c-40 -38 -68 -83 -86 -156c-2 -7 -7 -16 -15 -16s-15 9 -15 16zM218 -590c31 39 48 81 48 132c0 6 0 11 -1 17c-7 -11 -15 -22 -24 -33c-52 -58 -140 -105 -178 -160c-15 -22 -23 -47 -28 -69c89 33 144 66 183 113z +M218 -402c31 39 48 81 48 132c0 5 0 11 -1 17c-7 -11 -15 -23 -24 -33c-52 -58 -140 -105 -178 -160c-15 -22 -23 -47 -28 -69c89 33 144 65 183 113zM218 -214c31 39 48 81 48 132c0 5 0 11 -1 17c-7 -12 -15 -23 -24 -33c-52 -59 -140 -105 -178 -160 +c-15 -22 -23 -47 -28 -69c89 33 144 65 183 113zM218 -26c31 39 48 80 48 131c0 5 0 11 -1 17c-7 -12 -15 -23 -24 -33c-52 -59 -140 -105 -178 -160c-14 -22 -23 -46 -28 -68c89 33 144 65 183 113zM218 161c31 39 48 80 48 130c0 7 0 14 -1 21c-7 -12 -15 -23 -24 -33 +c-52 -59 -140 -105 -178 -160c-15 -23 -24 -49 -28 -72c89 34 144 66 183 114zM113 359c-57 -48 -67 -82 -74 -107c0 -4 -1 -9 -2 -14c87 33 142 65 181 113c31 38 47 80 48 130c0 5 0 11 -1 16c-3 -5 -7 -11 -11 -16c-27 -35 -82 -72 -141 -122zM35 -891 +c50 14 128 39 190 115c26 33 42 75 42 150c-7 -12 -16 -24 -26 -36c-52 -58 -140 -105 -178 -160c-15 -22 -23 -47 -28 -69z" /> @@ -706,124 +737,129 @@ c-40 44 -99 91 -144 95z" /> d="M0 12v254l39 1c45 4 104 51 144 95c46 51 57 97 57 132c0 17 -3 32 -5 44l-8 38c-1 4 -3 10 -3 16c0 8 3 16 13 18c3 1 7 1 9 1c11 0 15 -7 21 -23c8 -26 17 -62 17 -103c0 -58 -17 -118 -52 -163c-48 -62 -111 -93 -149 -148s-53 -162 -53 -162c-1 -7 -3 -12 -15 -12 s-15 5 -15 12z" /> +d="M201 79c1 -8 2 -16 2 -25c0 -41 -15 -90 -53 -133c-54 -61 -119 -93 -123 -95c-2 -1 -6 -2 -8 -2c-8 0 -14 6 -14 14l-5 601c0 8 6 14 14 14h12c8 0 14 -6 14 -14l-4 -321c5 6 34 37 84 37c51 0 75 -37 81 -76zM132 40v11c0 21 -3 55 -39 55c-40 0 -55 -29 -57 -38 +l-3 -195c19 15 53 42 70 68c25 38 29 84 29 99z" /> +d="M166 183c3 -2 5 -7 5 -11v-495h-27v175l-126 -35h-4c-8 0 -14 5 -14 13v495h28v-175l126 35c1 0 3 1 4 1c3 0 6 -1 8 -3zM28 -97l116 32v165l-116 -33v-164z" /> +d="M233 105l-38 -7v-165l33 7h2c8 0 14 -6 14 -14v-59c0 -6 -5 -13 -11 -14l-38 -7v-147h-28v141l-89 -18v-155h-28v149l-33 -7h-3c-8 0 -14 6 -14 14v58c0 6 5 13 11 14l39 8v165l-33 -7h-3c-8 0 -14 6 -14 14v-2v58v2c0 6 5 13 11 14l39 8v147h28v-141l89 18v155h28v-149 +l33 7h2c8 0 14 -6 14 -14v-59c0 -6 -5 -13 -11 -14zM78 74v-166l89 19v165z" /> +d="M250 51h-42l-50 -50v-2l50 -50h42h1h10c8 0 14 -5 14 -13v-59c0 -8 -6 -14 -14 -14h-59c-8 0 -14 6 -14 14v10v1v42l-49 48h-3l-50 -48v-53c0 -8 -5 -14 -13 -14h-59c-8 0 -14 6 -14 14v59c0 8 6 13 14 13h10h1h42l49 50v3l-49 49h-42h-1h-10c-8 0 -14 6 -14 14v59 +c0 8 6 14 14 14h59c8 0 13 -6 13 -14v-53l50 -50h3l49 50v41v12c0 8 6 14 14 14h59c8 0 14 -6 14 -14v-59c0 -8 -6 -14 -14 -14h-11z" /> +d="M369 80c1 -8 2 -16 2 -25c0 -41 -15 -90 -53 -133c-54 -61 -119 -93 -123 -95c-2 -1 -6 -3 -8 -3c-8 0 -14 6 -14 14l-1 114c-6 -9 -15 -23 -22 -31c-54 -61 -119 -92 -123 -94c-2 -1 -6 -3 -8 -3c-8 0 -14 6 -14 14l-5 601c0 8 6 14 14 14h12c8 0 14 -6 14 -14l-4 -321 +c5 6 34 37 84 37c22 0 38 -7 51 -17l-3 301c0 8 6 14 14 14h12c8 0 14 -6 14 -14l-4 -320c5 6 34 36 84 36c51 0 75 -36 81 -75zM132 40v11c0 21 -3 55 -39 55c-40 0 -55 -29 -57 -38l-3 -195c19 15 53 42 70 68c25 38 29 84 29 99zM300 40v11c0 21 -3 55 -39 55 +c-40 0 -55 -29 -57 -38l-3 -195c19 15 53 42 70 68c25 38 29 84 29 99z" /> +d="M561 51h-42l-50 -50v-2l50 -50h42h1h10c8 0 14 -5 14 -13v-59c0 -8 -6 -14 -14 -14h-59c-8 0 -14 6 -14 14v10v1v42l-49 48h-3l-50 -48v-53c0 -8 -5 -14 -13 -14h-59c-8 0 -14 6 -14 14v59c0 8 6 13 14 13h10h1h42l49 50v3l-49 49h-42h-1h-10c-8 0 -14 6 -14 14v59 +c0 8 6 14 14 14h59c8 0 13 -6 13 -14v-53l50 -50h3l49 50v41v12c0 8 6 14 14 14h59c8 0 14 -6 14 -14v-59c0 -8 -6 -14 -14 -14h-11zM233 105l-38 -7v-165l33 7h2c8 0 14 -6 14 -14v-59c0 -6 -5 -13 -11 -14l-38 -7v-147h-28v141l-89 -18v-155h-28v149l-33 -7h-3 +c-8 0 -14 6 -14 14v58c0 6 5 13 11 14l39 8v165l-33 -7h-3c-8 0 -14 6 -14 14v-2v58v2c0 6 5 13 11 14l39 8v147h28v-141l89 18v155h28v-149l33 7h2c8 0 14 -6 14 -14v-59c0 -6 -5 -13 -11 -14zM78 74v-166l89 19v165z" /> +d="M537 79c1 -8 2 -16 2 -25c0 -41 -15 -90 -53 -133c-54 -61 -119 -93 -123 -95c-2 -1 -6 -2 -8 -2c-8 0 -14 6 -14 14l-1 114c-6 -9 -15 -23 -22 -31c-54 -61 -119 -93 -123 -95c-2 -1 -6 -2 -8 -2c-8 0 -14 6 -14 14l-1 114c0 -1 -1 -1 -1 -2l-2 -3l-1 -2l-2 -2l-1 -2 +c-1 -1 -2 -4 -3 -5l-1 -1l-3 -3c0 -1 -1 -1 -1 -2c-1 -1 -1 -2 -2 -3l-2 -1c-1 -1 -2 -4 -3 -5c-54 -61 -119 -93 -123 -95h-1c-1 0 -2 -1 -3 -1s-3 -1 -4 -1c-8 0 -14 6 -14 14l-5 601c0 8 6 14 14 14h12c8 0 14 -6 14 -14l-4 -321c5 6 34 37 84 37h4h2h2h2c1 0 2 -1 3 -1 +h1h3s0 -1 1 -1h2s1 -1 2 -1h3s2 -1 3 -1l1 -1h2l1 -1c1 0 1 -1 2 -1h1c1 0 2 -1 3 -1v-1c4 -2 10 -5 13 -8l-3 301c0 8 6 14 14 14h12c8 0 14 -6 14 -14l-4 -321c5 6 34 37 84 37c22 0 38 -7 51 -17l-3 301c0 8 6 14 14 14h12c8 0 14 -6 14 -14l-4 -321c5 6 34 37 84 37 +c51 0 75 -37 81 -76zM132 40v11c0 21 -3 55 -39 55c-40 0 -55 -29 -57 -38l-3 -195c19 15 53 42 70 68c25 38 29 84 29 99zM300 40v11c0 21 -3 55 -39 55c-40 0 -55 -29 -57 -38l-3 -195c19 15 53 42 70 68c25 38 29 84 29 99zM468 40v11c0 21 -3 55 -39 55 +c-40 0 -55 -29 -57 -38l-3 -195c19 15 53 42 70 68c25 38 29 84 29 99z" /> +d="M166 183c3 -2 5 -7 5 -11v-495h-27v175l-126 -35h-4c-8 0 -14 5 -14 13v495h28v-175l126 35c1 0 3 1 4 1c3 0 6 -1 8 -3zM28 -97l116 32v165l-116 -33v-164zM438 79c1 -8 2 -16 2 -25c0 -41 -15 -90 -53 -133c-54 -61 -119 -93 -123 -95c-2 -1 -6 -2 -8 -2 +c-8 0 -14 6 -14 14l-5 601c0 8 6 14 14 14h12c8 0 14 -6 14 -14l-4 -321c5 6 34 37 84 37c51 0 75 -37 81 -76zM369 40v11c0 21 -3 55 -39 55c-40 0 -55 -29 -57 -38l-3 -195c19 15 53 42 70 68c25 38 29 84 29 99z" /> +d="M467 107l-38 -7v-165l33 7h3c8 0 13 -6 13 -14v-59c0 -6 -5 -13 -11 -14l-38 -7v-147h-28v141l-89 -18v-155h-28v149l-33 -7h-3c-8 0 -14 6 -14 14v58c0 6 5 13 11 14l39 8v165l-33 -7h-3c-8 0 -14 6 -14 14v58c0 6 5 13 11 14l39 8v147h28v-141l89 18v155h28v-149l33 7 +h3c8 0 13 -6 13 -14v-59c0 -6 -5 -13 -11 -14zM312 76v-165l89 18v165zM166 183c3 -2 5 -7 5 -11v-495h-27v175l-126 -35h-4c-8 0 -14 5 -14 13v495h28v-175l126 35c1 0 3 1 4 1c3 0 6 -1 8 -3zM28 -97l116 32v165l-116 -33v-164z" /> +d="M524 105l-38 -7v-165l33 7h2c8 0 14 -6 14 -14v-59c0 -6 -5 -13 -11 -14l-38 -7v-147h-28v141l-89 -18v-155h-28v149l-33 -7h-3c-8 0 -14 6 -14 14v58c0 6 5 13 11 14l39 8v165l-33 -7h-3c-8 0 -14 6 -14 14v-2v58v2c0 6 5 13 11 14l39 8v147h28v-141l89 18v155h28v-149 +l33 7h2c8 0 14 -6 14 -14v-59c0 -6 -5 -13 -11 -14zM369 74v-166l89 19v165zM233 105l-38 -7v-165l33 7h2c8 0 14 -6 14 -14v-59c0 -6 -5 -13 -11 -14l-38 -7v-147h-28v141l-89 -18v-155h-28v149l-33 -7h-3c-8 0 -14 6 -14 14v58c0 6 5 13 11 14l39 8v165l-33 -7h-3 +c-8 0 -14 6 -14 14v-2v58v2c0 6 5 13 11 14l39 8v147h28v-141l89 18v155h28v-149l33 7h2c8 0 14 -6 14 -14v-59c0 -6 -5 -13 -11 -14zM78 74v-166l89 19v165z" /> +d="M68 -212c-2 0 -4 1 -5 3c-3 4 -63 88 -63 209s60 203 63 207c1 1 2 2 4 2c2 1 3 0 5 -1s3 -3 3 -5c0 -1 0 -2 -1 -3c-34 -67 -46 -134 -46 -193c0 -118 46 -207 46 -208c1 -2 1 -3 1 -4c0 -2 -1 -4 -3 -5c-1 -1 -2 -1 -4 -2z" /> +d="M7 212c2 0 4 -1 5 -3c3 -4 63 -88 63 -209s-60 -203 -63 -207c-1 -1 -2 -2 -4 -2c-2 -1 -3 0 -5 1s-3 3 -3 5c0 1 0 2 1 3c34 67 46 134 46 193c0 118 -46 207 -46 208c-1 2 -1 3 -1 4c0 2 1 4 3 5c1 1 2 1 4 2z" /> +d="M278 90c1 -8 2 -16 2 -25c0 -41 -15 -90 -53 -133c-54 -61 -118 -93 -122 -95c-2 -1 -5 -2 -8 -2h-1c-7 0 -13 6 -13 13l-5 506l-56 -42c-2 -2 -5 -3 -8 -3c-8 0 -14 6 -14 14c0 2 2 6 3 8l83 117c2 3 7 6 11 6s10 -3 12 -6l83 -117c1 -2 2 -6 2 -8c0 -8 -5 -14 -13 -14 +c-3 0 -7 1 -9 3l-56 42l-2 -225c5 6 33 37 83 37c51 0 75 -37 81 -76zM210 50v9c0 20 -3 57 -40 57c-40 0 -55 -29 -57 -38l-2 -195c19 15 53 42 70 68c25 38 29 84 29 99z" /> +d="M278 90c1 -8 2 -16 2 -25c0 -41 -15 -90 -53 -133c-46 -52 -98 -83 -116 -92v-192l61 47c2 2 6 2 9 2c8 0 13 -5 13 -13c0 -2 -1 -6 -2 -8l-84 -118c-2 -3 -7 -6 -11 -6s-9 3 -11 6l-83 118c-1 2 -3 6 -3 8c0 8 6 13 14 13c3 0 6 0 8 -2l61 -47v201l-6 600v1 +c0 8 6 13 14 13h12c8 0 14 -5 14 -13v-1l-3 -320c5 6 33 37 83 37c51 0 75 -37 81 -76zM118 -381l-1 -1zM209 50v11c0 21 -3 55 -39 55c-40 0 -55 -29 -57 -38l-2 -195c19 15 52 42 69 68c25 38 29 84 29 99z" /> +d="M249 183c3 -2 6 -7 6 -11v-495h-28v175l-126 -35h-4c-8 0 -14 5 -14 13v523l-61 -46c-2 -2 -5 -2 -8 -2c-8 0 -14 5 -14 13c0 2 2 6 3 8l83 118c2 3 7 6 11 6s10 -3 12 -6l83 -118c1 -2 2 -6 2 -8c0 -8 -5 -13 -13 -13c-3 0 -7 0 -9 2l-61 47v-204l126 35c1 0 3 1 4 1 +c3 0 6 -1 8 -3zM111 -97l116 32v165l-116 -33v-164z" /> +d="M251 -307c2 -2 4 -7 4 -10c0 -2 -2 -6 -3 -8l-83 -118c-2 -3 -7 -5 -11 -5s-10 2 -12 5l-83 118c-1 2 -3 6 -3 8c0 8 6 14 14 14c3 0 7 -1 9 -3l61 -47v204l-126 -35h-4c-8 0 -14 5 -14 13v496h28v-176l126 35c1 0 3 1 4 1c8 0 13 -6 13 -14v-523l62 46c2 2 5 3 8 3 +s8 -2 10 -4zM144 99l-116 -33v-164l116 32v165z" /> +d="M192 454l84 -118c1 -2 2 -5 2 -8s-1 -7 -4 -10c-3 -2 -6 -4 -10 -4c-3 1 -5 1 -8 3l-61 47v-180l33 7h2c3 0 7 -1 9 -3c3 -3 5 -7 5 -11v-59c0 -6 -4 -12 -11 -13l-38 -8v-165l33 7h3c3 0 6 -1 8 -3c3 -2 5 -6 5 -10v-59c0 -7 -4 -13 -11 -14l-38 -8v-149h-28v144 +l-89 -18v-155h-28v149l-33 -7h-3c-3 0 -6 1 -9 3c-3 3 -5 7 -5 11v58c0 6 5 12 11 13l39 8v166l-33 -7c-1 0 -2 -1 -3 -1c-3 0 -6 2 -9 4s-5 6 -5 10v58c0 7 5 12 11 14l39 8v123h28v-117l89 18v185l-61 -46c-2 -2 -5 -2 -8 -3c-4 0 -7 2 -10 4c-3 3 -4 7 -4 11c0 2 1 5 2 7 +l84 118c2 3 7 5 11 5c5 0 9 -2 11 -5zM78 -92l89 19v164l-89 -18v-165z" /> +d="M86 -452l-83 117c-2 3 -3 5 -3 8c0 4 2 7 4 10c3 2 6 4 9 4s7 -1 9 -3l61 -47v181l-32 -7c-1 0 -2 -1 -3 -1c-3 1 -7 2 -9 4c-3 2 -5 6 -5 10v59c0 7 5 13 11 14l38 8v164l-32 -7c-4 0 -9 1 -12 3c-3 3 -5 7 -5 11v59c0 7 5 12 11 14l38 7v150h28v-144l89 18v154h28v-149 +l34 7h2c4 0 7 -1 9 -3c3 -2 5 -6 5 -10v-58c0 -7 -4 -12 -11 -14l-39 -8v-165l34 7h2c4 0 7 -1 9 -3c3 -3 5 -7 5 -11v-58c0 -6 -4 -12 -11 -13l-39 -8v-123h-28v117l-89 -19v-185l61 46c3 2 6 3 9 3s7 -1 9 -4c3 -2 4 -5 4 -8v-2c0 -3 0 -5 -2 -8l-83 -117 +c-3 -4 -7 -6 -12 -6c-4 0 -8 2 -11 6zM200 93l-89 -18v-165l89 18v165z" /> +d="M67 -51l50 50v3l-50 49h-42v0h-11c-8 0 -14 6 -14 14v59c0 8 6 14 14 14h59c8 0 14 -6 14 -14v-53l49 -50h3l49 50v41v0v12c0 8 7 14 14 14h18v221l-61 -46c-2 -1 -5 -2 -7 -2c-4 0 -8 1 -11 4c-2 2 -4 5 -4 9c0 3 1 6 3 9l83 117c2 4 7 6 11 6c5 0 9 -2 11 -6l84 -117 +c1 -3 2 -5 2 -8c0 -4 -1 -8 -4 -10c-3 -3 -6 -4 -10 -4c-3 0 -5 1 -8 3l-61 46v-222h13c8 0 14 -6 14 -14v-59c0 -8 -6 -14 -14 -14h-11v0h-42l-50 -49v-3l50 -50h42v0h11c8 0 14 -6 14 -13v-59c0 -8 -6 -14 -14 -14h-59c-7 0 -14 6 -14 14v11v0v42l-49 48h-3l-49 -48v-53 +c0 -8 -6 -14 -14 -14h-59c-8 0 -14 6 -14 14v59c0 7 6 13 14 13h11v0h42z" /> +d="M265 52l-50 -50v-3l50 -49h42v0h11c8 0 14 -6 14 -14v-59c0 -8 -6 -14 -14 -14h-59c-8 0 -14 6 -14 14v53l-49 50h-3l-49 -50v-41v0v-12c0 -8 -7 -14 -14 -14h-18v-221l61 46c2 1 5 2 7 2c4 0 8 -1 11 -4c2 -2 4 -5 4 -9c0 -3 -1 -6 -3 -9l-83 -117c-2 -4 -7 -6 -11 -6 +c-5 0 -9 2 -11 6l-84 117c-1 3 -2 5 -2 8c0 4 1 8 4 10c3 3 6 4 10 4c3 0 5 -1 8 -3l61 -46v222h-13c-8 0 -14 6 -14 14v59c0 8 6 14 14 14h11v0h42l50 49v3l-50 50h-42v0h-11c-8 0 -14 6 -14 13v59c0 8 6 14 14 14h59c7 0 14 -6 14 -14v-11v0v-42l49 -48h3l49 48v53 +c0 8 6 14 14 14h59c8 0 14 -6 14 -14v-59c0 -7 -6 -13 -14 -13h-11v0h-42z" /> +d="M196 -173c0 0 -4 -3 -10 -3c-5 0 -11 6 -11 14l-1 115c-7 -11 -15 -22 -24 -32c-54 -61 -118 -93 -122 -94c0 0 -5 -3 -10 -3c-7 0 -12 6 -12 14l-6 588v0c0 8 7 14 14 14h12v0c8 0 14 -7 14 -14l-3 -308c5 6 33 37 83 37c22 0 39 -7 52 -18l-2 220l-56 -42 +c-2 -2 -5 -3 -8 -3s-6 1 -8 3c-4 2 -6 7 -6 11c0 3 1 6 2 8l84 118c2 3 7 5 11 5s9 -2 11 -5l84 -118c1 -2 2 -5 2 -8s-1 -6 -3 -8c-2 -4 -7 -6 -11 -6c-3 0 -6 1 -8 3l-56 43l-3 -240c5 6 34 37 84 37c51 0 75 -36 81 -76c1 -7 2 -16 2 -24c0 -41 -15 -90 -53 -134 +c-55 -61 -119 -92 -123 -94zM132 40c0 3 1 7 1 13c-1 20 -5 52 -40 53c-40 0 -55 -29 -57 -38l-2 -195c19 14 52 42 69 68c26 37 29 84 29 99zM301 40v11c0 20 -3 55 -39 55c-40 0 -55 -29 -57 -38l-2 -195c19 14 52 42 69 68c26 38 29 84 29 99z" /> +d="M447 80c1 -7 2 -16 2 -24c0 -41 -16 -91 -54 -134c-54 -61 -118 -92 -122 -94c-2 -1 -6 -3 -8 -3c-8 0 -14 6 -14 14l-1 114c-6 -9 -16 -23 -23 -31c-46 -52 -99 -83 -117 -92v-184l62 46c2 2 5 3 8 3c8 0 14 -6 14 -14c0 -2 -2 -6 -3 -8l-83 -117c-2 -3 -7 -6 -11 -6 +s-10 3 -12 6l-83 117c-1 2 -2 6 -2 8c0 8 5 14 13 14c3 0 7 -1 9 -3l60 -46v192l-5 601c0 8 6 14 14 14h12c8 0 14 -6 14 -14l-4 -321c5 6 34 37 84 37c22 0 39 -6 52 -17l-3 302c0 8 6 14 14 14h11c8 0 14 -6 14 -14l-3 -321c5 6 34 37 84 37c51 0 75 -37 81 -76zM209 40 +v11c0 21 -3 55 -39 55c-40 0 -55 -29 -57 -38l-3 -195c19 15 53 42 70 68c25 38 29 84 29 99zM378 41v11c0 21 -3 55 -39 55c-40 0 -56 -29 -58 -38l-2 -195c19 15 53 42 70 68c25 38 29 84 29 99z" /> +d="M0 58c0 62 37 93 87 93c46 0 68 -22 74 -30l-2 318c0 7 6 13 13 13h8c7 0 13 -6 13 -13l-4 -602c0 -7 -6 -13 -13 -13c-3 0 -4 2 -6 3c0 0 -55 33 -96 72c-29 28 -74 83 -74 159zM103 107c-36 0 -39 -34 -39 -55v-12c0 -15 4 -52 29 -90c18 -27 51 -58 70 -74l-1 198 +c0 -3 -1 -5 -1 -3c0 9 -14 36 -58 36z" /> +d="M422 58c0 -76 -45 -131 -74 -159c-41 -39 -96 -72 -96 -72c-2 -1 -3 -3 -6 -3c-7 0 -13 6 -13 13l-4 602c0 7 6 13 13 13h8c7 0 13 -6 13 -13l-2 -318c6 8 28 30 74 30c50 0 87 -31 87 -93zM319 107c-44 0 -58 -27 -58 -36c0 -2 -1 0 -1 3l-1 -198c19 16 52 47 70 74 +c25 38 29 75 29 90v12c0 21 -3 55 -39 55zM0 58c0 62 37 93 87 93c46 0 68 -22 74 -30l-2 318c0 7 6 13 13 13h8c7 0 13 -6 13 -13l-4 -602c0 -7 -6 -13 -13 -13c-3 0 -4 2 -6 3c0 0 -55 33 -96 72c-29 28 -74 83 -74 159zM103 107c-36 0 -39 -34 -39 -55v-12 +c0 -15 4 -52 29 -90c18 -27 51 -58 70 -74l-1 198c0 -3 -1 -5 -1 -3c0 9 -14 36 -58 36z" /> +d="M169 100l-65 -13v-165l59 12h3c8 0 14 -5 14 -13v-59c0 -6 -5 -13 -11 -14l-65 -13v-151h-28v145l-59 -12h-3c-8 0 -14 6 -14 14v58c0 6 5 12 11 13l65 14v165l-59 -12h-3c-8 0 -14 6 -14 14v58c0 6 5 12 11 13l65 14v152h28v-146l59 12c1 0 2 1 3 1c8 0 14 -6 14 -14 +v-59c0 -6 -5 -13 -11 -14z" /> +d="M278 110l-36 -7v-165l31 7h3c8 0 14 -6 14 -14v-59c0 -6 -6 -13 -12 -14l-36 -7v-147h-28v141l-59 -12v-146h-27v141l-53 -11v-145h-27v139l-31 -6h-3c-8 0 -14 6 -14 14v58c0 6 5 12 11 13l37 8v166l-31 -7h-3c-8 0 -14 6 -14 14v58c0 6 5 12 11 13l37 8v157h27v-151 +l53 11v156h27v-151l59 12v155h28v-149l31 7h3c8 0 13 -6 13 -14v-59c0 -6 -5 -13 -11 -14zM128 -85v165l-53 -11v-165zM155 85v-165l59 12v165z" /> - + +d="M275 80c1 -8 2 -16 2 -25c0 -41 -15 -91 -53 -134c-56 -63 -123 -95 -123 -95c-3 -1 -5 -2 -8 -2c-8 0 -14 5 -14 13l-3 362l-76 -45v44l76 45l-1 74l-75 -44v44l75 44l-1 79c0 8 6 14 14 14h12c8 0 14 -6 14 -14l-1 -57l120 71v-44l-121 -71v-75l121 71v-44l-122 -71 +l-1 -101c4 5 32 37 84 37s75 -36 81 -76zM206 40v11c0 21 -3 55 -39 55c-41 0 -55 -30 -57 -39l-3 -195c19 15 53 43 70 69c25 38 29 84 29 99z" /> +d="M275 80c1 -8 2 -16 2 -25c0 -41 -15 -91 -53 -134c-56 -63 -123 -95 -123 -95c-2 -1 -5 -2 -8 -2c-8 0 -14 5 -14 13l-3 384l-76 -44v44l76 44l-2 175c0 8 6 14 14 14h12c8 0 14 -6 14 -14l-2 -153l121 71v-44l-121 -72l-2 -123c4 5 32 37 84 37s75 -36 81 -76zM206 40 +v11c0 21 -3 55 -39 55c-41 0 -55 -30 -57 -39l-2 -195c19 15 52 43 69 69c25 38 29 84 29 99z" /> +d="M343 84c3 -2 5 -6 5 -10v-59c0 -6 -4 -10 -10 -12l-151 -41v-41l92 25c1 0 2 1 3 1c3 0 6 -1 8 -3c3 -2 5 -6 5 -10v-59c0 -6 -3 -11 -9 -13l-99 -26v-152h-26v145l-92 -25h-3c-3 0 -6 0 -8 2c-3 2 -5 7 -5 11v58c0 6 3 10 9 12l99 27v40l-145 -39h-3c-3 0 -6 1 -8 3 +c-3 2 -5 6 -5 10v58c0 6 4 10 10 12l151 42v40l-92 -24c-1 0 -2 -1 -3 -1c-3 0 -6 1 -8 3c-3 2 -5 6 -5 10v58c0 6 3 11 9 13l99 27v152h26v-145l92 25h3c3 0 6 0 8 -2c3 -2 5 -7 5 -11v-59c0 -6 -3 -10 -9 -12l-99 -26v-41l145 39c1 0 2 1 3 1c3 0 6 -1 8 -3z" /> +d="M343 84c3 -2 5 -6 5 -10v-59c0 -5 -4 -11 -9 -12l-93 -25v-41l33 9c1 0 2 1 3 1c2 0 6 -2 8 -3c3 -2 5 -6 5 -10v-60c0 -5 -4 -11 -9 -12l-40 -11v-152h-26v145l-91 -24v-152h-26v145l-34 -9h-3c-7 0 -13 5 -13 12v58v1c0 5 4 11 9 12l41 11v41l-87 -23c-1 0 -2 -1 -3 -1 +c-2 0 -6 2 -8 3c-3 2 -5 6 -5 10v58c0 5 5 12 10 13l93 25v41l-34 -9h-3c-2 0 -6 1 -8 2c-3 2 -5 6 -5 10v59c0 5 4 11 9 12l41 11v153h26v-146l91 25v152h26v-145l33 9c1 0 3 1 4 1c7 0 12 -6 12 -13v-59c0 -5 -4 -12 -9 -13l-40 -11v-40l86 24h3c2 0 6 -2 8 -3zM220 96 +l-91 -24v-41l91 25v40zM129 -95l91 25v41l-91 -25v-41z" /> +d="M18 234l333 -103c5 -2 10 -7 10 -13s-5 -12 -10 -14l-333 -103c-1 0 -3 -1 -4 -1c-8 0 -14 6 -14 14v23c0 6 5 11 10 13l214 68l-214 67c-5 2 -10 7 -10 13v23c0 8 6 14 14 14c1 0 3 -1 4 -1z" /> +d="M18 -1l333 -103c5 -2 10 -7 10 -13s-5 -12 -10 -14l-333 -103c-1 0 -3 -1 -4 -1c-8 0 -14 6 -14 14v23c0 6 5 11 10 13l214 68l-214 67c-5 2 -10 7 -10 13v23c0 8 6 14 14 14c1 0 3 -1 4 -1z" /> +d="M11 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0z" /> +d="M11 -67c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0z" /> +d="M120 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0zM25 140l-24 14l135 226c2 4 8 6 12 6c6 -1 9 -2 12 -6l135 -226c1 -2 1 -5 1 -7c0 -8 -5 -14 -13 -14h-63c-5 0 -11 3 -13 7l-87 159z" /> +d="M176 -11c15 -16 15 -40 0 -55c-16 -16 -40 -16 -56 0c-15 15 -15 39 0 55c16 15 40 15 56 0zM271 -140l24 -14l-135 -226c-2 -4 -8 -6 -12 -6c-6 1 -9 2 -12 6l-135 226c-1 2 -1 5 -1 7c0 8 5 14 13 14h63c5 0 11 -3 13 -7l87 -159z" /> +d="M152 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0zM18 343l333 -103c5 -2 10 -7 10 -13s-5 -12 -10 -14l-333 -103c-1 0 -3 -1 -4 -1c-8 0 -14 6 -14 14v23c0 6 5 11 10 13l214 68l-214 67c-5 2 -10 7 -10 13v23c0 8 6 14 14 14 +c1 0 3 -1 4 -1z" /> +d="M18 -110l333 -103c5 -2 10 -7 10 -13s-5 -12 -10 -14l-333 -103c-1 0 -3 -1 -4 -1c-8 0 -14 6 -14 14v23c0 6 5 11 10 13l214 68l-214 67c-5 2 -10 7 -10 13v23c0 8 6 14 14 14c1 0 3 -1 4 -1zM152 -67c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55 +c-16 -15 -40 -15 -56 0z" /> +d="M14 187h288c8 0 14 -6 14 -14v-18c0 -8 -6 -14 -14 -14h-288c-8 0 -14 6 -14 14v18c0 8 6 14 14 14zM130 11c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0z" /> +d="M14 -141h288c8 0 14 -6 14 -14v-18c0 -8 -6 -14 -14 -14h-288c-8 0 -14 6 -14 14v18c0 8 6 14 14 14zM130 -67c-15 16 -15 40 0 55c16 16 40 16 56 0c15 -15 15 -39 0 -55c-16 -15 -40 -15 -56 0z" /> +d="M18 357l333 -103c5 -2 10 -7 10 -13s-5 -12 -10 -14l-333 -103c-1 0 -3 -1 -4 -1c-8 0 -14 6 -14 14v23c0 6 5 11 10 13l214 68l-214 67c-5 2 -10 7 -10 13v23c0 8 6 14 14 14c1 0 3 -1 4 -1zM36 46h288c8 0 14 -6 14 -14v-18c0 -8 -6 -14 -14 -14h-288 +c-8 0 -14 6 -14 14v18c0 8 6 14 14 14z" /> +d="M18 -124l333 -103c5 -2 10 -7 10 -13s-5 -12 -10 -14l-333 -103c-1 0 -3 -1 -4 -1c-8 0 -14 6 -14 14v23c0 6 5 11 10 13l214 68l-214 67c-5 2 -10 7 -10 13v23c0 8 6 14 14 14c1 0 3 -1 4 -1zM36 0h288c8 0 14 -6 14 -14v-18c0 -8 -6 -14 -14 -14h-288 +c-8 0 -14 6 -14 14v18c0 8 6 14 14 14z" /> +d="M2 2c-1 1 -2 3 -2 5c0 36 140 199 140 199c3 3 9 6 14 6s11 -3 14 -6l38 -38c3 -3 6 -9 6 -14s-3 -11 -6 -14s-163 -140 -199 -140c-2 0 -4 1 -5 2z" /> +d="M2 -2c1 1 3 2 5 2c36 0 196 -137 199 -140s6 -9 6 -14s-3 -11 -6 -14l-38 -38c-3 -3 -9 -6 -14 -6s-11 3 -14 6c0 0 -140 163 -140 199c0 2 1 4 2 5z" /> +d="M332 0c8 -2 10 -9 10 -14v-3c-1 -5 -25 -145 -171 -145s-170 140 -171 145v3c0 5 2 12 10 14h3c8 0 12 -7 14 -12c2 -6 17 -93 144 -93s142 87 144 93c2 5 6 12 14 12h3z" /> - - +d="M332 0h-3c-8 0 -12 7 -14 12c-2 6 -17 93 -144 93s-142 -87 -144 -93c-2 -5 -6 -12 -14 -12h-3c-8 2 -10 9 -10 14v3c1 5 25 145 171 145s170 -140 171 -145v-3c0 -5 -2 -12 -10 -14z" /> + + +d="M280 -123l24 -14l-135 -226c-2 -4 -8 -6 -12 -6c-6 1 -9 2 -12 6l-135 226c-1 2 -1 5 -1 7c0 8 5 14 13 14h63c5 0 11 -3 13 -7l87 -159zM14 0h288c8 0 14 -6 14 -14v-18c0 -8 -6 -14 -14 -14h-288c-8 0 -14 6 -14 14v18c0 8 6 14 14 14z" /> +d="M540 260c49 -53 82 -161 82 -215c0 -20 -4 -32 -14 -32c-28 0 -14 86 -98 171c-74 74 -173 75 -197 75h-2h-2c-24 0 -123 -1 -197 -75c-84 -85 -70 -171 -98 -171c-10 0 -14 13 -14 32c0 54 34 161 83 215c94 102 176 108 228 108s135 -6 229 -108zM242 69 +c0 38 31 69 69 69s69 -31 69 -69s-31 -69 -69 -69s-69 31 -69 69z" /> +d="M540 -260c-94 -102 -177 -108 -229 -108s-134 6 -228 108c-49 54 -83 161 -83 215c0 19 4 32 14 32c28 0 14 -86 98 -171c74 -74 173 -75 197 -75h2h2c24 0 123 1 197 75c84 85 70 171 98 171c10 0 14 -12 14 -32c0 -54 -33 -162 -82 -215zM242 -69c0 38 31 69 69 69 +s69 -31 69 -69s-31 -69 -69 -69s-69 31 -69 69z" /> +d="M252 103c0 38 31 69 69 69s69 -31 69 -69s-31 -69 -69 -69s-69 31 -69 69zM331 448l308 -426c1 -2 3 -6 3 -8c0 -8 -6 -14 -14 -14h-43c-4 0 -9 3 -11 6l-254 351l-252 -351c-2 -3 -7 -6 -11 -6h-43c-8 0 -14 6 -14 14c0 2 2 6 3 8l306 426c2 3 7 6 11 6s9 -3 11 -6z" /> +d="M252 -103c0 38 31 69 69 69s69 -31 69 -69s-31 -69 -69 -69s-69 31 -69 69zM639 -22l-308 -426c-2 -3 -7 -6 -11 -6s-9 3 -11 6l-306 426c-1 2 -3 6 -3 8c0 8 6 14 14 14h43c4 0 9 -3 11 -6l252 -351l254 351c2 3 7 6 11 6h43c8 0 14 -6 14 -14c0 -2 -2 -6 -3 -8z" /> +d="M192 0h-28v354c0 8 6 14 14 14h486c8 0 14 -6 14 -14v-354h-28v277h-458v-277zM352 103c0 38 31 69 69 69s69 -31 69 -69s-31 -69 -69 -69s-69 31 -69 69zM28 0h-28v536c0 8 6 13 14 13h814c8 0 14 -5 14 -13v-536h-28v459h-786v-459z" /> +d="M164 -354v354h28v-277h458v277h28v-354c0 -8 -6 -14 -14 -14h-486c-8 0 -14 6 -14 14zM352 -103c0 38 31 69 69 69s69 -31 69 -69s-31 -69 -69 -69s-69 31 -69 69zM0 -536v536h28v-459h786v459h28v-536c0 -8 -6 -13 -14 -13h-814c-8 0 -14 5 -14 13z" /> +d="M182 491h27c6 0 12 -6 12 -12v-2c-10 -59 -41 -240 -200 -472c-2 -3 -6 -5 -10 -5c-7 0 -11 6 -11 12c0 2 0 4 1 6c122 224 161 401 169 463c1 6 6 10 12 10zM329 491h28c6 0 11 -6 11 -12v-2c-10 -59 -40 -240 -199 -472c-2 -3 -6 -5 -10 -5c-7 0 -12 6 -12 13 +c0 1 0 3 1 5c122 224 162 401 170 463c1 6 5 10 11 10z" /> +d="M110 -250h-95c-8 0 -15 7 -15 15v470c0 8 7 15 15 15h95c8 0 15 -7 15 -15v-470c0 -8 -7 -15 -15 -15z" /> +d="M230 -166l2 -3c2 -3 3 -5 3 -8s-1 -5 -3 -9c-3 -4 -6 -5 -10 -5s-8 2 -8 2l-39 25c-8 5 -19 9 -32 9s-27 -4 -39 -16c-13 -13 -17 -29 -17 -42c0 -18 7 -32 7 -32s32 -58 35 -63c1 -2 3 -5 3 -9s-2 -8 -7 -12c-2 -2 -4 -2 -6 -2c-7 0 -12 6 -12 6s-75 95 -96 127 +c-8 11 -11 25 -11 39c0 25 12 53 34 73c18 16 40 20 57 20c12 0 21 -2 25 -3l-112 139c-2 2 -3 5 -3 8v9c0 2 1 6 2 8l101 154c2 3 3 8 3 12c0 5 -1 9 -3 12l-76 104s-3 5 -3 11c0 3 1 7 5 10c3 2 5 3 8 3c6 0 10 -6 10 -6l162 -219c2 -2 3 -5 3 -8v-9c0 -2 -1 -5 -2 -7 +l-102 -154c-1 -2 -2 -6 -2 -9c0 -2 1 -5 2 -6l115 -142c3 -4 5 -6 6 -7z" /> +d="M267 203c6 -3 9 -7 9 -12c0 -2 0 -4 -1 -5l-140 -441l-27 8l114 356c-11 -12 -23 -24 -35 -33c-27 -20 -58 -29 -87 -29c-20 0 -40 5 -55 12c-26 11 -45 36 -45 67c0 39 32 71 72 71c39 0 71 -32 71 -71c0 -19 -7 -35 -18 -48c16 3 32 10 45 20c45 33 76 92 80 98 +c2 5 7 8 13 8c1 0 3 -1 4 -1z" /> +d="M343 186l-195 -693l-27 7l102 365c-30 -39 -69 -64 -119 -66c-20 0 -37 2 -56 10c-26 9 -47 34 -47 64c0 40 30 74 70 74c39 0 73 -29 73 -69c0 -17 -6 -34 -17 -48c51 13 108 78 122 125l45 159v0c-30 -39 -69 -64 -119 -66c-19 0 -38 2 -56 10c-26 10 -46 35 -47 65 +c0 39 29 72 69 74c39 0 74 -30 74 -69c0 -18 -5 -34 -17 -48c55 14 95 68 119 116c3 5 7 8 13 8c1 0 3 0 5 -1c6 -2 9 -7 9 -12c0 -2 0 -3 -1 -5z" /> +d="M151 49c-45 0 -90 29 -90 76c0 40 31 71 70 71s72 -27 72 -67c0 -18 -3 -33 -15 -48c56 14 99 84 119 134l39 161c-28 -39 -68 -67 -117 -70c-5 -1 -9 -1 -13 -1c-16 1 -30 3 -43 8c-27 9 -49 38 -49 68c0 42 33 72 72 72s70 -29 70 -67c0 -18 -3 -33 -15 -48 +c48 12 94 71 113 113c3 5 7 9 13 9c1 0 3 0 4 -1c6 -2 10 -6 10 -12c0 -1 0 -3 -1 -4l-232 -950l-27 6l91 372c-30 -42 -72 -71 -125 -71s-97 25 -97 77c0 40 32 70 71 70s71 -26 71 -66c0 -18 -3 -34 -14 -48c58 16 96 83 118 135l37 151c-4 -7 -41 -70 -132 -70z" /> +d="M144 -752l78 377c-3 -8 -37 -75 -130 -75c-75 0 -92 48 -92 75s20 71 71 71c50 0 71 -44 71 -71c0 -16 -5 -30 -13 -41c15 5 30 13 43 24c26 24 62 80 71 116l31 150c-4 -8 -45 -75 -129 -75s-93 57 -93 76s16 71 71 71c56 0 72 -48 72 -71c0 -22 -5 -30 -13 -42 +c15 5 30 13 43 25c35 32 62 94 69 111l33 159c-4 -8 -41 -75 -129 -75c-71 0 -93 43 -93 77s27 70 71 70s72 -37 72 -72s-5 -29 -14 -41c16 5 31 13 43 25c37 33 64 96 70 112l33 156l-1 -1c-9 -14 -13 -19 -31 -37c-19 -19 -57 -38 -98 -38c-42 0 -93 19 -93 75 +c0 43 34 72 71 72s72 -30 72 -72c0 -14 -5 -30 -14 -41c16 5 31 13 43 24c39 36 62 85 66 92s6 10 14 10c2 0 3 0 4 -1c6 -1 10 -6 10 -12c0 -1 -1 -2 -1 -4c-2 -7 -226 -1085 -251 -1205z" /> +c-75 0 -92 48 -92 75s20 72 71 72c50 0 71 -45 71 -72c0 -16 -5 -30 -13 -41c15 5 30 13 43 24c26 24 62 80 71 116l31 150c-4 -8 -45 -74 -129 -74s-93 56 -93 75s16 71 71 71c56 0 72 -48 72 -71c0 -22 -5 -30 -13 -41c15 4 30 12 43 24c35 33 62 94 69 111l33 159 +c-4 -8 -41 -75 -129 -75c-71 0 -93 43 -93 77s27 70 71 70s72 -37 72 -72s-5 -29 -14 -41c16 5 31 13 43 25c37 33 64 96 70 112l33 156l-1 -1c-9 -14 -13 -19 -31 -37c-19 -19 -57 -38 -98 -38c-42 0 -93 19 -93 75c0 43 34 72 71 72s72 -30 72 -72c0 -14 -5 -29 -14 -41 +c16 5 31 13 43 24c39 36 62 85 66 92s7 10 14 10c2 0 6 -1 9 -3z" /> +d="M515 723c7 -1 11 -7 11 -13c1 -1 0 -2 0 -3l-356 -1705l-27 6l78 375c-9 -13 -19 -26 -30 -36c-25 -22 -55 -34 -84 -37c-5 0 -10 -1 -15 -1c-14 0 -28 3 -40 7c-28 8 -49 31 -52 61v8c0 36 27 67 63 71h8c36 0 67 -27 71 -64v-8c0 -15 -5 -29 -13 -41c15 5 30 13 43 25 +c36 32 63 93 69 111l33 157c-9 -13 -20 -26 -31 -36c-25 -23 -55 -35 -83 -37c-5 -1 -10 -1 -15 -1c-15 0 -29 2 -41 6c-27 8 -48 32 -51 62c-1 3 -1 6 -1 8c1 36 28 66 64 70h7c36 1 68 -27 71 -63c1 -3 1 -6 1 -8c0 -15 -5 -30 -14 -41c16 5 31 13 43 24 +c37 33 64 97 70 113l32 154l1 3c-9 -13 -20 -26 -32 -37c-25 -22 -55 -34 -83 -37c-5 0 -10 -1 -15 -1c-15 0 -29 3 -41 7c-27 8 -48 31 -51 61c-1 3 -1 5 -1 8c0 36 28 67 64 71h8c36 0 67 -27 71 -64v-4v-5c0 -14 -5 -28 -13 -40c15 5 30 13 43 25c39 35 66 100 69 110 +c1 1 2 5 2 5l31 150c-9 -13 -20 -26 -31 -36c-25 -23 -55 -34 -83 -37c-4 -1 -9 -1 -13 -1h-6c-13 0 -26 3 -37 7c-27 7 -48 31 -51 61c-1 2 -1 5 -1 7c0 36 27 67 64 71c3 0 5 1 7 1c37 0 68 -28 71 -64c1 -3 1 -6 1 -8c0 -15 -5 -30 -13 -41c15 5 30 13 43 24 +c35 33 61 89 68 107l33 158c-9 -13 -20 -26 -31 -36c-25 -23 -55 -34 -83 -37c-5 -1 -10 -1 -15 -1c-15 0 -29 2 -41 7c-28 7 -49 31 -52 61v7c0 36 27 67 64 71c2 1 5 1 7 1c36 0 67 -27 71 -64c1 -3 1 -5 1 -8c0 -15 -5 -29 -14 -41c16 5 31 13 43 24c37 34 64 97 70 113 +l33 154l-1 -1c-9 -13 -20 -26 -31 -37c-25 -23 -55 -34 -83 -37c-5 -1 -10 -1 -15 -1c-15 0 -29 3 -41 7c-27 8 -49 31 -52 61v7c0 37 27 68 64 72h7c36 0 67 -27 71 -64c0 -3 1 -5 1 -8c0 -15 -5 -29 -14 -41c15 5 30 13 43 25c39 35 63 81 66 92c2 5 7 9 12 9h4z" /> +d="M566 967c10 0 13 -9 13 -12v-4c-2 -8 -384 -1835 -409 -1955l-27 6l77 371c-11 -18 -46 -69 -127 -69c-75 0 -93 48 -93 76c0 27 21 71 71 71c51 0 72 -44 72 -72c0 -15 -5 -29 -13 -41c15 5 30 13 43 25c22 21 52 66 66 101l34 161c-10 -17 -46 -70 -128 -70 +c-75 0 -93 48 -93 76c0 27 21 71 71 71c51 0 72 -44 72 -72c0 -15 -5 -29 -13 -41c15 5 30 13 43 25c23 21 54 68 67 103l34 163c-8 -14 -43 -72 -129 -72c-75 0 -93 48 -93 76c0 27 21 71 71 71c51 0 72 -44 72 -72c0 -15 -5 -29 -13 -41c15 5 30 13 43 25 +c24 22 57 73 68 108l34 156c-3 -8 -37 -75 -130 -75c-75 0 -93 48 -93 75s21 72 72 72c50 0 71 -44 71 -72c0 -16 -5 -29 -13 -41c15 5 30 13 43 24c26 24 62 81 71 116l31 147c-5 -8 -45 -74 -129 -74s-93 56 -93 75s15 72 71 72s72 -49 72 -71c0 -23 -5 -30 -13 -42 +c15 5 30 13 43 24c35 33 62 94 69 112l33 158c-4 -7 -41 -74 -129 -74c-71 0 -93 42 -93 76s27 70 71 70s72 -37 72 -72c0 -21 -7 -34 -14 -41c16 5 30 13 43 25c37 33 64 96 70 112l33 156l-1 -1c-9 -14 -13 -19 -31 -37c-19 -19 -57 -38 -98 -38c-42 0 -93 19 -93 75 +c0 43 34 72 71 72s71 -30 71 -72c0 -14 -5 -29 -13 -41c15 5 30 13 43 25c39 35 62 84 66 92c3 6 7 9 14 9z" /> +d="M558 986l33 156s-14 -21 -32 -38c-18 -18 -55 -35 -83 -38h-13c-16 0 -30 2 -43 6c-27 8 -48 32 -52 62v7c0 36 27 67 64 71h7c36 0 67 -27 71 -64c1 -2 1 -5 1 -7c0 -16 -5 -30 -14 -41c16 4 31 13 43 24c39 36 63 82 66 92c2 6 7 9 12 10h5c6 -2 10 -7 11 -13 +c0 -1 -1 -2 -1 -4l-462 -2213l-27 6l79 376c-10 -13 -20 -26 -31 -36c-25 -23 -55 -34 -84 -37c-5 -1 -10 -1 -16 -1c-14 0 -28 2 -39 7c-28 7 -49 31 -52 61v7c0 36 27 67 63 71h8c36 1 67 -27 71 -63v-8c0 -15 -5 -30 -13 -41c15 5 30 13 43 24c37 34 65 101 70 114 +l32 152c-9 -13 -19 -25 -31 -36c-24 -22 -54 -34 -83 -37h-13h-6c-13 0 -26 2 -37 6c-27 8 -48 32 -51 61c0 3 -1 5 -1 8c0 36 28 67 64 71h8c36 0 67 -27 71 -64v-7c0 -15 -5 -30 -13 -42c15 5 30 13 43 25c35 32 63 95 69 112l33 155c-10 -14 -20 -26 -31 -37 +c-25 -22 -55 -34 -84 -37h-12h-6c-14 0 -26 2 -37 6c-28 8 -49 32 -52 61v8c0 36 27 67 64 71h7c36 0 67 -27 71 -64v-7c0 -16 -5 -30 -13 -42c15 5 30 13 43 25c36 32 63 93 69 111l33 158c-9 -14 -19 -27 -31 -37c-25 -23 -55 -34 -83 -37c-5 -1 -10 -1 -15 -1 +c-15 0 -29 2 -41 7c-27 7 -48 31 -51 61c-1 2 -1 5 -1 7c0 36 27 67 64 71c3 1 5 1 8 1c36 0 67 -28 70 -64c1 -2 1 -3 1 -5v-3c0 -15 -5 -29 -14 -41c16 5 31 13 43 24c37 34 65 97 70 113l33 158c-9 -14 -20 -27 -31 -37c-25 -23 -55 -35 -84 -37c-4 -1 -8 -1 -13 -1 +c-15 0 -30 2 -42 6c-28 8 -49 32 -52 62v7c-1 36 27 67 63 71h8c36 0 67 -27 71 -63v-8c0 -15 -5 -30 -13 -41c15 5 30 12 43 24c39 35 65 87 70 111c9 39 32 155 32 155c-9 -14 -19 -27 -31 -37c-24 -22 -54 -34 -83 -37c-5 0 -10 -1 -15 -1c-15 0 -28 3 -40 7 +c-28 8 -49 31 -52 61c0 3 -1 5 -1 8c0 36 28 67 64 71h8c36 0 67 -27 71 -64v-7c0 -15 -5 -30 -13 -42c15 5 30 13 43 25c36 32 63 93 69 111l33 159c-9 -14 -19 -27 -31 -37c-25 -23 -55 -34 -83 -37c-5 -1 -10 -1 -15 -1c-15 0 -29 2 -41 7c-27 7 -48 31 -51 61 +c-1 3 -1 6 -1 9c1 35 28 66 64 69c3 1 5 1 8 1c36 0 67 -28 71 -64v-5v-3c0 -15 -5 -29 -13 -41c15 5 30 13 43 24c36 34 64 97 69 113z" /> +d="M9 203c1 0 3 1 4 1c6 0 11 -3 13 -8c4 -6 35 -65 80 -98c14 -10 29 -17 45 -20c-11 13 -18 29 -18 48c0 39 32 71 72 71c39 0 71 -32 71 -71c0 -31 -19 -56 -45 -67c-15 -7 -34 -12 -55 -12c-28 0 -60 9 -87 29c-12 9 -24 21 -35 33l114 -356l-27 -8l-140 440 +c-1 2 -1 4 -1 6c0 5 3 9 9 12z" /> +d="M229 264v-28h-62v-222h62v-28h-76h-77h-76v28h63v222h-63v28h76h77h76z" /> +d="M312 14h152v-28h-139v-94c0 -8 -5 -14 -13 -14h-299c-8 0 -13 6 -13 14v94h-139v28h152h299z" /> +d="M464 14v-28h-152h-299h-152v28h139v94c0 8 5 14 13 14h299c8 0 13 -6 13 -14v-94h139z" /> +d="M304 133c0 -78 -69 -133 -169 -133c-81 0 -135 39 -135 98c0 31 17 63 45 84c16 12 34 21 59 31c-32 28 -45 53 -45 90c0 76 63 130 151 130c72 0 122 -38 122 -95c0 -45 -28 -77 -88 -99c39 -25 60 -63 60 -106zM73 101c0 -43 29 -72 74 -72s79 30 79 69 +c0 29 -16 50 -54 72c-5 3 -5 3 -28 14c-7 4 -8 4 -17 9c-35 -20 -54 -53 -54 -92zM265 336c0 42 -25 67 -65 67s-68 -26 -68 -63c0 -26 10 -40 41 -59c8 -5 14 -8 47 -25c32 24 45 46 45 80z" /> +d="M496 425l-36 -122c-11 -45 -12 -47 -12 -57c0 -15 14 -28 28 -28c16 0 33 12 49 36c19 30 30 58 30 80c0 10 -1 12 -21 31c-10 9 -15 17 -15 28c0 19 13 32 34 32c23 0 39 -18 39 -44c0 -36 -15 -85 -36 -123c-28 -49 -65 -75 -106 -75c-20 0 -40 7 -55 20 +c-14 12 -21 30 -21 52c0 11 3 28 6 38l16 54c5 18 7 27 7 32c0 12 -6 15 -30 15h-12l4 24zM825 418h77l-48 -164c-5 -18 -5 -19 -5 -22c0 -4 4 -8 7 -8c8 0 33 27 51 55l19 -12c-8 -13 -22 -33 -32 -44c-24 -28 -46 -40 -71 -40c-20 0 -36 11 -40 27c-1 4 -2 4 -2 15 +c-23 -30 -46 -42 -80 -42c-50 0 -85 36 -85 88c0 79 67 153 140 153c29 0 50 -10 62 -30zM720 351c-14 -30 -24 -69 -24 -95c0 -24 11 -39 30 -39s37 16 51 48c15 32 26 72 26 97c0 21 -12 35 -30 35c-21 0 -38 -14 -53 -46zM304 133c0 -78 -69 -133 -169 -133 +c-81 0 -135 39 -135 98c0 31 17 63 45 84c16 12 34 21 59 31c-32 28 -45 53 -45 90c0 76 63 130 151 130c72 0 122 -38 122 -95c0 -45 -28 -77 -88 -99c39 -25 60 -63 60 -106zM73 101c0 -43 29 -72 74 -72s79 30 79 69c0 29 -16 50 -54 72c-5 3 -5 3 -28 14 +c-7 4 -8 4 -17 9c-35 -20 -54 -53 -54 -92zM265 336c0 42 -25 67 -65 67s-68 -26 -68 -63c0 -26 10 -40 41 -59c8 -5 14 -8 47 -25c32 24 45 46 45 80z" /> +d="M479 244l-36 -122c-11 -45 -12 -47 -12 -57c0 -15 14 -28 28 -28c16 0 33 13 49 37c19 30 30 58 30 80c0 10 -2 12 -22 31c-10 9 -14 16 -14 27c0 19 13 32 34 32c23 0 39 -17 39 -43c0 -36 -15 -85 -36 -123c-28 -49 -65 -76 -106 -76c-20 0 -40 7 -55 20 +c-14 12 -21 30 -21 52c0 11 3 28 6 38l16 54c5 18 7 28 7 33c0 12 -6 15 -30 15h-12l3 23zM808 237h77l-48 -163c-5 -18 -5 -20 -5 -23c0 -4 4 -8 7 -8c8 0 33 27 51 55l19 -12c-8 -13 -22 -33 -32 -44c-24 -28 -46 -40 -71 -40c-20 0 -36 11 -40 27c-2 4 -2 5 -2 16 +c-23 -30 -46 -43 -80 -43c-50 0 -85 37 -85 89c0 79 67 153 140 153c29 0 50 -10 62 -30zM703 170c-14 -29 -24 -69 -24 -95c0 -24 11 -38 30 -38s37 15 51 47c15 32 26 72 26 97c0 21 -12 36 -30 36c-21 0 -38 -15 -53 -47zM304 133c0 -78 -69 -133 -169 -133 +c-81 0 -135 39 -135 98c0 31 17 63 45 84c16 12 34 21 59 31c-32 28 -45 53 -45 90c0 76 63 130 151 130c72 0 122 -38 122 -95c0 -45 -28 -77 -88 -99c39 -25 60 -63 60 -106zM73 101c0 -43 29 -72 74 -72s79 30 79 69c0 29 -16 50 -54 72c-5 3 -5 3 -28 14 +c-7 4 -8 4 -17 9c-35 -20 -54 -53 -54 -92zM265 336c0 42 -25 67 -65 67s-68 -26 -68 -63c0 -26 10 -40 41 -59c8 -5 14 -8 47 -25c32 24 45 46 45 80z" /> +d="M506 371l-45 -152c23 19 39 25 63 25c47 0 84 -36 84 -84c0 -41 -21 -86 -55 -117c-30 -28 -66 -41 -106 -41c-61 0 -100 31 -100 78c0 16 1 18 11 53l48 160c6 23 8 28 8 33c0 12 -6 15 -31 15h-12l4 24zM446 164c-15 -31 -28 -78 -28 -103c0 -22 13 -38 32 -38 +s38 19 54 55c12 27 23 73 23 95c0 21 -13 36 -31 36c-19 0 -35 -14 -50 -45zM851 237h77l-48 -163c-5 -18 -5 -20 -5 -23c0 -4 4 -8 7 -8c8 0 33 27 51 55l19 -12c-8 -13 -22 -33 -32 -44c-24 -28 -46 -40 -71 -40c-20 0 -37 11 -41 27c-1 4 -1 5 -1 16 +c-23 -30 -46 -43 -80 -43c-50 0 -86 37 -86 89c0 79 68 153 141 153c29 0 50 -10 62 -30zM746 170c-14 -29 -24 -69 -24 -95c0 -24 11 -38 30 -38s37 15 51 47c15 32 26 72 26 97c0 21 -13 36 -31 36c-21 0 -37 -15 -52 -47zM304 133c0 -78 -69 -133 -169 -133 +c-81 0 -135 39 -135 98c0 31 17 63 45 84c16 12 34 21 59 31c-32 28 -45 53 -45 90c0 76 63 130 151 130c72 0 122 -38 122 -95c0 -45 -28 -77 -88 -99c39 -25 60 -63 60 -106zM73 101c0 -43 29 -72 74 -72s79 30 79 69c0 29 -16 50 -54 72c-5 3 -5 3 -28 14 +c-7 4 -8 4 -17 9c-35 -20 -54 -53 -54 -92zM265 336c0 42 -25 67 -65 67s-68 -26 -68 -63c0 -26 10 -40 41 -59c8 -5 14 -8 47 -25c32 24 45 46 45 80z" /> +c8 0 33 27 51 55l19 -12c-8 -13 -22 -33 -32 -44c-24 -28 -46 -40 -71 -40c-20 0 -36 11 -40 27c-2 4 -2 4 -2 15c-23 -30 -46 -42 -80 -42c-50 0 -85 36 -85 88c0 79 67 153 140 153c29 0 50 -10 62 -30zM1216 342c-14 -30 -24 -69 -24 -95c0 -24 11 -39 30 -39 +s37 16 51 48c15 32 26 72 26 97c0 21 -12 35 -30 35c-21 0 -38 -14 -53 -46z" /> +c8 0 33 27 51 55l19 -12c-8 -13 -22 -33 -32 -44c-24 -28 -46 -40 -71 -40c-20 0 -36 11 -40 27c-2 4 -2 5 -2 16c-23 -30 -46 -43 -80 -43c-50 0 -85 37 -85 89c0 79 67 153 140 153c29 0 50 -10 62 -30zM1192 161c-14 -29 -24 -69 -24 -95c0 -24 11 -38 30 -38 +s37 15 51 47c15 32 26 72 26 97c0 21 -12 36 -30 36c-21 0 -38 -15 -53 -47z" /> +d="M842 416l-14 -60c30 40 61 60 92 60c24 0 46 -14 53 -34c2 -6 2 -6 2 -21c32 38 59 55 88 55c32 0 53 -21 53 -51c0 -15 -4 -32 -11 -53l-29 -81c-1 -4 -3 -10 -3 -12c0 -3 5 -6 9 -6c5 0 11 5 23 17c3 4 3 4 22 29c4 6 5 6 7 9l19 -14c-35 -55 -69 -80 -104 -80 +c-27 0 -48 18 -48 41c0 11 3 24 12 49l24 69c4 12 7 24 7 30c0 7 -5 12 -13 12c-11 0 -26 -11 -41 -29c-19 -23 -32 -52 -49 -111l-17 -55h-78l35 116c10 34 15 57 15 67c0 7 -4 12 -9 12c-10 0 -24 -12 -41 -34c-20 -26 -33 -53 -45 -92l-20 -68h-77l47 157c5 17 7 27 7 32 +c0 12 -6 15 -30 15h-12l4 24zM1381 409h77l-48 -164c-5 -18 -5 -19 -5 -22c0 -4 4 -8 7 -8c8 0 33 27 51 55l20 -12c-8 -13 -23 -33 -33 -44c-24 -28 -46 -40 -71 -40c-20 0 -36 11 -40 27c-1 4 -2 4 -2 15c-23 -30 -46 -42 -80 -42c-50 0 -85 36 -85 88 +c0 79 68 153 141 153c29 0 49 -10 61 -30zM1276 342c-14 -30 -24 -69 -24 -95c0 -24 11 -39 30 -39s37 16 51 48c15 32 26 72 26 97c0 21 -12 35 -30 35c-21 0 -38 -14 -53 -46zM633 150l26 -9l-51 -141h-275v3c0 25 29 59 106 126c59 51 89 80 107 103c23 28 36 62 36 91 +c0 38 -26 64 -65 64c-32 0 -64 -21 -64 -42c0 -9 4 -12 24 -21c22 -10 31 -23 31 -43c0 -29 -20 -49 -49 -49c-34 0 -59 27 -59 66c0 72 64 126 151 126c67 0 130 -35 130 -109c0 -42 -25 -83 -73 -120c-11 -9 -11 -9 -115 -72c-34 -21 -51 -33 -60 -42h118c42 0 53 8 76 57 +zM300 150l26 -9l-51 -141h-275v3c0 25 29 59 106 126c59 51 89 80 107 103c23 28 36 62 36 91c0 38 -26 64 -65 64c-32 0 -64 -21 -64 -42c0 -9 4 -12 24 -21c22 -10 31 -23 31 -43c0 -29 -20 -49 -49 -49c-34 0 -59 27 -59 66c0 72 64 126 151 126c67 0 130 -35 130 -109 +c0 -42 -25 -83 -73 -120c-11 -9 -11 -9 -115 -72c-34 -21 -51 -33 -60 -42h118c42 0 53 8 76 57z" /> +d="M842 235l-14 -60c31 40 61 60 92 60c24 0 46 -14 53 -34c2 -6 3 -5 3 -20c32 38 58 54 87 54c33 0 53 -20 53 -51c0 -15 -4 -31 -11 -52l-29 -82c-1 -4 -3 -9 -3 -11c0 -3 5 -7 9 -7c5 0 11 5 23 17c3 4 3 4 22 29c4 6 5 6 7 9l19 -14c-35 -55 -69 -80 -104 -80 +c-27 0 -48 18 -48 41c0 11 3 25 12 50l24 69c4 12 7 23 7 29c0 7 -5 12 -13 12c-11 0 -26 -11 -41 -29c-19 -23 -32 -51 -49 -110l-17 -55h-78l35 116c10 34 15 56 15 66c0 7 -4 12 -9 12c-10 0 -24 -12 -41 -34c-20 -26 -33 -53 -45 -92l-20 -68h-77l47 157c5 17 7 28 7 33 +c0 12 -6 15 -30 15h-11l3 23zM1381 228h77l-48 -163c-5 -18 -5 -20 -5 -23c0 -4 4 -8 7 -8c8 0 33 27 51 55l20 -12c-8 -13 -23 -33 -33 -44c-24 -28 -46 -40 -71 -40c-20 0 -36 11 -40 27c-2 4 -2 5 -2 16c-23 -30 -46 -43 -80 -43c-50 0 -85 37 -85 89 +c0 79 68 153 141 153c29 0 49 -10 61 -30zM1276 161c-14 -29 -24 -69 -24 -95c0 -24 11 -38 30 -38s37 15 51 47c15 32 26 72 26 97c0 21 -12 36 -30 36c-21 0 -38 -15 -53 -47zM633 150l26 -9l-51 -141h-275v3c0 25 29 59 106 126c59 51 89 80 107 103c23 28 36 62 36 91 +c0 38 -26 64 -65 64c-32 0 -64 -21 -64 -42c0 -9 4 -12 24 -21c22 -10 31 -23 31 -43c0 -29 -20 -49 -49 -49c-34 0 -59 27 -59 66c0 72 64 126 151 126c67 0 130 -35 130 -109c0 -42 -25 -83 -73 -120c-11 -9 -11 -9 -115 -72c-34 -21 -51 -33 -60 -42h118c42 0 53 8 76 57 +zM300 150l26 -9l-51 -141h-275v3c0 25 29 59 106 126c59 51 89 80 107 103c23 28 36 62 36 91c0 38 -26 64 -65 64c-32 0 -64 -21 -64 -42c0 -9 4 -12 24 -21c22 -10 31 -23 31 -43c0 -29 -20 -49 -49 -49c-34 0 -59 27 -59 66c0 72 64 126 151 126c67 0 130 -35 130 -109 +c0 -42 -25 -83 -73 -120c-11 -9 -11 -9 -115 -72c-34 -21 -51 -33 -60 -42h118c42 0 53 8 76 57z" /> +d="M160 -13v-30c-44 23 -71 45 -99 81c-34 43 -61 122 -61 176v1c0 69 25 134 70 187c27 31 50 49 90 70v-31c-33 -23 -47 -41 -61 -77c-16 -40 -24 -90 -24 -149c0 -66 10 -122 29 -162c13 -29 27 -45 56 -66z" /> +d="M0 442v30c44 -23 71 -45 99 -82c34 -43 61 -121 61 -175c0 -69 -25 -135 -70 -188c-27 -31 -50 -49 -90 -70v30c33 23 47 42 61 78c16 40 24 90 24 150c0 66 -10 121 -29 161c-13 29 -27 45 -56 66z" /> +d="M479 221l-36 -122c-11 -45 -12 -47 -12 -57c0 -15 14 -28 28 -28c16 0 33 12 49 36c19 30 30 58 30 80c0 10 -2 12 -22 31c-10 9 -14 17 -14 28c0 19 13 32 34 32c23 0 39 -18 39 -44c0 -36 -15 -85 -36 -123c-28 -49 -65 -75 -106 -75c-20 0 -40 7 -55 20 +c-14 12 -21 30 -21 52c0 11 3 28 6 38l16 54c5 18 7 27 7 32c0 12 -6 16 -30 16h-12l4 23zM765 348l-45 -153c23 19 39 26 63 26c47 0 83 -37 83 -85c0 -41 -20 -85 -54 -116c-30 -28 -66 -41 -106 -41c-61 0 -100 31 -100 78c0 16 1 17 11 52l48 161c6 23 7 28 7 33 +c0 12 -5 15 -30 15h-12l4 23zM704 141c-15 -31 -28 -79 -28 -104c0 -22 14 -37 33 -37s38 19 54 55c12 27 23 73 23 95c0 21 -13 36 -31 36c-19 0 -36 -14 -51 -45zM304 133c0 -78 -69 -133 -169 -133c-81 0 -135 39 -135 98c0 31 17 63 45 84c16 12 34 21 59 31 +c-32 28 -45 53 -45 90c0 76 63 130 151 130c72 0 122 -38 122 -95c0 -45 -28 -77 -88 -99c39 -25 60 -63 60 -106zM73 101c0 -43 29 -72 74 -72s79 30 79 69c0 29 -16 50 -54 72c-5 3 -5 3 -28 14c-7 4 -8 4 -17 9c-35 -20 -54 -53 -54 -92zM265 336c0 42 -25 67 -65 67 +s-68 -26 -68 -63c0 -26 10 -40 41 -59c8 -5 14 -8 47 -25c32 24 45 46 45 80z" /> +d="M758 235l-14 -60c30 40 61 60 92 60c24 0 46 -14 53 -34c2 -6 2 -5 2 -20c32 38 58 54 87 54c32 0 54 -20 54 -51c0 -15 -4 -31 -11 -52l-29 -82c-2 -4 -3 -9 -3 -11c0 -3 5 -7 9 -7c5 0 11 5 23 17c3 4 3 4 22 29c4 6 5 6 7 9l19 -14c-35 -55 -69 -80 -104 -80 +c-27 0 -48 18 -48 41c0 11 3 25 12 50l24 69c4 12 7 23 7 29c0 7 -5 12 -13 12c-11 0 -26 -10 -41 -28c-19 -23 -33 -52 -50 -111l-16 -55h-78l35 116c10 34 15 56 15 66c0 7 -4 12 -9 12c-10 0 -25 -12 -42 -34c-20 -26 -32 -53 -44 -92l-20 -68h-77l47 157c5 17 7 28 7 33 +c0 12 -6 15 -30 15h-12l4 23zM1253 362l-45 -152c23 19 39 25 63 25c47 0 83 -36 83 -84c0 -41 -20 -86 -54 -117c-30 -28 -66 -41 -106 -41c-61 0 -100 31 -100 78c0 16 1 18 11 53l48 160c6 23 7 28 7 33c0 12 -5 15 -30 15h-12l4 24zM1192 155c-15 -31 -28 -78 -28 -103 +c0 -22 14 -38 33 -38s38 19 54 55c12 27 23 73 23 95c0 21 -13 36 -31 36c-19 0 -36 -14 -51 -45zM279 425l-91 -338c-5 -20 -7 -32 -7 -38c0 -13 8 -17 47 -17h30l-5 -32h-253l5 32h30c28 1 41 3 46 9c4 3 6 7 8 16c1 2 3 12 8 30l61 227c3 10 4 17 4 22c0 12 -7 16 -27 16 +h-54l8 30c61 2 139 23 166 43h24zM345 233l56 191c49 -11 92 -17 132 -17c32 0 58 4 84 15c4 1 5 2 6 2c2 0 4 -2 4 -5c0 -19 -16 -49 -35 -65c-25 -22 -58 -31 -106 -31c-27 0 -28 0 -76 10l-23 -78c31 11 53 16 80 16c73 0 122 -44 122 -110c0 -98 -78 -170 -183 -170 +c-76 0 -124 36 -124 94c0 37 21 61 55 61c29 0 49 -18 49 -45c0 -23 -12 -39 -36 -47c-5 -2 -7 -3 -7 -7c0 -13 24 -25 50 -25c54 0 97 58 97 132c0 49 -22 78 -61 78c-16 0 -25 -2 -55 -15c-3 -23 -15 -35 -32 -35c-11 0 -20 9 -20 21c0 13 7 23 23 30z" /> +d="M842 235l-14 -60c30 40 61 60 92 60c24 0 46 -14 53 -34c2 -6 2 -5 2 -20c32 38 59 54 88 54c32 0 53 -20 53 -51c0 -15 -4 -31 -11 -52l-29 -82c-1 -4 -3 -9 -3 -11c0 -3 5 -7 9 -7c5 0 11 5 23 17c3 4 3 4 22 29c4 6 5 6 7 9l19 -14c-35 -55 -69 -80 -104 -80 +c-27 0 -48 18 -48 41c0 11 3 25 12 50l24 69c4 12 7 23 7 29c0 7 -5 12 -13 12c-11 0 -26 -10 -41 -28c-19 -23 -32 -52 -49 -111l-17 -55h-78l35 116c10 34 15 56 15 66c0 7 -4 12 -9 12c-10 0 -24 -12 -41 -34c-20 -26 -33 -53 -45 -92l-20 -68h-77l47 157c5 17 7 28 7 33 +c0 12 -6 15 -30 15h-12l4 23zM1337 362l-45 -152c23 19 39 25 63 25c47 0 84 -36 84 -84c0 -41 -21 -86 -55 -117c-30 -28 -65 -41 -105 -41c-61 0 -101 31 -101 78c0 16 1 18 11 53l48 160c6 23 8 28 8 33c0 12 -6 15 -31 15h-12l4 24zM1277 155c-15 -31 -28 -78 -28 -103 +c0 -22 13 -38 32 -38s38 19 54 55c12 27 23 73 23 95c0 21 -13 36 -31 36c-19 0 -35 -14 -50 -45zM633 150l26 -9l-51 -141h-275v3c0 25 29 59 106 126c59 51 89 80 107 103c23 28 36 62 36 91c0 38 -26 64 -65 64c-32 0 -64 -21 -64 -42c0 -9 4 -12 24 -21 +c22 -10 31 -23 31 -43c0 -29 -20 -49 -49 -49c-34 0 -59 27 -59 66c0 72 64 126 151 126c67 0 130 -35 130 -109c0 -42 -25 -83 -73 -120c-11 -9 -11 -9 -115 -72c-34 -21 -51 -33 -60 -42h118c42 0 53 8 76 57zM300 150l26 -9l-51 -141h-275v3c0 25 29 59 106 126 +c59 51 89 80 107 103c23 28 36 62 36 91c0 38 -26 64 -65 64c-32 0 -64 -21 -64 -42c0 -9 4 -12 24 -21c22 -10 31 -23 31 -43c0 -29 -20 -49 -49 -49c-34 0 -59 27 -59 66c0 72 64 126 151 126c67 0 130 -35 130 -109c0 -42 -25 -83 -73 -120c-11 -9 -11 -9 -115 -72 +c-34 -21 -51 -33 -60 -42h118c42 0 53 8 76 57z" /> +d="M159 369l-45 -152c23 19 39 25 63 25c47 0 84 -36 84 -84c0 -41 -21 -86 -55 -117c-30 -28 -66 -41 -106 -41c-61 0 -100 31 -100 78c0 16 1 17 11 52l48 161c6 23 7 28 7 33c0 12 -5 15 -30 15h-12l4 23zM99 162c-15 -31 -28 -78 -28 -103c0 -22 13 -38 32 -38 +s38 19 54 55c12 27 23 73 23 95c0 21 -13 36 -31 36c-19 0 -35 -14 -50 -45zM504 235h77l-48 -164c-5 -18 -5 -19 -5 -22c0 -4 4 -8 7 -8c8 0 33 27 51 55l19 -12c-8 -13 -22 -33 -32 -44c-24 -28 -46 -40 -71 -40c-20 0 -37 11 -41 27c-1 2 -1 3 -1 5v11 +c-23 -30 -46 -43 -80 -43c-50 0 -86 37 -86 89c0 79 68 153 141 153c29 0 50 -10 62 -30zM399 168c-14 -29 -24 -69 -24 -95c0 -24 11 -39 30 -39s37 16 51 48c15 32 26 72 26 97c0 21 -12 36 -30 36c-21 0 -38 -15 -53 -47zM832 188c0 -21 -14 -35 -34 -35s-34 13 -34 30 +c0 8 2 11 9 20c2 3 3 5 3 6c0 5 -12 10 -27 10c-26 0 -44 -12 -44 -29c0 -13 9 -22 38 -34c54 -24 71 -42 71 -76c0 -48 -43 -80 -108 -80c-52 0 -88 23 -88 57c0 21 14 35 35 35c20 0 35 -14 35 -31c0 -10 -3 -14 -13 -23c-1 -1 -3 -3 -3 -5c0 -7 13 -12 31 -12 +c27 0 47 15 47 34c0 13 -7 22 -28 30c-29 12 -32 13 -42 19c-25 15 -35 34 -35 60c0 48 38 78 100 78c51 0 87 -22 87 -54zM1063 188c0 -21 -14 -35 -34 -35s-34 13 -34 30c0 8 2 11 9 20c2 3 3 5 3 6c0 5 -12 10 -27 10c-26 0 -44 -12 -44 -29c0 -13 9 -22 38 -34 +c54 -24 71 -42 71 -76c0 -48 -44 -80 -108 -80c-52 0 -88 23 -88 57c0 21 14 35 35 35c20 0 35 -14 35 -31c0 -10 -3 -14 -13 -23c-1 -1 -3 -2 -3 -4v-1c0 -7 13 -12 31 -12c27 0 47 15 47 34c0 13 -7 22 -28 30c-29 12 -32 13 -42 19c-25 15 -35 34 -35 60 +c0 48 38 78 100 78c51 0 87 -22 87 -54zM1295 235h78l-49 -164c-5 -18 -5 -19 -5 -22c0 -4 4 -8 7 -8c8 0 34 27 52 55l19 -12c-8 -13 -23 -33 -33 -44c-24 -28 -46 -40 -71 -40c-20 0 -36 11 -40 27c-1 4 -2 5 -2 16c-23 -30 -46 -43 -80 -43c-50 0 -85 37 -85 89 +c0 79 68 153 141 153c29 0 49 -10 61 -30zM1190 168c-14 -29 -24 -69 -24 -95c0 -24 11 -39 30 -39s37 16 51 48c15 32 26 72 26 97c0 21 -12 36 -30 36c-21 0 -38 -15 -53 -47z" /> +d="M129 -163h-224v20h61l99 276c5 10 23 54 23 78c0 7 -1 12 -5 15c-2 1 -5 2 -8 2h-4c-9 -2 -21 -10 -27 -19c-12 -16 -22 -48 -26 -61l-18 9c29 83 63 106 96 106c4 0 7 -1 11 -1c35 -5 56 -43 56 -43l2 -4l3 3c17 17 48 43 79 43c4 0 9 -1 13 -2c15 -4 57 -21 57 -88 +c0 -16 -2 -34 -8 -56c-21 -81 -76 -137 -131 -137c-6 0 -13 0 -19 2c-34 9 -44 31 -44 31l-3 7l-58 -161h75v-20zM157 12c3 0 8 0 11 2c25 12 50 59 63 98c6 18 16 54 16 81c0 9 -1 17 -4 23c-2 4 -6 8 -10 9c-2 1 -5 1 -8 1c-6 0 -12 -2 -19 -6c-26 -15 -55 -57 -64 -95 +c-1 -2 -12 -38 -12 -69c0 -19 4 -37 19 -43c2 -1 6 -1 8 -1z" /> +d="M339 44c7 12 18 39 18 39l17 -8c-1 -2 -1 -4 -2 -6c-13 -35 -30 -71 -75 -71c-14 0 -32 6 -40 18c-7 10 -10 22 -10 36s3 29 9 45c21 54 27 94 27 104c0 5 -3 8 -5 9c-1 0 -1 1 -2 1h-1c-1 0 -2 -1 -3 -1c-23 -10 -55 -52 -75 -192c0 -3 -1 -6 -1 -7 +c-2 -11 -7 -12 -11 -12h-55c-3 0 -6 1 -8 3s-2 6 -2 9v4c0 0 15 47 30 96c12 41 22 73 22 90c0 5 -1 9 -3 11c-1 2 -4 3 -6 3c-34 0 -71 -131 -75 -146c-4 -14 -9 -32 -14 -54c-4 -16 -9 -16 -11 -16h-38h-15c-4 0 -6 2 -8 4c-1 2 -2 4 -2 6s1 3 1 5c3 9 40 120 40 121 +c11 32 19 56 19 70c0 8 -2 13 -8 15c-2 1 -3 1 -5 1c-22 0 -39 -54 -39 -54l-15 8c7 22 21 46 27 53c7 8 22 23 47 23c4 0 9 0 14 -1c25 -5 38 -34 38 -34l1 -5l3 4c17 23 38 34 66 34c27 0 43 -35 43 -35l2 -5l2 4c13 17 41 36 67 36c21 0 33 -13 38 -40c1 -4 1 -9 1 -14 +c0 -27 -7 -68 -13 -86c-2 -5 -7 -25 -9 -31c-4 -13 -8 -25 -8 -33c0 -5 2 -9 7 -11c2 -1 3 -1 5 -1c5 0 10 2 15 11z" /> +d="M-85 -60c36 0 45 -26 45 -40c0 -16 -6 -34 -25 -42c-5 -2 -7 -6 -8 -10v-2c0 -4 2 -7 5 -9c4 -3 9 -5 14 -5c6 0 12 2 17 5c24 16 30 45 51 127l3 12c12 46 21 84 29 121c7 33 15 67 25 107v4h-62c-6 0 -10 4 -10 10v22c0 6 4 10 10 10h76v2c22 65 45 109 71 132 +c33 29 64 37 88 37c6 0 12 0 17 -1c32 -5 55 -23 63 -38c7 -12 10 -25 10 -37c0 -6 0 -12 -2 -17c-3 -11 -13 -24 -23 -29c-9 -5 -17 -7 -24 -7s-14 2 -18 4c-10 4 -18 13 -21 22c-1 5 -2 9 -2 14c0 14 5 27 15 35c4 2 6 7 6 12c0 2 0 3 -1 5c-2 4 -5 7 -10 8 +c-1 0 -3 1 -5 1c-5 0 -12 -2 -20 -8c-15 -12 -23 -30 -51 -132v-3h59c6 0 10 -4 10 -10v-22c0 -6 -4 -10 -10 -10h-72v-2c-7 -23 -16 -54 -25 -86c-24 -85 -72 -234 -116 -278c-25 -25 -48 -35 -80 -35c-46 0 -81 29 -81 81c0 27 25 52 52 52z" /> +d="M189 253c22 0 41 -16 41 -39s-8 -37 -19 -46c-6 -5 -17 -9 -29 -9c-9 0 -19 2 -26 10c-4 4 -6 11 -6 17c0 8 3 16 12 23v2s0 2 -3 4c-1 1 -2 1 -3 1c-3 0 -7 -2 -11 -6c-16 -16 -48 -50 -68 -191c0 -3 -1 -6 -1 -7c-2 -11 -7 -12 -11 -12h-55c-3 0 -6 1 -8 3s-2 6 -2 9v4 +l34 109c11 35 20 64 20 81c0 8 -2 14 -7 16c-2 1 -3 1 -5 1c-22 0 -39 -54 -39 -54l-15 8c7 22 21 46 27 53c7 8 21 24 46 24c5 0 10 -1 15 -2c29 -7 38 -41 38 -41l3 4c6 8 13 16 22 22c8 5 27 16 50 16z" /> +d="M159 203c-5 -1 -19 -2 -33 -2h-10c-16 1 -29 4 -34 5c-4 0 -5 0 -7 -4s-16 -39 -19 -46s-4 -12 -10 -12h-11c-5 0 -9 4 -9 8v2c3 7 24 30 34 85c2 11 8 16 14 18c1 0 3 1 5 1c8 0 23 -3 29 -4c13 -2 26 -3 43 -3c9 0 19 0 31 1l48 4h1c2 0 7 -1 8 -9v-6c0 -1 -1 -4 -2 -5 +c-4 -9 -12 -17 -20 -25c-7 -7 -143 -122 -143 -122s-1 -1 -1 -2s0 -1 2 -2c4 -2 22 -9 38 -21s22 -20 27 -23c2 -2 5 -2 7 -2c8 0 17 8 22 16c4 6 5 13 5 20v6c-1 4 -17 8 -17 27c0 13 9 28 26 28c21 0 28 -14 28 -34s-11 -63 -42 -87c-14 -11 -32 -16 -51 -16 +c-23 0 -46 8 -56 25c-6 11 -10 24 -27 24s-23 -18 -29 -28c-5 -7 -16 -20 -30 -20c-4 0 -7 1 -11 3c0 0 -7 5 -7 14c0 6 3 13 13 21c26 21 190 154 191 155s2 2 2 4c0 1 0 1 -1 3s-2 3 -4 3z" /> +d="M114 211l3 4c13 18 41 36 67 36c21 0 33 -13 38 -40c1 -4 1 -9 1 -14c0 -27 -7 -68 -13 -86c-2 -6 -8 -25 -10 -31c-4 -12 -8 -24 -8 -33c0 -6 2 -10 8 -12c2 -1 3 -1 5 -1c5 0 10 2 15 11c7 12 18 39 18 39l17 -8c-1 -2 -1 -3 -2 -5c-13 -35 -31 -72 -76 -72 +c-14 0 -31 6 -39 18c-7 10 -11 24 -11 39c0 13 3 28 9 43c21 54 27 94 27 104v2c-1 4 -2 6 -4 7c-1 0 -2 1 -3 1s-2 -1 -3 -1c-24 -10 -56 -52 -76 -193c0 -3 -1 -6 -1 -7c-2 -11 -6 -12 -11 -12h-55c-3 0 -6 1 -8 3s-2 6 -2 9v4l34 109c11 35 20 64 20 81c0 8 -2 14 -7 16 +c-2 1 -3 1 -5 1c-22 0 -39 -54 -39 -54l-15 8c7 22 21 46 27 53c7 8 21 24 46 24c5 0 10 -1 15 -2c29 -7 38 -41 38 -41z" /> +d="M401 412c1 -2 2 -5 2 -7c0 -4 -4 -9 -7 -11l-70 -40c12 -18 42 -70 44 -133v-6c0 -39 -10 -106 -39 -159c-2 -4 -6 -7 -9 -7c-2 0 -3 1 -4 1c-2 1 -3 3 -3 6c0 2 1 6 2 9c17 45 28 91 28 136c0 52 -18 79 -29 98c-6 10 -17 26 -24 35l-85 -49v-258c0 -33 -26 -69 -68 -92 +c-23 -12 -48 -18 -69 -18c-29 0 -53 10 -64 31c-4 8 -6 17 -6 26c0 33 26 70 68 93c23 12 46 18 67 18c22 0 42 -6 55 -18v208l-74 -43c-2 -1 -5 -2 -7 -2c-7 0 -13 6 -13 13c0 4 3 9 7 11l87 50v251v4c0 4 4 8 8 8c3 0 6 -2 7 -5c0 0 1 -3 2 -7c2 -7 5 -16 5 -17 +c1 -2 11 -38 34 -74c13 -19 49 -66 66 -89l72 41c2 1 4 2 6 2c4 0 9 -2 11 -6zM207 406v-92l68 40c-25 27 -50 43 -68 52z" /> +d="M225 -342l74 -42c3 -2 6 -7 6 -11c0 -7 -6 -12 -13 -12c-2 0 -5 0 -6 1l-75 43c-13 -18 -56 -75 -70 -97c-23 -36 -34 -72 -35 -74c0 -1 -3 -10 -5 -17c-1 -4 -1 -7 -1 -7c-1 -3 -5 -5 -8 -5c-4 0 -8 4 -8 8v4v262l-78 45c-4 2 -6 7 -6 11c0 7 5 13 12 13c2 0 5 -1 7 -2 +l65 -38v237c0 33 26 69 68 92c23 12 48 18 69 18c29 0 53 -10 64 -31c4 -8 6 -17 6 -26c0 -31 -23 -66 -62 -89c26 -51 35 -115 35 -152v-6c-2 -56 -25 -102 -39 -125zM101 -63v-207l91 -52c6 8 12 17 18 27c11 19 30 46 30 98c0 43 -11 87 -26 130c-20 -9 -40 -14 -59 -14 +c-22 0 -41 6 -54 18zM101 -299v-103c20 9 48 29 75 60z" /> +d="M370 221v-6c0 -39 -10 -106 -39 -159c-2 -4 -6 -7 -9 -7c-2 0 -3 1 -4 1c-2 1 -3 3 -3 6c0 2 1 6 2 9c17 45 28 91 28 136c0 52 -18 79 -29 98c-35 60 -80 93 -109 107v-379c0 -33 -26 -69 -68 -92c-23 -12 -48 -18 -69 -18c-29 0 -53 10 -64 31c-4 8 -6 17 -6 26 +c0 33 26 70 68 93c23 12 46 18 67 18c22 0 42 -6 55 -18v488v4c0 4 4 8 8 8c3 0 6 -1 7 -4l2 -8c2 -7 5 -16 5 -17c1 -2 11 -38 34 -74c17 -26 77 -103 75 -103c0 0 46 -60 49 -140z" /> +d="M201 56c4 -8 6 -17 6 -26c0 -31 -23 -66 -62 -89c26 -51 35 -115 35 -152v-6c-3 -80 -49 -140 -49 -140c2 0 -57 -77 -74 -103c-23 -36 -34 -72 -35 -74c0 -1 -3 -10 -5 -17c-1 -4 -1 -7 -1 -7c-1 -3 -5 -5 -8 -5c-4 0 -8 4 -8 8v4v528c0 33 26 69 68 92 +c23 12 48 18 69 18c29 0 53 -10 64 -31zM126 -295c11 19 30 46 30 98c0 43 -11 87 -26 130c-20 -9 -40 -14 -59 -14c-22 0 -41 6 -54 18v-339c29 14 74 47 109 107z" /> +c0 22 24 100 46 166h-44s-14 1 -14 12v13s2 12 14 12h56c13 37 23 65 23 65s1 5 5 8s50 41 52 43s7 5 10 5h9c7 0 14 -7 14 -14v-2l-34 -105h103s8 0 13 -5l8 -8s22 26 61 26zM154 99c9 31 40 123 40 123s0 3 -3 3h-66l-30 -93s-11 -29 -11 -52c0 -11 3 -21 11 -25 +c2 -1 4 -1 7 -1c17 0 44 18 52 45z" /> +d="M366 232c51 0 90 -47 90 -118c0 -75 -64 -114 -121 -114c-34 0 -60 12 -85 35l-22 20l-83 78c-26 23 -41 31 -70 31c-25 0 -45 -20 -45 -45v-1c0 -28 11 -43 30 -43c21 0 26 15 48 15c23 0 41 -16 41 -45c0 -30 -31 -45 -58 -45c-51 0 -91 47 -91 118 +c0 75 64 114 121 114c34 0 61 -12 86 -35l21 -20l83 -78c26 -23 42 -31 71 -31c25 0 44 20 44 45v1c0 28 -11 43 -30 43c-21 0 -26 -15 -48 -15c-23 0 -41 16 -41 45c0 30 32 45 59 45z" /> +d="M90 232c27 0 59 -15 59 -45c0 -29 -18 -45 -41 -45c-22 0 -27 15 -48 15c-19 0 -30 -15 -30 -43v-1c0 -25 19 -45 44 -45c29 0 45 8 71 31l83 78l21 20c25 23 52 35 86 35c57 0 121 -39 121 -114c0 -71 -40 -118 -91 -118c-27 0 -58 15 -58 45c0 29 18 45 41 45 +c22 0 27 -15 48 -15c19 0 30 15 30 43v1c0 25 -20 45 -45 45c-29 0 -44 -8 -70 -31l-83 -78l-22 -20c-25 -23 -51 -35 -85 -35c-57 0 -121 39 -121 114c0 71 39 118 90 118z" /> +d="M232 91c0 -51 -47 -91 -118 -91c-75 0 -114 64 -114 121c0 34 12 61 35 86l20 21l78 83c23 26 31 42 31 71c0 25 -20 44 -45 44h-1c-28 0 -43 -11 -43 -30c0 -21 15 -26 15 -48c0 -23 -16 -41 -45 -41c-30 0 -45 32 -45 59c0 51 47 90 118 90c75 0 114 -64 114 -121 +c0 -34 -12 -60 -35 -85l-20 -22l-78 -83c-23 -26 -31 -41 -31 -70c0 -25 20 -45 45 -45h1c28 0 43 11 43 30c0 21 -15 26 -15 48c0 23 16 41 45 41c30 0 45 -31 45 -58z" /> +d="M232 366c0 -27 -15 -59 -45 -59c-29 0 -45 18 -45 41c0 22 15 27 15 48c0 19 -15 30 -43 30h-1c-25 0 -45 -19 -45 -44c0 -29 8 -45 31 -71l78 -83l20 -21c23 -25 35 -52 35 -86c0 -57 -39 -121 -114 -121c-71 0 -118 40 -118 91c0 27 15 58 45 58c29 0 45 -18 45 -41 +c0 -22 -15 -27 -15 -48c0 -19 15 -30 43 -30h1c25 0 45 20 45 45c0 29 -8 44 -31 70l-78 83l-20 22c-23 25 -35 51 -35 85c0 57 39 121 114 121c71 0 118 -39 118 -90z" /> d="M630 210l24 -14l-118 -189c-2 -4 -7 -7 -11 -7s-10 3 -12 7l-79 126l-78 -126c-2 -4 -7 -7 -11 -7s-10 3 -12 7l-78 124l-74 -124c-2 -4 -7 -7 -11 -7h-1c-4 0 -10 3 -12 7l-74 125l-59 -99l-24 15l117 193v1c2 4 6 6 12 6c4 0 10 -2 12 -6l75 -123l72 121v1 c2 4 8 7 12 7s10 -2 12 -6l79 -127l59 95l18 31c2 4 8 7 12 7c7 0 9 -2 12 -6l79 -127z" /> +d="M597 118l59 95l24 -14l-117 -189c-2 -4 -8 -7 -12 -7s-10 3 -12 7l-78 126l-79 -126c-2 -4 -7 -7 -11 -7s-10 3 -12 7l-78 124l-74 -124c-2 -4 -7 -7 -11 -7s-10 3 -12 7l-75 125l-59 -99l-17 -27c-3 -5 -9 -9 -15 -9c-1 0 -4 1 -5 1c-7 2 -13 10 -13 17v358 +c1 7 7 12 14 12s13 -5 14 -12v-323l115 192c2 4 6 6 12 6c4 0 10 -2 12 -6l75 -123l72 122c2 4 8 7 12 7c2 0 6 -1 8 -2s3 -2 4 -4l79 -127l59 95l19 31c2 4 7 7 11 7c6 0 10 -2 12 -6z" /> +d="M579 115l59 95l24 -14l-117 -189v0c-2 -4 -8 -7 -12 -7v0c-4 0 -9 3 -12 7l-78 126l-78 -126c-3 -4 -8 -7 -12 -7v0v0c-4 0 -10 3 -12 7l-78 124l-74 -124c-2 -4 -7 -7 -11 -7v0c-5 0 -10 3 -12 7l-75 125l-19 -33c-29 -48 -44 -92 -44 -135c0 -35 10 -68 30 -101 +c1 -2 2 -5 2 -7c0 -5 -3 -10 -7 -12c-2 -1 -5 -2 -7 -2c-5 0 -10 3 -12 6c-23 39 -34 77 -34 117c0 47 16 96 48 149l77 126v1c2 4 5 7 10 7h2v0c2 0 6 -1 7 -2h1l1 -1v0h1v-1h1v-1v0c1 0 1 -1 1 -2l75 -122l73 122c2 4 7 7 11 7c3 0 6 -1 8 -2l4 -4l79 -127l59 95h1l18 32 +c2 3 7 6 12 6c6 0 9 -2 11 -6z" /> +c-29 -48 -43 -92 -43 -135c0 -35 10 -68 29 -102c1 -2 2 -5 2 -7c0 -4 -3 -10 -7 -12c-2 -1 -5 -2 -7 -2c-4 0 -10 3 -12 7c-22 38 -34 77 -34 117c0 47 16 95 48 148l76 126l1 2c2 4 6 6 12 6c2 0 5 -1 7 -2h2v-1h1l1 -1v-1s1 -1 1 -2l75 -122l73 123c2 4 8 7 12 7 +c2 0 5 -1 7 -2s3 -3 4 -5l79 -127l3 5v187c0 8 6 14 14 14h9c8 0 14 -6 14 -14v-127l19 30v1l19 31c2 4 8 6 12 6c6 0 8 -2 11 -6z" /> +d="M628 399c22 -38 34 -77 34 -117c0 -47 -16 -95 -48 -148l-77 -128c-2 -4 -8 -6 -12 -6c-2 0 -5 1 -7 2s-5 5 -6 7l-74 120l-73 -122c-2 -4 -8 -7 -12 -7c-2 0 -5 1 -7 2s-3 2 -4 4l-79 127l-59 -95l-19 -31c-2 -4 -8 -7 -12 -7c-6 0 -8 3 -11 7l-79 126l-59 -95l-24 15 +l117 189c2 4 8 6 12 6s10 -2 12 -6l78 -126l78 126c2 4 8 6 12 6s10 -2 12 -6l78 -125l73 125c2 4 8 6 12 6s10 -2 12 -6l75 -126l19 32c29 48 43 92 43 135c0 35 -10 68 -29 102c-1 2 -2 5 -2 7c0 4 3 10 7 12c2 1 5 2 7 2c4 0 10 -3 12 -7z" /> +d="M570 115l59 95l24 -15l-117 -189c-2 -3 -8 -6 -12 -6v0v0c-4 0 -10 3 -12 6l-78 126l-3 -4v-187c0 -7 -6 -14 -14 -14h-9c-8 0 -14 7 -14 14v0v128l-38 -63c-3 -3 -8 -6 -12 -6v0v0c-4 0 -10 3 -12 6l-78 125l-74 -124c-2 -4 -7 -7 -11 -7v0v0c-5 0 -10 3 -12 7l-74 124 +l-59 -98l-24 14l85 142l31 52c3 4 6 7 12 7v0c5 0 10 -3 12 -7l75 -122l73 122c2 4 7 7 12 7c2 0 5 -1 7 -2l4 -4l79 -127l4 6v186v0c0 7 6 13 14 13h9c8 0 14 -6 14 -14v-126l18 30h1l18 31c2 4 7 7 12 7c6 0 9 -2 12 -6z" /> +d="M360 242c3 -5 79 -127 79 -127l78 127c2 3 7 6 12 6c6 0 9 -2 12 -6l78 -127l59 95l24 -14l-117 -189v0c-2 -4 -8 -7 -12 -7v0c-4 0 -9 3 -12 7l-78 126s-76 -123 -78 -126c-3 -4 -7 -7 -11 -7s-9 1 -13 7s-78 124 -78 124s-71 -120 -74 -124c-2 -4 -7 -7 -11 -7 +c-5 0 -10 3 -12 7c-3 4 -74 124 -74 124s-57 -93 -59 -98c-3 -4 -8 -6 -12 -6c-5 0 -8 2 -11 5s-51 64 -51 168c0 67 20 136 65 185c2 2 6 4 9 4c8 0 14 -6 14 -14c0 -3 -1 -7 -3 -9c-40 -44 -58 -106 -58 -166c0 -49 12 -98 34 -134c0 0 103 172 105 176c2 3 6 6 12 6 +s10 -3 12 -6c2 -4 75 -123 75 -123s70 118 73 123c2 4 7 6 11 6c5 0 9 -2 12 -6z" /> +d="M574 0c-5 0 -9 3 -12 7l-78 126l-3 -5v-187c0 -7 -6 -13 -14 -13h-9c-8 0 -14 6 -14 13v128c-3 -6 -35 -58 -38 -62c-4 -5 -8 -7 -12 -7s-9 2 -12 7c-3 4 -70 112 -78 124l-73 -124c-1 -1 -5 -7 -12 -7c-6 0 -10 3 -12 7l-74 124l-59 -97c-1 -1 -2 -3 -4 -4 +c-2 -2 -5 -3 -8 -3c-4 0 -9 2 -11 5c-33 41 -51 104 -51 168c0 67 20 136 65 185c2 2 6 4 9 4c8 0 14 -6 14 -14c0 -3 -1 -7 -3 -9c-40 -44 -58 -106 -58 -166c0 -49 12 -98 34 -134l105 176c2 3 6 6 11 6s10 -1 13 -6l75 -123l73 123c2 3 6 6 10 6c5 0 7 -1 9 -2l4 -4 +l79 -127l4 7v185c0 8 6 14 14 14h9c8 0 14 -7 14 -14v-126l37 61c2 3 7 6 11 6c5 0 10 -2 13 -6l78 -127l59 95l24 -14l-117 -189c-1 -1 -4 -7 -12 -7z" /> +d="M241 117c7 12 71 121 74 125c2 3 7 7 12 7s9 -3 12 -7l74 -125c5 9 53 89 59 98c3 6 8 7 11 7s8 -2 11 -5c43 -49 71 -125 71 -203c0 -62 -17 -125 -56 -180c-3 -3 -7 -5 -11 -5c-3 0 -6 0 -9 2c-3 3 -6 8 -6 12c0 3 1 5 3 8c36 49 52 107 52 164c0 63 -21 125 -53 169 +l-106 -177c-3 -4 -6 -7 -12 -7c-5 0 -9 3 -12 7l-75 122l-73 -122c-2 -5 -6 -7 -12 -7s-9 4 -11 7c-2 2 -72 114 -79 126l-79 -127c-2 -4 -7 -6 -11 -6c-8 0 -15 6 -15 14c0 3 0 4 2 7s135 218 137 221s6 7 12 7s9 -3 12 -7z" /> +d="M260 337c1 -2 2 -6 2 -8c0 -1 -1 -4 -1 -5l-117 -315c-2 -5 -8 -9 -13 -9s-11 4 -13 9l-117 315c0 1 -1 4 -1 5c0 8 6 14 14 14h14c5 0 11 -4 13 -9l90 -252l90 252c2 5 8 9 13 9h14c4 0 10 -3 12 -6z" /> +d="M260 43c-2 -3 -8 -6 -12 -6h-14c-5 0 -11 4 -13 9l-90 252l-90 -252c-2 -5 -8 -9 -13 -9h-14c-8 0 -14 6 -14 14c0 1 1 4 1 5l117 315c2 5 8 9 13 9s11 -4 13 -9l117 -315c0 -1 1 -4 1 -5c0 -2 -1 -6 -2 -8z" /> +d="M91 153c-35 0 -63 -27 -63 -62s28 -63 63 -63s62 28 62 63s-27 62 -62 62zM91 181c50 0 90 -40 90 -90s-40 -91 -90 -91s-91 41 -91 91s41 90 91 90z" /> +d="M91 153v-125c35 0 62 28 62 63s-27 62 -62 62zM91 181c50 0 90 -40 90 -90s-40 -91 -90 -91s-91 41 -91 91s41 90 91 90z" /> +d="M375 121h-107c-7 -68 -64 -121 -134 -121c-74 0 -134 60 -134 135c0 74 60 134 134 134c70 0 127 -53 134 -121h107c8 0 14 -6 14 -13c0 -8 -6 -14 -14 -14zM28 135c0 -59 47 -107 106 -107c54 0 99 40 106 93h-106c-7 0 -14 6 -14 14c0 7 7 13 14 13h106 +c-7 53 -52 93 -106 93c-59 0 -106 -48 -106 -106z" /> +d="M940 8c-23 0 -42 21 -42 46c0 26 19 47 42 47c22 0 41 -21 41 -47c0 -25 -19 -46 -41 -46zM758 61c27 5 40 20 40 84c0 54 -14 88 -29 116c-7 -1 -72 -11 -72 -120c0 -46 23 -81 53 -81c3 0 6 0 8 1zM522 273c-26 0 -44 -32 -44 -90c0 -13 1 -27 3 -42c3 3 31 32 54 57 +c12 13 17 28 17 41c0 19 -11 34 -30 34zM170 352c0 -54 -41 -98 -82 -98s-88 23 -88 98s90 193 244 193c17 0 35 -2 54 -5c111 -20 152 -89 152 -143c0 -28 -11 -52 -28 -64c-14 -10 -30 -15 -46 -15c-34 0 -70 20 -92 65c-3 7 -7 15 -7 22c0 1 -1 1 0 2c0 6 2 11 7 15 +c4 3 7 4 11 4c9 0 18 -9 24 -15c7 -6 25 -23 44 -23c6 0 12 2 18 7c4 3 6 9 6 16c0 25 -25 67 -89 84c-2 -2 -17 -14 -30 -43c-10 -20 -23 -44 -22 -63c0 -7 1 -13 5 -19c15 -21 56 -79 61 -85c2 -4 23 -36 23 -69c0 -8 -2 -15 -5 -22c-15 -37 -50 -63 -54 -66 +c1 0 11 3 43 -31c14 -15 37 -29 56 -29c6 0 11 1 16 4c22 13 31 25 32 26c-5 16 -7 35 -7 56c0 74 31 163 110 163c40 0 74 -32 74 -74c0 -26 -13 -55 -45 -83c-40 -34 -61 -53 -63 -55c1 -5 12 -51 54 -51c40 0 78 34 86 44c-1 7 -1 16 -1 28c0 52 15 142 113 176 +c-4 7 -45 69 -176 119c-7 3 -15 5 -22 8c-2 1 -19 8 -20 22v3c2 8 8 10 15 10h4c7 0 14 -2 21 -3c64 -12 287 -83 311 -289c0 -8 1 -16 1 -24c0 -71 -36 -136 -100 -153c-8 -2 -16 -3 -24 -3c-47 0 -94 34 -109 74c-8 -7 -71 -73 -131 -73c-51 0 -79 67 -82 74 +c-44 -37 -66 -74 -100 -74c-30 0 -43 8 -62 34c-11 15 -22 41 -39 41c-21 0 -36 -28 -48 -40c-14 -16 -41 -38 -63 -38c-11 0 -20 5 -27 18c-3 7 -4 13 -4 19c0 37 60 63 71 70c15 10 49 28 83 57c18 16 26 30 26 43c0 10 -4 19 -10 27c-16 22 -53 65 -70 90 +c-6 9 -9 19 -9 30c0 23 10 43 11 45c15 39 48 98 56 112h-6c-22 0 -94 -7 -143 -75c-20 -26 -27 -50 -27 -68c0 -20 10 -34 22 -35c2 -1 4 -1 6 -1c14 0 25 10 30 32c4 19 14 25 22 24h2c10 0 17 -8 17 -26z" /> +d="M276 407c0 7 3 11 8 15c4 3 7 4 10 4c10 0 19 -9 25 -15c7 -6 25 -22 43 -22c7 0 13 1 19 6c4 3 6 9 6 17c0 24 -25 67 -89 83c-2 -1 -17 -14 -30 -42c-10 -21 -23 -45 -22 -64c0 -7 1 -13 5 -18c15 -22 56 -79 61 -86c2 -3 23 -36 23 -69c0 -7 -2 -15 -5 -22 +c-15 -37 -50 -63 -54 -66c1 0 11 3 43 -31c14 -15 36 -29 56 -29c6 0 16 2 21 5c10 7 23 17 31 23c3 3 7 5 11 5c7 0 12 -4 12 -11c0 -4 -1 -7 -3 -12c-21 -34 -81 -85 -115 -85c-30 0 -43 8 -62 34c-11 16 -22 41 -39 41c-21 0 -36 -28 -48 -40c-15 -16 -41 -38 -63 -37 +c-11 0 -20 4 -27 17c-3 7 -4 13 -4 19c0 37 60 63 71 70c15 10 49 28 83 57c18 16 26 30 26 44c0 9 -4 18 -10 27c-16 21 -53 64 -70 89c-6 9 -9 20 -9 30c0 23 10 43 11 45c15 40 48 98 56 112h-6h-4c-26 0 -93 -10 -140 -75c-19 -26 -26 -50 -26 -68c0 -20 10 -33 22 -35 +c2 -1 4 -1 6 -1c14 1 25 10 30 32c4 19 14 25 22 25h2c10 -1 17 -9 17 -27c0 -54 -41 -98 -82 -98s-88 23 -88 98s90 193 243 193c18 0 36 -1 55 -5c111 -20 152 -88 152 -143c0 -28 -11 -52 -28 -64c-14 -10 -30 -15 -47 -15c-33 0 -69 21 -92 66c0 1 -7 14 -7 23z" /> +c11 13 17 28 17 41c0 19 -11 34 -30 34z" /> +d="M134 36c-19 24 -27 50 -28 70c-1 5 -1 13 -1 23c0 48 13 139 113 173c0 0 -45 69 -176 119c-7 3 -15 6 -23 8c0 0 -21 9 -19 25c1 8 7 11 15 11c7 0 16 -2 24 -4c64 -11 287 -82 311 -289c1 -8 1 -16 1 -24c0 -71 -36 -136 -100 -153c-10 -3 -20 -4 -29 -4 +c-40 0 -70 22 -88 45zM232 61c26 5 39 20 39 84c0 54 -14 88 -29 116c0 0 -72 -11 -72 -120c0 -46 24 -81 53 -81c3 0 6 0 9 1z" /> +d="M69 69c-14 14 -21 30 -21 45c0 9 3 18 9 24c5 5 14 8 22 8c6 0 11 -1 16 -3c6 -2 12 -4 16 -4s8 2 13 7l25 24c7 7 3 19 -1 28v1c0 1 -1 0 -1 1c-4 9 -11 21 -20 21h-34c-15 0 -15 -7 -22 -19s-18 -23 -31 -23c-22 0 -40 25 -40 57s18 58 40 58c13 0 24 -11 31 -23 +s7 -20 22 -20h34c9 0 16 12 20 21c0 1 1 1 1 2c4 9 8 22 1 29l-24 24c-5 5 -9 6 -13 6c-5 0 -10 -2 -17 -4c-5 -1 -10 -2 -15 -2c-9 0 -17 2 -23 8s-9 15 -9 24c0 15 7 31 21 45s30 21 45 21c9 0 18 -3 24 -9c5 -5 8 -14 8 -22c0 -6 -1 -11 -3 -16c-2 -6 -4 -11 -4 -16 +s2 -9 7 -14l24 -24c7 -7 19 -3 28 1h1l1 1c9 4 21 11 21 20v34c0 15 -7 15 -19 22s-23 18 -23 31c0 22 25 40 57 40s58 -18 58 -40c0 -13 -11 -24 -23 -31s-20 -7 -20 -22v-34c0 -9 12 -16 21 -20c1 0 1 -1 2 -1c9 -4 22 -8 29 -1l24 24c5 5 6 9 6 13c0 5 -2 10 -4 17 +c-1 5 -2 10 -2 15c0 9 2 17 8 23s14 9 23 9c15 0 32 -8 46 -22s21 -31 21 -45c0 -9 -3 -17 -9 -23s-14 -8 -23 -8c-5 0 -10 1 -15 2c-7 2 -12 4 -17 4c-4 0 -8 -1 -13 -6l-24 -24c-7 -7 -3 -20 1 -29c0 -1 1 -1 1 -2c4 -9 11 -21 20 -21h34c15 0 15 8 22 20s18 23 31 23 +c22 0 40 -26 40 -58s-18 -57 -40 -57c-13 0 -24 11 -31 23s-7 19 -22 19h-34c-9 0 -16 -12 -20 -21c0 -1 -1 -1 -1 -1v-1c-4 -9 -8 -21 -1 -28l24 -24c5 -5 9 -7 14 -7s10 2 16 4c5 2 10 3 16 3c8 0 17 -3 22 -8c6 -6 9 -15 9 -24c0 -15 -7 -31 -21 -45s-30 -21 -45 -21 +c-9 0 -18 3 -24 9s-8 14 -8 23c0 5 1 10 2 15c2 7 4 12 4 17c0 4 -1 7 -6 12l-24 25c-7 7 -20 3 -29 -1c-1 0 -1 -1 -2 -1c-9 -4 -21 -11 -21 -20v-34c0 -15 8 -15 20 -22s23 -18 23 -31c0 -22 -26 -40 -58 -40s-57 18 -57 40c0 13 11 24 23 31s19 7 19 22v34 +c0 9 -12 16 -21 20l-1 1h-1c-9 4 -21 8 -28 1l-24 -25c-5 -5 -7 -9 -7 -13s2 -10 4 -16c2 -5 3 -10 3 -16c0 -8 -3 -17 -8 -22c-6 -6 -15 -9 -24 -9c-15 0 -31 7 -45 21zM192 192c10 -10 30 -19 44 -19s35 9 45 19s19 30 19 44c0 35 -29 64 -64 64s-63 -29 -63 -64 +c0 -14 9 -34 19 -44z" /> +d="M273 233c0 -128 -79 -240 -170 -240c-62 0 -103 51 -103 129c0 60 21 125 54 170c35 47 75 71 119 71c61 0 100 -50 100 -130zM107 241c-17 -61 -33 -150 -33 -186c0 -22 12 -36 30 -36c24 0 40 23 60 89c18 58 34 146 34 186c0 27 -11 43 -28 43c-24 0 -45 -32 -63 -96z +" /> +d="M224 168c17 -12 29 -36 29 -60c0 -66 -60 -116 -142 -116c-68 0 -111 32 -111 83c0 31 19 52 47 52c25 0 41 -16 41 -39c0 -18 -9 -30 -26 -36c-9 -3 -11 -4 -11 -10c0 -12 22 -24 44 -24s44 12 55 31c12 21 19 50 19 77c0 31 -11 48 -34 48c-5 0 -5 0 -16 -3 +c-3 -1 -9 -2 -12 -2c-11 0 -18 6 -18 17s7 18 17 18c4 0 7 -1 13 -3c7 -3 11 -3 17 -3c15 0 25 5 36 18c18 20 27 44 27 69c0 31 -17 50 -45 50c-21 0 -42 -10 -42 -21c0 -3 0 -3 9 -10c11 -9 16 -19 16 -31c0 -21 -17 -37 -39 -37c-25 0 -42 18 -42 45c0 46 50 81 114 81 +c65 0 109 -34 109 -83c0 -27 -14 -54 -37 -70c-17 -12 -32 -17 -63 -24c25 -6 35 -10 45 -17z" /> +d="M158 224c55 0 94 -37 94 -91c0 -75 -64 -138 -142 -138c-67 0 -110 48 -110 126c0 60 22 125 59 173s81 71 134 71c50 0 86 -27 86 -64c0 -26 -17 -43 -43 -43c-23 0 -41 15 -41 36c0 10 4 19 12 28c3 4 4 5 4 8c0 5 -8 9 -18 9c-19 0 -38 -13 -55 -39 +c-13 -20 -24 -46 -38 -97c20 16 34 21 58 21zM90 152c-8 -20 -12 -51 -12 -78c0 -36 11 -55 33 -55c17 0 32 12 41 34c10 26 17 59 17 89c0 33 -12 51 -33 51c-20 0 -36 -13 -46 -41z" /> +d="M271 365l1 -19c-95 -163 -117 -209 -131 -289c-5 -24 -6 -30 -12 -40c-8 -13 -24 -22 -42 -22c-27 0 -46 17 -46 42c0 34 13 52 149 228l19 25h-109h-4c-29 0 -43 -12 -64 -50l-8 -15l-24 7l53 133c42 -5 63 -5 97 -5c36 0 64 1 121 5z" /> +d="M260 109c0 -67 -60 -114 -145 -114c-69 0 -115 34 -115 84c0 27 14 53 38 71c13 10 28 19 50 27c-27 24 -38 46 -38 77c0 65 53 111 129 111c62 0 104 -33 104 -82c0 -39 -23 -65 -74 -84c33 -21 51 -53 51 -90zM62 81c0 -37 26 -61 64 -61s67 26 67 59 +c0 25 -14 43 -46 61c-4 3 -4 2 -24 12c-6 3 -7 4 -15 8c-30 -17 -46 -46 -46 -79zM226 282c0 36 -21 57 -55 57s-58 -23 -58 -54c0 -22 9 -34 35 -50c7 -4 12 -8 40 -22c28 21 38 40 38 69z" /> +d="M121 141c-55 0 -94 37 -94 91c0 75 65 138 143 138c67 0 109 -48 109 -126c0 -60 -22 -125 -59 -173s-82 -71 -134 -71c-50 0 -86 27 -86 64c0 26 18 43 44 43c23 0 40 -15 40 -36c0 -10 -4 -18 -12 -27c-3 -4 -4 -6 -4 -9c0 -5 8 -9 18 -9c19 0 38 13 55 39 +c13 20 24 46 38 97c-20 -16 -34 -21 -58 -21zM127 313c-10 -25 -16 -59 -16 -89c0 -33 11 -52 32 -52c20 0 36 13 46 41c8 20 13 52 13 79c0 36 -11 55 -33 55c-18 0 -33 -12 -42 -34z" /> +d="M330 -9l-154 -120c-2 -2 -5 -3 -9 -3c-3 0 -6 1 -8 3l-154 120c-3 2 -5 6 -5 9c0 4 2 7 5 9l154 121c2 2 5 3 8 3c4 0 7 -1 9 -3l154 -121c3 -2 5 -6 5 -9c0 -4 -2 -7 -5 -9zM197 -80l74 57l-133 104l-74 -58z" /> +d="M330 -10l-154 -119c-2 -2 -5 -3 -9 -3c-3 0 -6 1 -8 3l-154 119c-3 3 -5 6 -5 10c0 3 2 7 5 9l154 121c2 2 5 3 8 3c4 0 7 -1 9 -3l154 -121c3 -2 5 -6 5 -10c0 -3 -2 -6 -5 -9z" /> @@ -1243,260 +1293,266 @@ d="M-18 85c0 0 6 7 14 14c3 3 7 4 10 4s5 -1 7 -3l11 -11c2 -2 4 -3 6 -3c4 0 6 3 6 s-64 -54 -74 -63c-11 -8 -22 -11 -32 -11c-21 0 -40 12 -48 21l-48 48c-3 3 -4 6 -4 8c0 5 4 8 4 8z" /> +c5 6 15 16 21 21c13 11 35 21 62 21h10l-65 85c-3 4 -4 11 -4 15c0 14 10 25 24 25c4 0 10 -3 14 -5z" /> +d="M249 68l-208 -147c-4 -2 -10 -5 -14 -5c-14 0 -24 11 -24 25c0 4 1 11 4 15l65 85h-10c-27 0 -49 10 -62 21c-6 5 -16 15 -21 21c-2 3 -3 7 -3 9c0 5 3 7 3 7c4 4 10 11 14 14s7 4 10 4s5 -1 7 -2c7 -7 15 -10 23 -10c18 0 34 14 34 30c0 5 -2 10 -5 14l-54 71 +c-3 4 -5 10 -5 15c0 13 11 24 24 24c4 0 10 -2 14 -4l208 -147c6 -4 10 -13 10 -20s-4 -16 -10 -20z" /> +d="M425 863v-809v0c-2 -66 -55 -141 -140 -187c-46 -25 -95 -39 -141 -39c-8 0 -15 1 -23 2c-51 5 -89 26 -108 62c-9 17 -13 34 -13 53c0 66 54 143 140 190c46 25 95 38 141 38c8 0 15 -1 22 -1c26 -3 49 -10 67 -20v711h55zM357 26c13 12 21 29 21 45c0 8 -2 16 -6 23 +c-10 17 -25 25 -44 25c-6 0 -13 -1 -20 -3c0 -1 -1 -1 -3 -1c-31 -8 -78 -30 -125 -58c-47 -27 -91 -58 -112 -82c-14 -15 -21 -30 -21 -45c0 -8 2 -16 6 -23c10 -15 27 -23 46 -23c7 0 14 1 21 3c30 8 78 30 126 57c47 28 90 59 111 82z" /> +d="M424 862v-808v0c0 -66 -53 -143 -139 -189c-47 -25 -96 -37 -140 -37c-59 0 -109 22 -132 64c-9 17 -14 35 -14 55c1 23 7 48 20 73c24 45 67 86 120 115c46 25 95 38 140 38c8 0 15 -1 22 -1c27 -3 50 -10 69 -21v712z" /> +d="M711 263v-25c0 -67 -8 -176 -53 -287v-1c-4 -9 -8 -20 -18 -20c-2 0 -4 1 -6 2c-8 3 -10 9 -10 16c0 6 1 12 3 18c22 86 33 155 33 258c0 189 -162 314 -235 360v-530v0v0v0c0 -66 -53 -143 -139 -189c-47 -25 -96 -37 -140 -37c-60 0 -110 22 -133 64 +c-9 17 -13 34 -13 53c0 24 7 49 20 74c24 46 67 87 120 115c45 25 94 38 140 38c7 0 15 -1 22 -1c26 -3 49 -10 68 -21v495v47v171v15v2c0 9 7 19 18 20c2 1 3 1 4 1c15 0 19 -10 20 -14c0 -1 1 -3 1 -7c3 -11 10 -38 11 -41c0 0 1 -1 1 -3c17 -50 24 -71 49 -114 +c22 -39 35 -62 77 -114c0 0 36 -45 68 -88c32 -44 86 -121 92 -257z" /> +d="M563 320c33 -31 67 -67 97 -111c0 251 -168 352 -235 400c0 -50 17 -174 138 -289zM700 126c10 -35 11 -64 11 -89c0 -69 -7 -113 -29 -171c0 -1 -5 -18 -20 -18c-2 0 -5 0 -7 1c-10 3 -12 12 -12 19c0 6 1 11 2 14c12 41 17 78 17 111c0 66 -21 117 -53 163 +c-42 58 -124 134 -184 159v-261c0 -123 -154 -226 -279 -226c-26 0 -146 7 -146 118c0 110 144 226 280 226c57 0 87 -20 91 -22c0 74 -1 747 -1 756c0 8 7 20 20 20c14 0 20 -6 22 -14c20 -92 59 -184 139 -279s160 -201 160 -345c0 -117 -10 -158 -11 -162z" /> +d="M156 224c21 -27 31 -58 31 -101c0 -73 -40 -128 -93 -128s-94 55 -94 130s40 130 94 130c24 0 45 -11 62 -31zM68 214c-3 -12 -6 -51 -6 -89c0 -43 3 -81 8 -93c4 -12 12 -18 23 -18s21 7 25 22c3 12 6 51 6 88c0 45 -3 82 -7 94c-5 12 -13 18 -24 18 +c-12 0 -21 -7 -25 -22z" /> +d="M104 255v-203c0 -22 0 -24 2 -27c3 -4 10 -6 30 -6h11v-19h-144v20h12c19 0 26 1 30 5c2 2 2 3 2 9v18v128v10c0 19 -4 20 -32 20h-15v20c43 1 69 8 91 25h13z" /> +d="M155 122c17 -10 27 -30 27 -52c0 -23 -11 -45 -27 -57c-17 -11 -42 -18 -68 -18c-52 0 -87 25 -87 61c0 20 13 34 32 34c18 0 31 -12 31 -29c0 -11 -2 -16 -13 -26c-2 -2 -3 -4 -3 -6c0 -8 16 -15 31 -15c26 0 41 20 41 57c0 33 -11 51 -33 51c-2 0 -5 -1 -13 -1 +c-6 -1 -8 -1 -11 -1c-7 0 -13 5 -13 13c0 9 5 12 14 12c4 0 6 0 14 -2c3 -1 9 -2 12 -2c18 0 28 19 28 51c0 28 -13 44 -36 44c-14 0 -27 -7 -27 -13c0 -2 1 -3 3 -5c10 -9 14 -17 14 -27c0 -17 -12 -28 -30 -28c-17 0 -32 14 -32 33c0 13 7 28 19 39c15 13 36 20 63 20 +c51 0 84 -26 84 -64c0 -21 -10 -39 -29 -49c-8 -4 -14 -6 -28 -9c19 -3 27 -5 37 -11z" /> +d="M154 89h36v-24h-36v-13c0 -22 0 -23 3 -27c2 -4 10 -5 25 -6h4v-19h-123v20h4c17 0 25 1 28 4c2 3 2 4 2 10v18v13h-97v27l131 163h25c-1 -26 -2 -49 -2 -55v-111zM97 89v90l-71 -90h71z" /> +d="M19 137l2 26c4 59 4 62 6 92c22 -5 40 -6 70 -6s52 2 65 5c2 0 4 1 6 1s3 -1 3 -4c0 -8 -6 -21 -13 -30c-13 -18 -38 -28 -67 -28c-14 0 -28 2 -46 5l-5 -46c24 11 35 14 52 14c51 0 89 -35 89 -82c0 -53 -40 -89 -99 -89c-50 0 -82 23 -82 59c0 23 14 37 35 37 +c18 0 30 -11 30 -29c0 -13 -5 -19 -19 -26c-4 -2 -5 -3 -5 -5c0 -8 16 -16 32 -16c29 0 44 24 44 67c0 39 -14 59 -40 59h-1c-12 0 -30 -6 -39 -13v-6c0 -8 -6 -15 -14 -15v0h-1c-7 0 -13 6 -13 13v1c0 5 1 7 10 16z" /> +d="M115 154c42 0 72 -30 72 -74c0 -49 -38 -85 -91 -85c-30 0 -54 11 -72 33c-17 21 -24 46 -24 82c0 43 10 76 31 104s47 41 82 41c41 0 67 -19 67 -50c0 -20 -13 -33 -33 -33c-19 0 -32 12 -32 28c0 6 3 16 7 21c3 3 3 5 3 7c0 5 -6 8 -15 8c-19 0 -32 -16 -41 -45 +c-3 -15 -7 -44 -7 -61c15 17 29 24 53 24zM67 102c-2 -8 -3 -19 -3 -32c0 -37 11 -58 31 -58c19 0 29 23 29 64c0 33 -9 50 -28 51c-14 1 -25 -9 -29 -25z" /> +d="M180 255v-15c-51 -109 -60 -136 -60 -196v-9c0 -26 -13 -40 -36 -40c-20 0 -33 14 -33 35c0 12 3 23 10 39c9 20 9 20 37 64l18 28l24 36h-14l-33 -1c-9 0 -31 1 -41 1c-2 1 -4 1 -6 1v0c-13 0 -16 -5 -23 -37l-3 -16l-20 2l12 108c39 -4 52 -5 87 -5c37 0 57 1 81 5z +" /> +d="M187 78c0 -50 -39 -83 -97 -83c-55 0 -90 25 -90 64c0 21 10 37 28 47c6 3 11 4 22 8c-29 15 -42 36 -42 64c0 47 36 77 92 77c47 0 78 -22 78 -55c0 -17 -8 -32 -22 -42c-5 -3 -10 -6 -20 -10c34 -14 51 -37 51 -70zM47 60c0 -29 18 -46 47 -46s48 17 48 42 +c0 18 -8 28 -31 36c-9 3 -27 8 -42 12c-16 -13 -22 -25 -22 -44zM133 195c0 25 -15 41 -39 41c-23 0 -39 -15 -39 -34c0 -16 11 -31 27 -37c7 -2 18 -6 33 -9c12 9 18 23 18 39z" /> +d="M71 95c-41 0 -71 31 -71 74c0 50 38 86 90 86c30 0 56 -13 75 -38c15 -20 22 -45 22 -78c0 -40 -9 -74 -27 -100c-19 -29 -49 -44 -86 -44c-41 0 -67 18 -67 46c0 21 15 36 34 36c18 0 31 -12 31 -29c0 -8 -1 -10 -8 -21c-1 -1 -2 -4 -2 -6c0 -5 4 -7 12 -7 +c21 0 34 12 43 38c5 17 7 35 7 67c-15 -17 -31 -24 -53 -24zM62 177c0 -18 2 -31 6 -40c4 -8 15 -15 24 -15c19 0 30 20 30 52c0 17 -3 36 -8 46c-4 11 -12 16 -21 16c-20 0 -31 -20 -31 -59z" /> +d="M191 163c0 -90 -55 -168 -119 -168c-44 0 -72 36 -72 90c0 42 15 88 38 119c25 34 52 50 83 50c43 0 70 -35 70 -91zM75 169c-12 -43 -23 -105 -23 -131c0 -15 8 -25 21 -25c16 0 27 16 41 63c13 40 24 102 24 130c0 19 -7 30 -19 30c-17 0 -31 -22 -44 -67z" /> +d="M167 254l-54 -202c-4 -12 -5 -19 -5 -23c0 -8 5 -10 28 -10h18l-3 -19h-151l3 19h18c17 1 24 2 28 5c2 2 3 4 4 10c1 1 2 7 5 18l36 135c2 4 3 10 3 14c0 7 -4 9 -16 9h-32l4 18c37 2 83 14 99 26h15z" /> +d="M179 90l16 -6l-31 -84h-164v3c0 14 17 34 63 74c35 31 54 48 64 62c14 17 22 37 22 55c0 22 -16 38 -39 38c-20 0 -38 -13 -38 -25c0 -6 2 -7 14 -13c11 -5 18 -14 18 -26c0 -17 -11 -29 -29 -29c-20 0 -35 17 -35 40c0 43 38 75 90 75c23 0 43 -6 56 -17s22 -31 22 -49 +c0 -25 -15 -49 -44 -71c-7 -6 -7 -6 -69 -43c-20 -13 -30 -20 -36 -25h71c25 0 32 5 46 34z" /> +d="M156 118c12 -9 21 -26 21 -42c0 -47 -42 -81 -100 -81c-48 0 -77 22 -77 58c0 21 13 36 33 36c17 0 29 -11 29 -27c0 -13 -7 -22 -19 -25c-6 -2 -7 -3 -7 -7c0 -9 15 -17 30 -17c14 0 31 10 39 22c8 14 13 34 13 53c0 22 -8 34 -24 34c-3 0 -3 0 -11 -2 +c-2 -1 -6 -2 -8 -2v0c-8 0 -13 5 -13 12c0 8 5 12 12 12v0c3 0 7 0 9 -1c3 -1 8 -2 11 -2h1c10 0 18 3 25 12c11 11 19 33 19 48c0 22 -11 35 -31 35c-15 0 -30 -7 -30 -15c0 -2 0 -2 6 -7c7 -5 12 -13 12 -21c0 -15 -12 -26 -28 -26c-17 0 -29 13 -29 31c0 32 35 57 80 57 +c44 0 76 -23 76 -58c0 -19 -10 -38 -26 -49c-12 -8 -22 -12 -44 -17c18 -4 24 -6 31 -11z" /> +d="M111 155c38 0 65 -26 65 -64c0 -52 -45 -96 -99 -96c-48 0 -77 34 -77 88c0 42 15 87 41 121s57 50 94 50c34 0 60 -19 60 -45c0 -18 -13 -30 -30 -30s-29 11 -29 25c0 7 3 13 8 19c2 3 3 4 3 6c0 4 -5 7 -12 7c-14 0 -27 -9 -38 -27c-9 -14 -17 -33 -27 -68 +c14 11 24 14 41 14zM63 105c-5 -14 -9 -36 -9 -55c0 -25 8 -38 23 -38c12 0 23 8 29 23c8 18 12 42 12 63c0 23 -8 36 -23 36s-25 -9 -32 -29z" /> +d="M190 254v-14c-66 -113 -81 -146 -91 -201c-4 -17 -5 -22 -9 -29c-6 -9 -17 -15 -29 -15c-19 0 -32 12 -32 29c0 24 8 37 103 160l14 18h-76c-22 0 -32 -8 -48 -35l-6 -11l-16 5l37 93c30 -3 44 -4 68 -4c25 0 45 1 85 4z" /> +d="M182 75c0 -47 -42 -80 -101 -80c-49 0 -81 23 -81 59c0 18 10 37 27 50c9 7 20 13 35 18c-19 17 -27 32 -27 54c0 46 38 78 90 78c44 0 73 -23 73 -57c0 -27 -16 -46 -52 -59c23 -15 36 -38 36 -63zM44 55c0 -25 17 -43 44 -43s47 18 47 42c0 17 -10 30 -32 42 +c-3 2 -3 2 -17 9c-4 2 -5 3 -10 6c-21 -13 -32 -32 -32 -56zM158 196c0 25 -14 40 -38 40s-41 -16 -41 -38c0 -15 6 -24 24 -35c5 -3 9 -5 28 -15c20 14 27 28 27 48z" /> +d="M84 94c-38 0 -65 26 -65 64c0 52 45 96 100 96c47 0 76 -34 76 -88c0 -42 -15 -87 -41 -121s-57 -50 -94 -50c-34 0 -60 19 -60 45c0 18 13 30 31 30c16 0 28 -11 28 -25c0 -7 -3 -13 -8 -19c-2 -3 -3 -4 -3 -6c0 -4 5 -7 12 -7c14 0 26 9 38 27c9 14 17 33 27 68 +c-14 -11 -24 -14 -41 -14zM89 214c-7 -18 -12 -42 -12 -63c0 -23 9 -36 23 -36c15 0 25 9 32 29c5 14 9 36 9 55c0 25 -8 39 -23 39c-12 0 -23 -9 -29 -24z" /> +d="M31 500c26 -19 59 -58 59 -130c0 -90 -49 -183 -49 -239c0 -75 43 -117 45 -119c1 -1 1 -3 2 -4c0 -1 0 -2 -1 -2c-1 -1 -1 -1 -2 -1s-3 1 -5 2c-1 1 -79 56 -79 137c0 89 45 150 45 266c0 21 -8 57 -44 87c-1 1 -2 2 -2 3s1 2 2 3c36 30 44 66 44 87 +c0 116 -45 177 -45 266c0 81 78 135 79 137c2 1 4 2 5 2s1 0 2 -1c0 0 1 -1 1 -2s-1 -3 -2 -4c-2 -2 -45 -44 -45 -119c0 -56 49 -149 49 -239c0 -72 -33 -111 -59 -130z" /> +d="M7 500c13 -19 37 -57 37 -130c0 -91 -28 -184 -28 -240c0 -61 26 -118 27 -120c1 -1 1 -2 1 -3s0 -1 -1 -2s-3 0 -4 1s-39 57 -39 138c0 89 25 150 25 265c0 22 -6 57 -24 87c0 1 -1 2 -1 4c0 1 1 2 1 3c18 30 24 66 24 88c0 115 -25 176 -25 265c0 81 38 135 39 137l2 2 +c1 0 2 -1 2 -1c1 0 1 -1 1 -2c0 0 0 -1 -1 -2c-1 -2 -27 -59 -27 -120c0 -56 28 -149 28 -240c0 -72 -24 -111 -37 -130z" /> +d="M36 14c1 -1 2 -3 2 -4s0 -2 -1 -3c0 -1 -2 -2 -3 -2s-2 0 -2 1c-1 1 -18 17 -18 60v347c0 22 -1 56 -13 85h-1v0v1v0v1v1v0v0v1v0h1c12 29 13 63 13 85v347c0 43 16 59 18 60c0 1 1 1 2 1s2 -1 3 -2s1 -2 1 -3s-1 -3 -2 -4c0 0 -14 -15 -14 -52v-347v-10 +c0 -17 -1 -48 -13 -77c12 -29 13 -60 13 -77v-10v-347c0 -37 14 -51 14 -52z" /> +d="M322 212c2 0 4 -1 5 -3c3 -4 63 -88 63 -209s-60 -203 -63 -207c-1 -1 -2 -2 -4 -2c-2 -1 -3 0 -5 1s-3 3 -3 5c0 1 0 2 1 3c34 67 46 134 46 193c0 118 -46 207 -46 208c-1 2 -1 3 -1 4c0 2 1 4 3 5c1 1 2 1 4 2zM307 79c1 -8 2 -16 2 -25c0 -41 -15 -90 -52 -133 +c-54 -61 -118 -93 -122 -95c-2 -1 -6 -2 -8 -2c-8 0 -14 6 -14 14l-5 601c0 8 6 14 14 14h12c8 0 14 -6 14 -14l-4 -321c5 6 33 37 83 37s74 -37 80 -76zM239 40v11c0 21 -3 55 -39 55c-40 0 -54 -29 -56 -38l-3 -195c18 15 52 42 69 68c25 38 29 84 29 99zM68 -212 +c-2 0 -4 1 -5 3c-3 4 -63 88 -63 209s60 203 63 207c1 1 2 2 4 2c2 1 3 0 5 -1s3 -3 3 -5c0 -1 0 -2 -1 -3c-34 -67 -46 -134 -46 -193c0 -118 46 -207 46 -208c1 -2 1 -3 1 -4c0 -2 -1 -4 -3 -5c-1 -1 -2 -1 -4 -2z" /> +d="M274 183c3 -2 5 -7 5 -11v-495h-27v175l-126 -35h-4c-8 0 -14 5 -14 13v495h28v-175l126 35c1 0 3 1 4 1c3 0 6 -1 8 -3zM136 -97l116 32v165l-116 -33v-164zM318 212c2 0 4 -1 5 -3c3 -4 63 -88 63 -209s-60 -203 -63 -207c-1 -1 -2 -2 -4 -2c-2 -1 -3 0 -5 1s-3 3 -3 5 +c0 1 0 2 1 3c34 67 46 134 46 193c0 118 -46 207 -46 208c-1 2 -1 3 -1 4c0 2 1 4 3 5c1 1 2 1 4 2zM68 -212c-2 0 -4 1 -5 3c-3 4 -63 88 -63 209s60 203 63 207c1 1 2 2 4 2c2 1 3 0 5 -1s3 -3 3 -5c0 -1 0 -2 -1 -3c-34 -67 -46 -134 -46 -193c0 -118 46 -207 46 -208 +c1 -2 1 -3 1 -4c0 -2 -1 -4 -3 -5c-1 -1 -2 -1 -4 -2z" /> +d="M340 105l-38 -7v-165l33 7h2c8 0 14 -6 14 -14v-59c0 -6 -5 -13 -11 -14l-38 -7v-147h-28v141l-89 -18v-155h-28v149l-33 -7h-3c-8 0 -14 6 -14 14v58c0 6 5 13 11 14l39 8v165l-33 -7h-3c-8 0 -14 6 -14 14v-2v58v2c0 6 5 13 11 14l39 8v147h28v-141l89 18v155h28v-149 +l33 7h2c8 0 14 -6 14 -14v-59c0 -6 -5 -13 -11 -14zM185 74v-166l89 19v165zM390 212c2 0 4 -1 5 -3c3 -4 63 -88 63 -209s-60 -203 -63 -207c-1 -1 -2 -2 -4 -2c-2 -1 -3 0 -5 1s-3 3 -3 5c0 1 0 2 1 3c34 67 46 134 46 193c0 118 -46 207 -46 208c-1 2 -1 3 -1 4 +c0 2 1 4 3 5c1 1 2 1 4 2zM68 -212c-2 0 -4 1 -5 3c-3 4 -63 88 -63 209s60 203 63 207c1 1 2 2 4 2c2 1 3 0 5 -1s3 -3 3 -5c0 -1 0 -2 -1 -3c-34 -67 -46 -134 -46 -193c0 -118 46 -207 46 -208c1 -2 1 -3 1 -4c0 -2 -1 -4 -3 -5c-1 -1 -2 -1 -4 -2z" /> +d="M341 51h-42l-50 -50v-2l50 -50h42h1h10c8 0 14 -5 14 -13v-59c0 -8 -6 -14 -14 -14h-59c-8 0 -14 6 -14 14v10v1v42l-49 48h-3l-50 -48v-53c0 -8 -5 -14 -13 -14h-59c-8 0 -14 6 -14 14v59c0 8 6 13 14 13h10h1h42l49 50v3l-49 49h-42h-1h-10c-8 0 -14 6 -14 14v59 +c0 8 6 14 14 14h59c8 0 13 -6 13 -14v-53l50 -50h3l49 50v41v12c0 8 6 14 14 14h59c8 0 14 -6 14 -14v-59c0 -8 -6 -14 -14 -14h-11zM389 213c2 0 4 -1 5 -3c3 -4 63 -88 63 -209s-60 -203 -63 -207c-1 -1 -2 -2 -4 -2c-2 -1 -3 0 -5 1s-3 3 -3 5c0 1 0 2 1 3 +c34 67 46 134 46 193c0 118 -46 207 -46 208c-1 2 -1 3 -1 4c0 2 1 4 3 5c1 1 2 1 4 2zM68 -212c-2 0 -4 1 -5 3c-3 4 -63 88 -63 209s60 203 63 207c1 1 2 2 4 2c2 1 3 0 5 -1s3 -3 3 -5c0 -1 0 -2 -1 -3c-34 -67 -46 -134 -46 -193c0 -118 46 -207 46 -208c1 -2 1 -3 1 -4 +c0 -2 -1 -4 -3 -5c-1 -1 -2 -1 -4 -2z" /> +d="M477 80c1 -8 2 -16 2 -25c0 -41 -15 -91 -53 -134c-54 -61 -119 -93 -123 -95c-2 -1 -6 -3 -8 -3c-8 0 -14 6 -14 14l-1 114c-6 -9 -15 -23 -22 -31c-54 -61 -119 -92 -123 -94c-2 -1 -6 -3 -8 -3c-8 0 -14 6 -14 14l-5 602c0 8 6 14 14 14h12c8 0 14 -6 14 -14l-4 -321 +c5 6 34 37 84 37c22 0 38 -7 51 -17l-3 301c0 8 6 14 14 14h12c8 0 14 -6 14 -14l-4 -320c5 6 34 36 84 36c51 0 75 -36 81 -75zM240 40v11c0 21 -3 55 -39 55c-40 0 -55 -29 -57 -38l-3 -196c19 15 53 42 70 68c25 38 29 85 29 100zM408 40v11c0 21 -3 55 -39 55 +c-40 0 -55 -29 -57 -38l-3 -196c19 15 53 42 70 68c25 38 29 85 29 100zM492 212c2 0 4 -1 5 -3c3 -4 63 -88 63 -209s-60 -203 -63 -207c-1 -1 -2 -2 -4 -2c-2 -1 -3 0 -5 1s-3 3 -3 5c0 1 0 2 1 3c34 67 46 134 46 193c0 118 -46 207 -46 208c-1 2 -1 3 -1 4c0 2 1 4 3 5 +c1 1 2 1 4 2zM68 -212c-2 0 -4 1 -5 3c-3 4 -63 88 -63 209s60 203 63 207c1 1 2 2 4 2c2 1 3 0 5 -1s3 -3 3 -5c0 -1 0 -2 -1 -3c-34 -67 -46 -134 -46 -193c0 -118 46 -207 46 -208c1 -2 1 -3 1 -4c0 -2 -1 -4 -3 -5c-1 -1 -2 -1 -4 -2z" /> +d="M-149 253h300v-65l-226 -160h226v-56v-9l-226 -160h226v-56h-300v68l226 157h-226v56v13l226 157h-226v55z" /> +d="M0 -125v125l289 -75v-125zM0 -313v125l289 -75v-125zM0 63v125l289 -76v-125z" /> +d="M306 204v-125l-306 -79v125zM306 392v-125l-306 -79v125z" /> +d="M306 204v-125l-306 -79v125zM306 392v-125l-306 -79v125zM306 204v-125l-306 -79v125zM306 17v-125l-306 -80v125z" /> +d="M274 89h-238v-178h238v178zM310 125v-250h-310v250h310z" /> +d="M155 122l155 -258h-310zM233 -77c5 0 8 4 8 8c0 1 -1 3 -1 4l-79 130c-1 2 -4 4 -6 4s-5 -2 -6 -4l-79 -130c0 -1 -1 -3 -1 -4c0 -4 3 -8 8 -8h156z" /> +d="M204 -65l-168 128c-1 1 -2 1 -4 1c-3 0 -7 -3 -7 -7v-128c0 -3 3 -7 7 -7h168c4 0 7 4 7 8c0 2 -1 4 -3 5zM0 122l339 -258h-339v258z" /> +d="M68 -212c-2 0 -4 1 -5 3c-3 4 -63 88 -63 209s60 203 63 207c1 1 2 2 4 2c2 1 3 0 5 -1s3 -3 3 -5c0 -1 0 -2 -1 -3c-34 -67 -46 -134 -46 -193c0 -118 46 -207 46 -208c1 -2 1 -3 1 -4c0 -2 -1 -4 -3 -5c-1 -1 -2 -1 -4 -2z" /> +d="M7 212c2 0 4 -1 5 -3c3 -4 63 -88 63 -209s-60 -203 -63 -207c-1 -1 -2 -2 -4 -2c-2 -1 -3 0 -5 1s-3 3 -3 5c0 1 0 2 1 3c34 67 46 134 46 193c0 118 -46 207 -46 208c-1 2 -1 3 -1 4c0 2 1 4 3 5c1 1 2 1 4 2z" /> +d="M0 -125v125l289 -75v-125zM0 62v125l289 -75v-125zM0 249v125l289 -75v-125zM0 -313v125l289 -75v-125z" /> +d="M0 -125v125l289 -76v-125zM0 62v125l289 -75v-125zM0 249v125l289 -75v-125zM0 -313v125l289 -75v-125zM0 436v125l289 -75v-125z" /> +d="M0 -126v125l289 -75v-125zM0 62v125l289 -75v-125zM0 249v125l289 -75v-125zM0 -313v125l289 -75v-125zM0 436v125l289 -75v-125zM0 623v125l289 -75v-125z" /> +d="M0 -126v125l289 -75v-125zM0 62v125l289 -75v-125zM0 249v125l289 -75v-125zM0 -313v125l289 -75v-125zM0 436v125l289 -75v-125zM0 623v125l289 -75v-125zM0 811v125l289 -75v-125z" /> +d="M0 -126v125l289 -75v-125zM0 62v125l289 -75v-125zM0 249v125l289 -75v-125zM0 -313v125l289 -75v-125zM0 436v125l289 -75v-125zM0 623v125l289 -75v-125zM0 811v125l289 -75v-125zM0 998v125l289 -75v-125z" /> +d="M303 63l-168 -128c-2 -1 -3 -3 -3 -5c0 -4 3 -8 7 -8h168c4 0 7 4 7 7v128c0 4 -4 7 -7 7c-2 0 -3 0 -4 -1zM339 122v-258h-339z" /> +d="M0 125h310v-125c0 -69 -69 -125 -155 -125s-155 56 -155 125v125zM242 -60c21 16 32 38 32 60v89h-238v-89c0 -22 11 -44 32 -60c11 -9 24 -16 38 -21c16 -5 32 -8 49 -8s33 3 49 8c14 5 27 12 38 21z" /> +d="M157 -136l-157 180s47 78 157 78s153 -78 153 -78zM157 74c-62 0 -97 -32 -110 -47l110 -126l107 126c-4 5 -12 13 -22 21c-23 17 -52 26 -85 26z" /> +d="M267 -71l152 -119c3 -2 4 -6 5 -10c0 -3 -1 -6 -3 -8c-3 -3 -7 -5 -11 -5c-2 0 -5 1 -8 3l-151 125c-40 -29 -90 -48 -139 -48c-81 0 -112 48 -112 91c0 42 24 81 58 112l-152 119c-3 2 -4 6 -4 10c-1 1 0 1 0 2c0 2 1 4 2 6c3 3 7 5 10 5s6 -1 9 -3l152 -125 +c41 29 91 48 138 48c62 0 112 -33 112 -92c0 -40 -23 -80 -58 -111z" /> +d="M421 207c2 -2 3 -5 3 -8c0 -4 -2 -8 -5 -10l-116 -91c5 -5 9 -11 12 -17c7 -13 10 -27 10 -41c0 -51 -40 -110 -106 -145c-36 -19 -73 -28 -107 -28c-28 0 -53 7 -73 19l-116 -96c-2 -2 -5 -3 -8 -3c-4 0 -8 2 -10 5c-2 2 -3 5 -3 8c0 4 2 8 5 10l115 91 +c-4 5 -8 10 -12 16c-7 13 -10 27 -10 41c0 51 40 110 106 145c36 19 73 29 107 29c28 0 53 -7 73 -19l117 96c2 2 5 3 8 3c4 0 7 -2 10 -5zM39 -68c3 -4 6 -8 9 -11l108 85l95 78h-2c-5 0 -10 -1 -15 -2c-24 -5 -60 -20 -96 -40s-69 -41 -86 -58c-11 -11 -18 -24 -18 -35 +c0 -6 2 -12 5 -17zM285 65c-2 5 -6 9 -10 12l-105 -83l-98 -81h2c5 0 10 1 15 2c24 5 60 20 96 40s70 41 87 58c11 12 17 24 17 35c0 6 -1 12 -4 17z" /> +d="M268 -71l151 -119c3 -2 5 -6 5 -10c0 -3 -1 -6 -3 -8c-3 -3 -6 -5 -10 -5c-3 0 -6 1 -8 3l-152 125c-10 -7 -20 -14 -32 -20c-36 -19 -73 -28 -107 -28c-46 0 -84 17 -102 50c-7 13 -10 27 -10 41c0 37 22 79 59 112l-152 119c-3 2 -5 6 -5 10c0 3 1 6 3 8c2 3 6 5 10 5 +c3 0 6 -1 8 -3l152 -126c10 7 20 14 31 20c36 19 73 29 107 29c46 0 84 -18 102 -51c7 -13 10 -27 10 -41c0 -37 -21 -78 -57 -111zM138 42c-2 -2 -5 -3 -7 -4l39 -33l44 -34c24 15 46 29 58 42c11 12 17 24 17 35c0 6 -1 12 -4 17c-7 13 -20 19 -36 19c-5 0 -10 -1 -15 -2 +c-24 -5 -60 -20 -96 -40zM185 -45c4 2 7 4 11 6l-40 33l-43 33c-26 -15 -48 -30 -61 -43c-11 -11 -18 -24 -18 -35c0 -6 2 -12 5 -17c7 -13 19 -19 35 -19c5 0 10 1 15 2c24 5 60 20 96 40z" /> +d="M445 209c2 -3 2 -6 3 -8c0 -4 -2 -8 -5 -11l-118 -92c34 -26 48 -62 48 -97c0 -65 -48 -135 -186 -135c-52 0 -91 10 -119 25l-121 -100c-3 -2 -6 -2 -8 -2c-4 0 -8 1 -11 4c-2 3 -2 5 -3 8c0 4 2 8 5 11l118 92c-34 26 -48 62 -48 97c0 65 49 135 187 135 +c51 0 90 -10 118 -25l121 100c3 2 5 2 8 3c4 0 8 -2 11 -5zM103 47c1 -18 10 -55 20 -85l120 98c-1 4 -3 8 -5 11c-14 27 -32 33 -60 33c-15 0 -31 -2 -43 -6c-22 -7 -32 -21 -32 -44v-7zM270 -45c0 18 -9 56 -19 85l-57 -44l-64 -53c2 -5 3 -9 5 -12c13 -25 32 -33 60 -33 +c15 0 31 2 43 6c24 7 32 25 32 51z" /> +d="M325 -96l118 -92c3 -3 5 -7 5 -11c-1 -3 -1 -5 -3 -8c-3 -3 -7 -5 -11 -5c-2 0 -5 1 -8 3l-120 100c-29 -15 -68 -25 -119 -25c-138 0 -187 70 -187 135c0 35 14 71 48 97l-118 92c-3 3 -5 7 -5 11c1 2 1 5 3 8c3 3 7 5 11 5c3 -1 5 -1 8 -3l121 -100c29 15 68 25 119 25 +c138 0 186 -70 186 -135c0 -35 -14 -71 -48 -97zM135 98c-13 -4 -22 -11 -27 -20l86 -71l76 -60v8c0 25 -18 89 -32 116s-32 33 -60 33c-15 0 -31 -2 -43 -6zM238 -96c13 4 22 11 27 21l-86 71l-76 60v-3v-6c1 -27 19 -91 32 -116s32 -33 60 -33c15 0 31 2 43 6z" /> +d="M453 207c2 -2 3 -5 3 -7c0 -4 -1 -8 -5 -11l-60 -47v-307c0 -12 -14 -14 -23 -14c-8 0 -14 7 -14 14v79c-31 -29 -81 -50 -159 -50c-52 0 -92 9 -121 24l-37 -31v-22c-1 -12 -14 -14 -23 -14c-6 0 -10 3 -12 7l-47 -38c-2 -2 -5 -3 -8 -3c-4 0 -7 2 -10 5c-2 3 -3 6 -3 8 +c0 4 2 8 5 11l61 47v306c0 8 6 14 14 14h6c9 0 17 -2 17 -14v-78c30 29 80 49 158 49c52 0 92 -9 121 -23l38 30v22c0 8 6 14 14 14h9c5 0 10 -2 12 -6l46 37c2 2 5 3 8 3c4 0 8 -1 10 -5zM111 52v-6c1 -18 10 -56 20 -85l121 98c-2 4 -4 8 -5 11c-15 27 -32 33 -60 33 +c-35 0 -76 -7 -76 -51zM37 -113l16 13c-6 4 -11 9 -16 14v-27zM279 -47c0 19 -9 56 -20 86l-121 -97c2 -5 4 -9 6 -12c13 -25 31 -34 59 -33c41 0 76 7 76 56zM354 86v27l-17 -13c6 -5 12 -9 17 -14z" /> +d="M391 -142l61 -47c3 -3 4 -7 4 -11c0 -3 -1 -5 -2 -8c-3 -3 -6 -5 -11 -5c-3 0 -5 1 -8 3l-46 39c-3 -4 -8 -8 -12 -8h-9c-8 0 -14 7 -14 14v22l-37 31c-30 -15 -70 -24 -122 -24c-77 0 -128 21 -158 50v-79c0 -6 -7 -14 -14 -14h-9c-8 0 -14 7 -14 14v307l-61 47 +c-3 3 -5 6 -5 10c0 3 1 6 3 8c3 4 7 5 10 5s6 -1 9 -3l46 -38c2 5 6 7 12 7h9c8 0 14 -5 14 -14v-22l37 -30c30 14 70 23 121 23c78 0 129 -20 159 -49v78c0 8 6 14 14 14h9c8 0 14 -5 14 -14v-306zM144 97c-13 -4 -22 -11 -27 -21l86 -70l76 -60v7c0 26 -18 90 -32 117 +s-32 33 -60 33c-15 0 -31 -3 -43 -6zM54 100l-17 13v-27c5 5 11 9 17 14zM247 -98c13 5 22 12 27 22l-86 70l-76 60c-1 -1 -1 -2 -1 -4c0 -1 1 -2 1 -4c1 -27 19 -92 32 -116c13 -25 32 -33 60 -33c15 0 31 2 43 5zM337 -100l17 -13v27c-5 -5 -11 -10 -17 -14z" /> +d="M337 204c2 -2 3 -5 3 -8s-1 -6 -3 -9l-92 -92l85 -85c2 -2 4 -5 4 -8s-2 -6 -4 -9c-2 -2 -5 -3 -8 -3c-4 0 -7 1 -9 3l-58 59c6 -16 10 -34 10 -52c0 -73 -59 -133 -132 -133c-19 0 -36 4 -52 11l58 -59c3 -2 4 -5 4 -8s-1 -6 -4 -9c-2 -2 -5 -3 -8 -3s-6 1 -9 3l-85 86 +l-92 -92c-2 -3 -5 -4 -8 -4s-7 1 -9 4c-2 2 -3 5 -3 8s1 6 3 9l92 92l-85 85c-2 2 -4 5 -4 8s2 6 4 9c2 2 5 3 8 3c4 0 7 -1 9 -3l58 -59c-6 16 -10 34 -10 52c0 73 59 133 132 133c19 0 36 -4 52 -11l-58 59c-3 2 -4 5 -4 8s1 6 4 9c2 2 5 3 8 3s6 -1 9 -3l85 -86l92 92 +c2 3 5 4 8 4s7 -1 9 -4z" /> +d="M337 204c2 -2 3 -5 3 -8s-1 -6 -3 -9l-92 -92l85 -85c2 -2 4 -5 4 -8s-2 -6 -4 -9c-2 -2 -5 -3 -8 -3c-4 0 -7 1 -9 3l-58 59c6 -16 10 -34 10 -52c0 -73 -59 -133 -132 -133c-19 0 -36 4 -52 11l58 -59c3 -2 4 -5 4 -8s-1 -6 -4 -9c-2 -2 -5 -3 -8 -3s-6 1 -9 3l-85 86 +l-92 -92c-2 -3 -5 -4 -8 -4s-7 1 -9 4c-2 2 -3 5 -3 8s1 6 3 9l92 92l-85 85c-2 2 -4 5 -4 8s2 6 4 9c2 2 5 3 8 3c4 0 7 -1 9 -3l58 -59c-6 16 -10 34 -10 52c0 73 59 133 133 133c18 0 35 -4 51 -11l-58 59c-3 2 -4 5 -4 8s1 6 4 9c2 2 5 3 8 3s6 -1 9 -3l85 -86l92 92 +c2 3 5 4 8 4s7 -1 9 -4zM133 101c-56 0 -101 -46 -101 -101c0 -23 8 -45 21 -62l142 141c-18 13 -39 22 -62 22zM133 -101c55 0 100 46 100 101c0 23 -8 45 -21 62l-142 -141c18 -13 39 -22 63 -22z" /> +d="M426 285v-232c-1 -123 -155 -226 -280 -226c-26 0 -146 8 -146 118s144 226 280 226c57 0 87 -20 91 -22v974c0 13 10 20 22 20c14 0 18 -8 21 -20s9 -39 10 -41c1 -1 1 -2 1 -3c28 -86 70 -159 126 -229c4 -4 36 -45 68 -88c65 -87 92 -168 92 -277 +c0 -42 -2 -84 -8 -126c8 -30 8 -56 8 -80c0 -56 -4 -95 -18 -139c17 -41 18 -74 18 -104c0 -69 -6 -112 -29 -170c0 -2 -5 -19 -21 -19c-2 0 -4 0 -6 1c-9 3 -12 11 -12 19c0 6 1 12 2 14c12 42 18 78 18 110c0 128 -121 256 -237 294zM426 828c5 -45 28 -164 137 -266 +c45 -41 76 -78 98 -112c0 171 -91 295 -235 378zM661 200c1 12 2 25 2 37c0 67 -21 120 -54 167c-41 58 -123 130 -183 153c5 -39 28 -146 137 -248c45 -42 76 -78 98 -109z" /> +d="M132 56c12 -56 14 -70 30 -117c17 -55 43 -70 84 -70c15 0 33 2 47 5c21 5 34 14 42 28c5 10 7 24 7 39c0 22 -5 50 -15 83l-4 13c-14 48 -30 96 -81 96h-1c-34 0 -42 -3 -59 -7c-19 -4 -34 -13 -43 -25c-5 -9 -8 -19 -8 -30c0 -5 0 -10 1 -15zM238 172 +c176 0 237 -89 237 -172s-61 -172 -237 -172s-238 89 -238 172s62 172 238 172z" /> +d="M29 224c10 0 17 -8 17 -18v-411s-9 -17 -17 -17h-11c-11 0 -18 8 -18 17v411s7 18 18 18h11zM563 224c11 0 18 -8 18 -18v-411s-9 -17 -18 -17h-11c-10 0 -17 8 -17 17v98c-38 -36 -101 -62 -198 -62s-161 26 -198 62v-98c0 -8 -9 -17 -18 -17h-11c-10 0 -18 8 -18 17 +v411s8 18 18 18h11c11 0 18 -8 18 -18v-98c37 36 101 62 198 62s160 -26 198 -62v98c0 10 7 18 17 18h11zM401 -121c30 10 41 31 41 64c0 32 -23 112 -41 145c-18 34 -40 42 -74 42c-19 0 -39 -4 -54 -8c-28 -9 -41 -27 -41 -57v-6c2 -34 25 -115 41 -146s39 -42 74 -42 +c19 0 39 4 54 8zM655 224c10 0 17 -8 17 -18v-411s-9 -17 -17 -17h-12c-10 0 -17 8 -17 17v411s7 18 17 18h12z" /> +d="M251 501c138 0 250 -112 250 -250c0 -139 -112 -251 -250 -251c-139 0 -251 112 -251 251c0 138 112 250 251 250zM387 114c36 36 57 85 57 137s-20 100 -57 136c-36 37 -84 57 -136 57s-101 -20 -137 -57c-37 -36 -57 -84 -57 -136s20 -101 57 -137 +c36 -37 85 -57 137 -57c51 0 100 20 136 57z" /> +c-52 0 -101 -20 -137 -57c-37 -36 -57 -84 -57 -136zM444 251c0 45 -16 88 -44 122l-272 -272c34 -28 77 -44 123 -44c51 0 100 20 136 57c36 36 57 85 57 137z" /> +d="M250 367l-156 -300h312zM250 490l250 -480h-500z" /> +d="M288 -180l-7 9c-5 6 -43 57 -92 83c-15 8 -32 12 -48 13c14 -12 23 -28 25 -47c1 -3 1 -6 1 -9c-1 -34 -25 -64 -60 -70c-4 0 -8 -1 -12 -1c-35 0 -65 26 -71 61v10c-1 26 13 50 35 63c14 9 33 16 53 19c7 1 15 2 23 2c17 0 34 -3 52 -10l-184 222c-2 3 -3 6 -3 8 +c0 4 2 8 6 11c2 1 5 1 7 1h2c5 0 9 -3 12 -6c4 -5 44 -59 93 -85c15 -8 31 -12 47 -13c-13 11 -22 27 -25 46v8c-1 34 24 65 59 71c4 1 9 1 13 1c34 0 65 -25 70 -61c1 -3 1 -7 1 -10c0 -26 -14 -50 -36 -62c-14 -10 -32 -17 -52 -20c-7 -1 -14 -2 -22 -2 +c-18 0 -38 4 -57 12l195 -231c3 -4 4 -7 4 -10c0 -4 -2 -7 -5 -9c-2 -1 -5 -2 -7 -2c-6 0 -13 3 -17 8z" /> +d="M304 -422c0 -9 -7 -16 -16 -16h-272c-9 0 -16 7 -16 16v845c0 8 7 16 16 16h272c9 0 16 -8 16 -16v-845zM40 335v-669c0 -6 4 -10 10 -10h204c5 0 10 4 10 10v669c0 5 -4 10 -10 10h-204c-6 0 -10 -5 -10 -10z" /> +d="M57 0l-24 30c69 48 108 97 108 140c0 6 -1 9 -3 10s-3 1 -5 1s-5 -1 -7 -2c-3 -1 -17 -8 -46 -8c-43 0 -80 33 -80 76c0 40 32 74 80 74c67 0 111 -46 111 -123c0 -71 -42 -134 -134 -198z" /> +d="M38 -1h-30c-4 0 -8 4 -8 9v482c0 6 4 10 10 10h26c6 0 10 -4 10 -10v-482c0 -5 -4 -9 -8 -9zM176 -1h-30c-4 0 -8 4 -8 9v482c0 6 4 10 10 10h26c6 0 10 -4 10 -10v-482c0 -5 -4 -9 -8 -9z" /> +d="M127 125c0 -35 -29 -63 -63 -63c-35 0 -63 28 -63 63s28 63 63 63c34 0 63 -28 63 -63zM481 250l-355 -500h-126l355 500h126zM481 -126c0 -35 -29 -63 -63 -63c-35 0 -63 28 -63 63s28 63 63 63c34 0 63 -28 63 -63z" /> +d="M735 -126c0 -35 -29 -63 -63 -63c-35 0 -63 28 -63 63s28 63 63 63c34 0 63 -28 63 -63zM127 125c0 -35 -29 -63 -63 -63c-35 0 -63 28 -63 63s28 63 63 63c34 0 63 -28 63 -63zM481 250l-355 -500h-126l355 500h126zM735 250l-355 -500h-126l355 500h126z" /> +d="M499 192c3 -16 4 -31 4 -44c0 -106 -69 -148 -125 -148s-89 16 -115 39l-28 28l-64 -74c-3 -4 -8 -6 -12 -6s-7 1 -11 4c-3 3 -5 7 -5 12c0 4 1 7 4 11l65 76l-21 21c-20 20 -52 52 -91 52c-47 0 -64 -51 -64 -107c0 -9 0 -18 1 -27c0 -8 -4 -13 -16 -13 +c-14 0 -17 14 -17 16c-3 15 -4 28 -4 41c0 108 68 151 125 151c56 0 89 -16 115 -40l28 -28l64 75c3 4 7 6 12 6c4 0 7 -1 10 -4c4 -3 6 -8 6 -13c0 -3 -1 -7 -4 -10l-65 -77l21 -20c20 -20 52 -52 91 -52c47 0 64 51 64 107c0 9 0 17 -1 26c0 9 5 14 15 14 +c15 0 18 -15 18 -16z" /> +d="M352 465c3 6 9 11 15 11h41c9 0 16 -8 16 -15c0 -2 0 -5 -1 -7l-173 -445c-2 -6 -8 -10 -14 -10h-48c-6 0 -12 4 -15 10l-172 445c-1 2 -1 4 -1 7c0 7 6 15 15 15h42c6 0 12 -5 14 -11l141 -361z" /> +d="M295 175c5 0 10 -5 10 -10v-24c0 -6 -5 -10 -10 -10h-121v-121c0 -5 -4 -10 -10 -10h-24c-5 0 -10 5 -10 10v121h-120c-6 0 -10 4 -10 10v24c0 5 4 10 10 10h120v120c0 6 5 10 10 10h24c6 0 10 -4 10 -10v-120h121z" /> +d="M737 473c8 0 14 -6 14 -14s-6 -14 -14 -14c-36 0 -80 -29 -133 -88s-156 -218 -239 -351c-2 -4 -6 -6 -12 -6c-2 0 -4 0 -7 2c-2 1 -3 2 -4 4l-79 127l-59 -95v0l-19 -31c-2 -4 -7 -7 -12 -7s-9 2 -11 6l-79 127l-59 -95l-24 15l117 189h1c2 4 6 6 11 6v0c5 0 9 -2 12 -6 +l78 -126l78 126c3 4 7 6 12 6v0c5 0 9 -2 12 -6l78 -124c75 119 134 201 184 258c60 66 109 97 154 97z" /> +d="M140 280c77 0 140 -63 140 -140s-63 -140 -140 -140s-140 63 -140 140s63 140 140 140zM251 154c-3 25 -14 48 -32 65c-18 18 -40 29 -65 32v-97h97zM60 219c-17 -17 -29 -40 -32 -65h98v97c-25 -3 -48 -14 -66 -32zM28 126c3 -25 15 -48 32 -65c18 -18 41 -29 66 -32v97 +h-98zM219 61c18 17 29 40 32 65h-97v-97c25 3 47 14 65 32z" /> +d="M339 153v-28h-60c-7 -66 -60 -118 -126 -125v-61h-28v61c-66 7 -118 59 -125 125h-61v28h61c7 66 59 119 125 126v60h28v-60c66 -7 119 -60 126 -126h60z" /> +d="M339 153v-28h-60c-7 -66 -60 -118 -126 -125v-61h-28v61c-66 7 -118 59 -125 125h-61v28h61c7 66 59 119 125 126v60h28v-60c66 -7 119 -60 126 -126h60zM250 153c-6 51 -46 91 -97 97v-97h97zM153 28c51 6 91 47 97 97h-97v-97z" /> +d="M339 153v-28h-60c-7 -66 -60 -118 -126 -125v-61h-28v61c-66 7 -118 59 -125 125h-61v28h61c7 66 59 119 125 126v60h28v-60c66 -7 119 -60 126 -126h60zM125 250c-50 -6 -90 -46 -97 -97h97v97zM28 125c7 -50 47 -91 97 -97v97h-97z" /> +d="M339 153v-28h-60c-7 -66 -60 -118 -126 -125v-61h-28v61c-66 7 -118 59 -125 125h-61v28h61c7 66 59 119 125 126v60h28v-60c66 -7 119 -60 126 -126h60zM219 219c-18 18 -41 29 -66 32v-98h98c-3 25 -14 48 -32 66zM60 219c-18 -18 -29 -41 -32 -66h97v98 +c-24 -3 -47 -14 -65 -32zM60 60c18 -18 41 -29 65 -32v97h-97c3 -24 14 -47 32 -65zM219 60c18 18 29 41 32 65h-98v-97c25 3 48 14 66 32z" /> +d="M140 280c77 0 140 -63 140 -140s-63 -140 -140 -140c-78 0 -140 63 -140 140s62 140 140 140zM27 140c0 -25 9 -49 24 -69l157 158c-19 15 -43 23 -68 23c-30 0 -59 -11 -80 -33c-21 -21 -33 -49 -33 -79zM219 61c21 21 33 49 33 79c0 25 -8 49 -24 69l-157 -158 +c19 -15 43 -23 69 -23c30 0 58 11 79 33z" /> +d="M180 0c-11 0 -28 6 -37 12c-55 30 -95 73 -118 126c-16 37 -23 77 -23 122c0 8 0 16 1 25c5 92 64 177 66 180c3 5 7 7 12 7c2 0 4 0 6 -1c4 -2 6 -6 6 -10c0 -2 -1 -4 -2 -7c-35 -65 -50 -124 -50 -171c0 -131 106 -188 145 -208c2 -1 3 -3 5 -3c6 -3 22 -13 26 -29 +c1 -2 1 -5 1 -8c0 -7 -3 -13 -8 -20c-8 -11 -19 -15 -30 -15z" /> +d="M12 14c-5 7 -8 14 -8 21c0 2 0 5 1 8c4 16 20 25 26 28c1 1 3 2 5 3c39 21 145 78 145 208c0 48 -15 107 -50 172c-1 2 -2 5 -2 7c0 4 2 8 6 10c2 1 4 1 6 1c5 0 9 -3 12 -7c2 -3 61 -88 66 -181c1 -8 1 -16 1 -24c0 -45 -7 -86 -23 -122c-23 -53 -63 -96 -118 -126 +c-9 -6 -26 -12 -37 -12s-22 4 -30 14z" /> +d="M351 7c-9 -5 -26 -7 -37 -7h-5c-69 0 -130 18 -180 52c-40 27 -72 65 -97 111c-27 49 -32 105 -32 141c0 22 2 37 2 38c1 5 4 10 8 12c2 1 4 1 6 1c8 0 13 -5 13 -12c0 -70 15 -126 41 -164c71 -107 200 -108 248 -108h6c7 0 28 0 40 -12c5 -5 9 -11 9 -19 +c0 -2 0 -5 -1 -8c-2 -12 -11 -20 -21 -25z" /> +d="M496 316c1 -3 3 -17 3 -38s-7 -82 -33 -127c-25 -43 -57 -78 -96 -103c-50 -31 -101 -48 -270 -48h-58c-23 0 -41 13 -41 35s25 31 39 31h66c113 0 252 1 323 99c25 36 40 87 40 151c0 6 5 12 14 12c8 0 11 -4 13 -12z" /> +d="M184 264l-149 -257c-3 -4 -7 -7 -12 -7c-2 0 -5 1 -7 2l-8 4c-5 3 -7 7 -7 12c0 3 0 5 2 8l149 257c2 4 7 7 12 7c2 0 5 -1 7 -2l8 -4c4 -3 7 -8 7 -13c0 -2 -1 -4 -2 -7z" /> - +d="M151 7l-149 257c-1 3 -2 5 -2 8c0 5 3 9 7 12l8 4c2 1 4 2 7 2c5 0 9 -2 12 -7l149 -257c1 -3 2 -5 2 -7c0 -5 -2 -10 -7 -13l-8 -4c-2 -1 -4 -2 -6 -2h-2c-4 0 -9 3 -11 7z" /> +d="M463 11l-245 423c-2 4 -3 8 -3 12c0 8 4 15 12 20l13 7c3 2 7 3 11 3c8 0 16 -4 20 -11l245 -423c2 -4 3 -7 3 -11c0 -8 -4 -16 -11 -21l-13 -7c-4 -2 -8 -3 -12 -3c-8 0 -15 4 -20 11zM248 11l-245 423c-2 4 -3 8 -3 12c0 8 4 15 12 20l13 7c3 2 7 3 11 3 +c8 0 16 -4 20 -11l245 -423c2 -4 3 -7 3 -11c0 -8 -4 -16 -11 -21l-13 -7c-4 -2 -8 -3 -12 -3c-8 0 -15 4 -20 11z" /> +d="M301 434l-245 -423c-4 -7 -12 -11 -20 -11c-4 0 -8 1 -12 3l-12 7c-8 5 -12 12 -12 20c0 4 1 8 3 12l245 423c4 7 12 11 21 11c3 0 7 -1 11 -3l12 -7c8 -5 12 -13 12 -21c0 -4 -1 -7 -3 -11z" /> +d="M248 11l-245 423c-2 4 -3 8 -3 12c0 8 4 15 12 20l12 7c4 2 8 3 11 3c9 0 17 -4 21 -11l245 -423c2 -4 3 -7 3 -11c0 -8 -4 -16 -12 -21l-12 -7c-4 -2 -8 -3 -12 -3c-8 0 -16 4 -20 11z" /> +d="M247 -97c24 8 32 25 32 51s-18 90 -32 117c-14 26 -32 33 -60 33c-15 0 -31 -3 -43 -6c-22 -8 -32 -22 -32 -46v-5c1 -27 19 -92 32 -117c13 -24 32 -33 60 -33c15 0 31 3 43 6zM377 179c8 0 14 -6 14 -14v-329s-7 -14 -14 -14h-9c-8 0 -14 7 -14 14v79 +c-30 -30 -81 -50 -159 -50c-77 0 -128 20 -158 50v-79c0 -6 -7 -14 -14 -14h-9c-8 0 -14 7 -14 14v329s6 14 14 14h9c8 0 14 -6 14 -14v-78c30 29 81 49 158 49c78 0 129 -20 159 -49v78c0 8 6 14 14 14h9z" /> +d="M471 224c10 0 17 -8 17 -18v-411s-8 -17 -17 -17h-11c-10 0 -18 8 -18 17v98c-37 -36 -101 -62 -198 -62c-96 0 -160 26 -197 62v-98c0 -8 -9 -17 -18 -17h-11c-10 0 -18 8 -18 17v411s8 18 18 18h11c11 0 18 -8 18 -18v-98c37 36 101 62 197 62c97 0 161 -26 198 -62v98 +c0 10 8 18 18 18h11zM309 -121c30 10 40 31 40 64c0 32 -22 112 -40 145c-18 34 -40 42 -75 42c-19 0 -38 -4 -54 -8c-27 -9 -40 -27 -40 -57v-6c2 -34 24 -115 40 -146s40 -41 75 -41c19 0 39 3 54 7z" /> +d="M98 240l90 -149l-50 -84c-3 -4 -5 -7 -12 -7c-6 0 -9 3 -12 7s-67 112 -74 124l-59 -98l-24 14c11 19 114 188 117 193s7 7 12 7c4 0 9 -3 12 -7z" /> +d="M28 41c-1 -7 -6 -14 -14 -14s-14 7 -14 14c0 2 1 42 18 82c23 56 66 85 125 85s103 -29 128 -84c11 -23 16 -45 18 -61l-26 -22c0 1 -1 37 -17 72c-21 45 -55 67 -103 67c-47 0 -80 -22 -99 -67c-15 -35 -15 -64 -16 -72z" /> + +d="M289 34c-3 -5 -6 -7 -12 -7c-10 0 -14 8 -15 15s-1 37 -16 70c-21 45 -55 68 -103 68c-47 0 -81 -23 -99 -68c-16 -37 -15 -66 -16 -72c-1 -9 -5 -13 -15 -13s-13 9 -13 14s1 41 18 82c23 55 67 85 125 85c59 0 103 -30 129 -85c6 -15 11 -29 14 -42l3 7l93 153 +c2 4 5 7 9 7c6 0 11 -1 14 -6l75 -123l73 122c2 4 7 7 12 7c2 0 5 -1 7 -2c1 -1 4 -3 5 -4l79 -127l4 7v185c0 8 6 14 13 14h9c8 0 14 -7 14 -14v-126l37 60c2 4 8 7 12 7c6 0 9 -2 12 -6l79 -127l59 95l23 -14l-117 -189v0c-2 -4 -7 -7 -12 -7v0c-4 0 -9 3 -11 7l-79 126 +l-3 -5v-186c0 -8 -6 -14 -14 -14h-9c-7 0 -13 6 -13 14v127c-4 -6 -36 -58 -39 -62c-3 -5 -8 -7 -12 -7s-9 2 -12 7c-2 4 -70 112 -77 124l-74 -124v0c-2 -4 -8 -7 -12 -7v0c-4 0 -10 3 -12 7l-74 124c-6 -9 -56 -92 -59 -97z" /> +d="M14 89l-16 26l59 95v0l18 31c3 4 7 7 12 7c6 0 10 -2 12 -6l79 -127l59 95l24 -15l-118 -189v0c-2 -4 -6 -6 -11 -6v0c-5 0 -9 2 -12 6l-79 126z" /> +d="M102 176c-1 -7 -1 -13 -1 -19c0 -32 14 -54 54 -54c47 0 78 76 79 77c1 4 5 7 10 8c2 0 3 0 4 -1c5 -1 8 -6 8 -11v-3s-6 -28 -23 -55c-23 -37 -56 -56 -95 -56c-29 0 -53 10 -70 29c-16 18 -24 42 -24 71c0 7 1 15 2 22c5 33 13 75 23 127h-59c-6 0 -10 4 -10 10v24 +c0 5 4 10 10 10h67c9 52 14 94 14 98c1 5 4 9 9 10l61 14c1 1 2 1 3 1c4 0 7 -2 9 -4s3 -5 3 -7s0 -3 -1 -5c-8 -29 -19 -67 -31 -107h67c6 0 10 -5 10 -10v-24c0 -6 -4 -10 -10 -10h-79c-16 -60 -25 -98 -30 -135z" /> +d="M210 1c-87 0 -167 47 -208 124c-1 2 -2 4 -2 6c0 6 3 10 7 13c2 1 5 2 7 2c5 0 10 -3 12 -8c37 -67 107 -109 184 -109s147 42 184 109c2 5 7 7 11 8c3 0 5 -1 8 -2c4 -3 7 -7 7 -12c0 -3 -1 -5 -2 -7c-41 -77 -121 -124 -208 -124z" /> +d="M255 33c-2 -3 -6 -7 -13 -7s-14 6 -14 14c0 1 -1 37 -18 72c-20 45 -55 67 -102 67c-35 0 -63 -12 -83 -38c-3 -4 -7 -6 -11 -6c-3 0 -6 1 -9 3c-3 3 -5 7 -5 11c0 3 1 6 3 9c25 33 60 50 105 50c59 0 103 -30 128 -85c7 -15 12 -30 15 -43c24 41 95 158 96 161 +c2 4 6 7 12 7s10 -3 12 -7c2 -3 68 -110 75 -122c7 12 70 118 73 122c2 5 7 7 11 7c5 0 9 -2 12 -7c3 -4 72 -114 79 -126l78 126c2 4 7 7 11 7c6 0 10 -2 12 -7l79 -126l59 95l24 -15l-117 -188v0c-3 -4 -8 -7 -12 -7v0c-4 0 -10 3 -12 7l-78 126c-8 -13 -76 -123 -78 -126 +c-3 -4 -7 -7 -11 -7s-9 1 -13 7s-70 112 -78 124c-7 -12 -71 -120 -74 -124c-2 -4 -7 -7 -11 -7c-5 0 -10 3 -12 7c-3 4 -67 112 -74 124c-6 -10 -57 -94 -59 -98z" /> +d="M145 210c0 -87 -48 -167 -124 -208c-3 -2 -5 -2 -7 -2c-5 0 -10 3 -12 7c-1 2 -2 5 -2 7c0 5 3 10 7 12c68 37 110 107 110 184s-42 147 -110 184c-4 2 -7 7 -7 12c0 2 1 4 2 7c2 4 7 7 12 7c3 0 5 -1 7 -2c76 -41 124 -121 124 -208z" /> +d="M0 210c0 87 48 167 124 208c3 2 5 2 7 2c5 0 10 -3 12 -7c1 -3 2 -5 2 -7c0 -5 -3 -10 -7 -12c-68 -37 -110 -107 -110 -184s42 -147 110 -184c4 -2 7 -7 7 -12c0 -2 -1 -5 -2 -7c-2 -4 -7 -7 -12 -7c-3 0 -5 1 -7 2c-76 41 -124 121 -124 208z" /> +d="M266 97c-26 -46 -60 -70 -118 -70s-103 29 -128 85c-18 40 -20 80 -20 81c0 8 6 15 14 15c7 0 14 -6 14 -14c0 -3 2 -36 18 -72c20 -44 53 -67 102 -67s74 22 100 65c25 43 71 120 72 122c2 3 6 6 12 6s10 -3 12 -6c2 -4 68 -111 75 -123c7 12 70 118 73 123 +c2 4 7 6 12 6c4 0 8 -2 11 -6c3 -5 72 -115 79 -127l78 127c2 3 7 6 12 6c6 0 9 -2 12 -6l78 -127l59 95l24 -14l-117 -189v0c-2 -4 -8 -6 -12 -7v0c-4 0 -9 3 -12 7l-78 126c-8 -12 -76 -122 -78 -126c-3 -4 -7 -7 -11 -7s-9 1 -13 7s-70 113 -78 124 +c-7 -12 -71 -120 -73 -124c-3 -4 -8 -7 -12 -7c-5 0 -10 3 -12 7c-3 4 -67 112 -74 124c-1 -1 -10 -16 -21 -34z" /> +d="M704 196l-117 -189c-3 -4 -7 -7 -11 -7s-9 1 -13 7s-70 113 -77 124c-8 -12 -72 -120 -74 -124c-3 -4 -7 -7 -12 -7s-10 3 -12 7c-3 4 -67 112 -74 124c-6 -9 -57 -94 -59 -97c-2 -4 -6 -7 -13 -7s-13 6 -14 13c0 1 -1 37 -17 72c-21 45 -55 68 -103 68 +c-35 0 -63 -13 -83 -39c-3 -3 -7 -5 -11 -5c-3 0 -6 1 -8 3c-4 2 -6 6 -6 11c0 2 1 6 3 8c25 33 61 50 105 50c59 0 103 -29 128 -85c7 -15 12 -30 15 -43c24 41 95 159 97 162c1 3 5 6 11 6s10 -3 12 -6c2 -4 68 -111 75 -123c7 12 70 118 73 123c2 4 7 6 12 6 +c4 0 9 -2 11 -6c3 -5 72 -114 79 -127l59 95z" /> +d="M240 184l72 -71c20 -20 52 -52 91 -52c47 0 64 51 64 107c0 8 0 17 -1 26c0 9 5 14 15 14c15 0 18 -15 18 -16c3 -16 4 -31 4 -44c0 -106 -69 -148 -125 -148s-89 16 -115 39l-72 72c-20 20 -52 52 -91 52c-47 0 -64 -51 -64 -107c0 -9 0 -18 1 -27c0 -8 -4 -14 -16 -14 +c-14 0 -17 15 -17 17c-3 14 -4 28 -4 41c0 108 68 151 125 151c56 0 89 -16 115 -40z" /> + + diff --git a/fonts/json/leland_metadata.json b/fonts/json/leland_metadata.json index 4cd85e2bb0a..41cbb35efe0 100644 --- a/fonts/json/leland_metadata.json +++ b/fonts/json/leland_metadata.json @@ -14,7 +14,7 @@ "lyricLineThickness": 0.1, "octaveLineThickness": 0.11, "pedalLineThickness": 0.11, - "repeatBarlineDotSeparation": 0.7, + "repeatBarlineDotSeparation": 0.37, "repeatEndingLineThickness": 0.11, "slurEndpointThickness": 0.07, "slurMidpointThickness": 0.21, @@ -33,16 +33,16 @@ "tupletBracketThickness": 0.1 }, "fontName": "Leland", - "fontVersion": "0.73", + "fontVersion": "0.75", "glyphBBoxes": { "4stringTabClef": { "bBoxNE": [ - 1.176, - 2.0 + 1.177, + 2.001 ], "bBoxSW": [ 0.0, - -1.988 + -1.989 ] }, "6stringTabClef": { @@ -138,11 +138,11 @@ "accidentalDoubleFlatParens": { "bBoxNE": [ 2.24, - 1.808 + 1.81 ], "bBoxSW": [ 0.0, - -0.844 + -0.846 ] }, "accidentalDoubleSharp": { @@ -158,11 +158,11 @@ "accidentalDoubleSharpParens": { "bBoxNE": [ 1.828, - 0.848 + 0.85 ], "bBoxSW": [ 0.0, - -0.844 + -0.846 ] }, "accidentalFiveQuarterTonesFlatArrowDown": { @@ -177,11 +177,11 @@ }, "accidentalFiveQuarterTonesSharpArrowUp": { "bBoxNE": [ - 1.324, + 1.325, 1.824 ], "bBoxSW": [ - 0.0, + 0.001, -0.548 ] }, @@ -202,7 +202,7 @@ ], "bBoxSW": [ 0.0, - -0.844 + -0.846 ] }, "accidentalKucukMucennebSharp": { @@ -277,22 +277,22 @@ }, "accidentalParensLeft": { "bBoxNE": [ - 0.296, - 0.836 + 0.3, + 0.838 ], "bBoxSW": [ 0.0, - -0.844 + -0.846 ] }, "accidentalParensRight": { "bBoxNE": [ 0.3, - 0.844 + 0.846 ], "bBoxSW": [ 0.0, - -0.836 + -0.838 ] }, "accidentalQuarterToneFlatArrowUp": { @@ -327,12 +327,12 @@ }, "accidentalQuarterToneSharpArrowDown": { "bBoxNE": [ - 1.112, + 1.113, 1.336 ], "bBoxSW": [ - 0.0, - -1.828 + 0.001, + -1.832 ] }, "accidentalQuarterToneSharpNaturalArrowUp": { @@ -397,11 +397,11 @@ }, "accidentalThreeQuarterTonesFlatArrowUp": { "bBoxNE": [ - 1.484, - 1.828 + 1.488, + 1.83 ], "bBoxSW": [ - 0.0, + 0.002, -0.704 ] }, @@ -417,22 +417,22 @@ }, "accidentalThreeQuarterTonesSharpArrowDown": { "bBoxNE": [ - 1.324, + 1.327, 0.552 ], "bBoxSW": [ - 0.0, + 0.003, -1.82 ] }, "accidentalThreeQuarterTonesSharpArrowUp": { "bBoxNE": [ 1.112, - 1.836 + 1.838 ], "bBoxSW": [ 0.0, - -1.328 + -1.33 ] }, "accidentalThreeQuarterTonesSharpStein": { @@ -492,13 +492,13 @@ ], "bBoxSW": [ 0.0, - 0.0 + -0.0 ] }, "articAccentStaccatoBelow": { "bBoxNE": [ 1.444, - 0.0 + -0.0 ], "bBoxSW": [ 0.0, @@ -507,22 +507,22 @@ }, "articLaissezVibrerAbove": { "bBoxNE": [ - 1.952, - 0.484 + 2.292, + 0.547 ], "bBoxSW": [ - 0.0, - 0.0 + -0.0, + -0.001 ] }, "articLaissezVibrerBelow": { "bBoxNE": [ - 1.952, + 2.132, 0.0 ], "bBoxSW": [ 0.0, - -0.484 + -0.509 ] }, "articMarcatoAbove": { @@ -552,7 +552,7 @@ ], "bBoxSW": [ 0.004, - 0.0 + -0.0 ] }, "articMarcatoStaccatoBelow": { @@ -587,7 +587,7 @@ }, "articStaccatissimoAbove": { "bBoxNE": [ - 0.504, + 0.508, 0.992 ], "bBoxSW": [ @@ -597,7 +597,7 @@ }, "articStaccatissimoBelow": { "bBoxNE": [ - 0.504, + 0.507, 0.0 ], "bBoxSW": [ @@ -607,38 +607,38 @@ }, "articStaccatissimoWedgeAbove": { "bBoxNE": [ - 0.484, - 1.012 + 0.487, + 1.016 ], "bBoxSW": [ - 0.0, - 0.0 + -0.001, + -0.0 ] }, "articStaccatissimoWedgeBelow": { "bBoxNE": [ 0.488, - 0.0 + -0.0 ], "bBoxSW": [ - 0.0, + -0.0, -1.016 ] }, "articStaccatoAbove": { "bBoxNE": [ - 0.308, - 0.308 + 0.312, + 0.312 ], "bBoxSW": [ 0.0, - 0.0 + -0.0 ] }, "articStaccatoBelow": { "bBoxNE": [ - 0.308, - 0.0 + 0.312, + -0.0 ], "bBoxSW": [ 0.0, @@ -712,13 +712,13 @@ ], "bBoxSW": [ 0.0, - 0.0 + -0.0 ] }, "articTenutoStaccatoBelow": { "bBoxNE": [ 1.264, - 0.0 + -0.0 ], "bBoxSW": [ 0.0, @@ -727,22 +727,22 @@ }, "articUnstressAbove": { "bBoxNE": [ - 1.368, - 0.0 + 1.369, + 0.001 ], "bBoxSW": [ - 0.0, + -0.001, -0.648 ] }, "articUnstressBelow": { "bBoxNE": [ - 1.368, + 1.369, 0.648 ], "bBoxSW": [ - 0.0, - 0.0 + -0.001, + -0.001 ] }, "augmentationDot": { @@ -752,22 +752,22 @@ ], "bBoxSW": [ 0.0, - -0.196 + -0.2 ] }, "brace": { "bBoxNE": [ 0.248, - 3.976 + 3.98 ], "bBoxSW": [ - 0.0, - 0.016 + -0.002, + 0.019 ] }, "braceFlat": { "bBoxNE": [ - 0.148, + 0.152, 3.98 ], "bBoxSW": [ @@ -778,21 +778,21 @@ "braceLarge": { "bBoxNE": [ 0.204, - 3.976 + 3.979 ], "bBoxSW": [ - 0.0, - 0.016 + -0.002, + 0.018 ] }, "braceLarger": { "bBoxNE": [ 0.176, - 3.976 + 3.979 ], "bBoxSW": [ 0.0, - 0.016 + 0.018 ] }, "braceSmall": { @@ -807,7 +807,7 @@ }, "bracket": { "bBoxNE": [ - 2.108, + 2.111, 5.724 ], "bBoxSW": [ @@ -837,42 +837,42 @@ }, "brassHarmonMuteClosed": { "bBoxNE": [ - 1.356, - 1.356 + 1.357, + 1.357 ], "bBoxSW": [ - -0.24, - -0.24 + -0.243, + -0.243 ] }, "brassHarmonMuteStemHalfLeft": { "bBoxNE": [ - 1.356, - 1.356 + 1.357, + 1.357 ], "bBoxSW": [ - -0.24, - -0.24 + -0.243, + -0.243 ] }, "brassHarmonMuteStemHalfRight": { "bBoxNE": [ - 1.356, - 1.356 + 1.357, + 1.357 ], "bBoxSW": [ - -0.24, - -0.24 + -0.243, + -0.243 ] }, "brassHarmonMuteStemOpen": { "bBoxNE": [ - 1.356, - 1.356 + 1.357, + 1.357 ], "bBoxSW": [ - -0.24, - -0.24 + -0.243, + -0.243 ] }, "brassMuteClosed": { @@ -887,42 +887,42 @@ }, "brassMuteHalfClosed": { "bBoxNE": [ - 1.116, + 1.119, 1.12 ], "bBoxSW": [ - 0.0, + -0.001, 0.0 ] }, "brassMuteOpen": { "bBoxNE": [ - 1.116, + 1.12, 1.12 ], "bBoxSW": [ - 0.0, + -0.0, 0.0 ] }, "brassValveTrill": { "bBoxNE": [ - 1.116, + 1.118, 1.12 ], "bBoxSW": [ - 0.0, + -0.002, 0.0 ] }, "breathMarkComma": { "bBoxNE": [ - 0.76, - 1.284 + 0.764, + 1.285 ], "bBoxSW": [ - 0.0, - 0.0 + -0.0, + 0.001 ] }, "buzzRoll": { @@ -967,7 +967,7 @@ }, "caesura": { "bBoxNE": [ - 1.516, + 1.52, 1.96 ], "bBoxSW": [ @@ -981,18 +981,28 @@ 1.964 ], "bBoxSW": [ - 0.0, + -0.002, 0.0 ] }, "caesuraShort": { "bBoxNE": [ 0.736, - 2.0 + 2.002 ], "bBoxSW": [ 0.0, - 0.0 + -0.002 + ] + }, + "caesuraSingleStroke": { + "bBoxNE": [ + 0.184, + 2.002 + ], + "bBoxSW": [ + 0.0, + -0.002 ] }, "clef15": { @@ -1037,18 +1047,18 @@ }, "csymAugmented": { "bBoxNE": [ - 1.28, + 1.284, 1.64 ], "bBoxSW": [ - 0.0, + 0.004, 0.36 ] }, "csymDiminished": { "bBoxNE": [ - 2.0, - 2.0 + 2.002, + 2.002 ], "bBoxSW": [ 0.0, @@ -1057,18 +1067,18 @@ }, "csymHalfDiminished": { "bBoxNE": [ - 2.004, - 2.004 + 2.007, + 2.007 ], "bBoxSW": [ - -0.004, - -0.004 + -0.005, + -0.005 ] }, "csymMajorSeventh": { "bBoxNE": [ - 2.0, - 1.956 + 2.002, + 1.96 ], "bBoxSW": [ 0.0, @@ -1078,7 +1088,7 @@ "doubleLateralRollStevens": { "bBoxNE": [ 0.504, - 1.552 + 1.556 ], "bBoxSW": [ -0.512, @@ -1087,22 +1097,22 @@ }, "dynamicCrescendoHairpin": { "bBoxNE": [ - 2.956, - 1.548 + 2.957, + 1.549 ], "bBoxSW": [ - 0.016, + 0.018, 0.276 ] }, "dynamicDiminuendoHairpin": { "bBoxNE": [ - 2.944, - 1.544 + 2.945, + 1.546 ], "bBoxSW": [ - 0.004, - 0.272 + 0.007, + 0.273 ] }, "dynamicFF": { @@ -1207,12 +1217,12 @@ }, "dynamicMessaDiVoce": { "bBoxNE": [ - 6.204, - 1.548 + 6.205, + 1.549 ], "bBoxSW": [ - 0.016, - 0.272 + 0.018, + 0.273 ] }, "dynamicMezzo": { @@ -1431,7 +1441,7 @@ 1.004 ], "bBoxSW": [ - 0.0, + 0.001, -2.468 ] }, @@ -1441,8 +1451,8 @@ 1.968 ], "bBoxSW": [ - 0.0, - -2.464 + 0.001, + -2.465 ] }, "fClef15mb": { @@ -1451,7 +1461,7 @@ 1.004 ], "bBoxSW": [ - 0.0, + 0.001, -2.976 ] }, @@ -1461,8 +1471,8 @@ 1.952 ], "bBoxSW": [ - 0.0, - -2.464 + 0.001, + -2.465 ] }, "fClef8vb": { @@ -1471,7 +1481,7 @@ 1.004 ], "bBoxSW": [ - 0.0, + 0.001, -2.968 ] }, @@ -1481,7 +1491,7 @@ 0.78 ], "bBoxSW": [ - 0.0, + 0.002, -1.824 ] }, @@ -1591,8 +1601,8 @@ 1.02 ], "bBoxSW": [ - 0.0, - 0.0 + -0.0, + -0.0 ] }, "fingering1Italic": { @@ -1601,18 +1611,18 @@ 1.016 ], "bBoxSW": [ - 0.0, + -0.0, 0.0 ] }, "fingering2": { "bBoxNE": [ 0.736, - 1.016 + 1.018 ], "bBoxSW": [ 0.0, - -0.004 + -0.006 ] }, "fingering2Italic": { @@ -1621,7 +1631,7 @@ 1.016 ], "bBoxSW": [ - 0.0, + -0.001, 0.0 ] }, @@ -1638,7 +1648,7 @@ "fingering3Italic": { "bBoxNE": [ 0.78, - 1.008 + 1.012 ], "bBoxSW": [ 0.0, @@ -1652,7 +1662,7 @@ ], "bBoxSW": [ 0.0, - 0.0 + -0.0 ] }, "fingering4Italic": { @@ -1711,7 +1721,7 @@ 1.02 ], "bBoxSW": [ - 0.0, + -0.0, -0.02 ] }, @@ -1767,78 +1777,78 @@ }, "flag1024thDown": { "bBoxNE": [ - 1.232, - 3.212 + 1.235, + 3.213 ], "bBoxSW": [ - 0.0, - -4.564 + -0.0, + -4.567 ] }, "flag1024thDownStraight": { "bBoxNE": [ - 1.22, - 1.568 + 1.223, + 1.57 ], "bBoxSW": [ 0.0, - -4.496 + -4.498 ] }, "flag1024thUp": { "bBoxNE": [ - 1.116, - 4.504 + 1.117, + 4.505 ], "bBoxSW": [ - 0.0, + -0.0, -3.28 ] }, "flag1024thUpStraight": { "bBoxNE": [ - 1.156, - 4.488 + 1.157, + 4.491 ], "bBoxSW": [ - 0.0, - -1.552 + 0.001, + -1.553 ] }, "flag128thDown": { "bBoxNE": [ - 1.232, - 3.212 + 1.235, + 3.213 ], "bBoxSW": [ - 0.0, - -2.36 + -0.0, + -2.363 ] }, "flag128thDownStraight": { "bBoxNE": [ - 1.22, - 1.564 + 1.223, + 1.568 ], "bBoxSW": [ 0.0, - -2.248 + -2.25 ] }, "flag128thUp": { "bBoxNE": [ 1.116, - 2.292 + 2.293 ], "bBoxSW": [ - 0.0, - -3.28 + -0.0, + -3.282 ] }, "flag128thUpStraight": { "bBoxNE": [ - 1.152, - 2.244 + 1.156, + 2.245 ], "bBoxSW": [ 0.0, @@ -1847,18 +1857,18 @@ }, "flag16thDown": { "bBoxNE": [ - 1.232, - 3.212 + 1.235, + 3.213 ], "bBoxSW": [ - 0.0, + -0.0, -0.104 ] }, "flag16thDownStraight": { "bBoxNE": [ - 1.22, - 1.564 + 1.223, + 1.568 ], "bBoxSW": [ 0.0, @@ -1868,197 +1878,197 @@ "flag16thUp": { "bBoxNE": [ 1.116, - 0.048 + 0.049 ], "bBoxSW": [ - 0.0, - -3.28 + -0.0, + -3.281 ] }, "flag16thUpStraight": { "bBoxNE": [ - 1.152, + 1.156, 0.0 ], "bBoxSW": [ 0.0, - -1.548 + -1.55 ] }, "flag256thDown": { "bBoxNE": [ - 1.232, + 1.235, 3.212 ], "bBoxSW": [ - 0.0, - -3.112 + -0.0, + -3.115 ] }, "flag256thDownStraight": { "bBoxNE": [ - 1.22, - 1.568 + 1.223, + 1.57 ], "bBoxSW": [ 0.0, - -2.996 + -2.998 ] }, "flag256thUp": { "bBoxNE": [ 1.116, - 3.04 + 3.041 ], "bBoxSW": [ - 0.0, - -3.28 + -0.0, + -3.281 ] }, "flag256thUpStraight": { "bBoxNE": [ - 1.156, - 2.992 + 1.157, + 2.994 ], "bBoxSW": [ - 0.0, - -1.552 + 0.001, + -1.553 ] }, "flag32ndDown": { "bBoxNE": [ - 1.232, - 3.212 + 1.235, + 3.214 ], "bBoxSW": [ - 0.0, - -0.86 + -0.0, + -0.863 ] }, "flag32ndDownStraight": { "bBoxNE": [ - 1.22, - 1.564 + 1.223, + 1.568 ], "bBoxSW": [ 0.0, - -0.748 + -0.75 ] }, "flag32ndUp": { "bBoxNE": [ - 1.116, - 0.744 + 1.117, + 0.745 ], "bBoxSW": [ 0.0, - -3.284 + -3.285 ] }, "flag32ndUpStraight": { "bBoxNE": [ - 1.152, - 0.748 + 1.156, + 0.75 ], "bBoxSW": [ 0.0, - -1.548 + -1.55 ] }, "flag512thDown": { "bBoxNE": [ - 1.232, - 3.212 + 1.235, + 3.214 ], "bBoxSW": [ - 0.0, - -3.86 + -0.0, + -3.863 ] }, "flag512thDownStraight": { "bBoxNE": [ - 1.22, - 1.564 + 1.223, + 1.568 ], "bBoxSW": [ 0.0, - -3.748 + -3.75 ] }, "flag512thUp": { "bBoxNE": [ - 1.116, - 3.772 + 1.117, + 3.773 ], "bBoxSW": [ - 0.0, - -3.28 + -0.0, + -3.281 ] }, "flag512thUpStraight": { "bBoxNE": [ - 1.156, - 3.74 + 1.157, + 3.742 ], "bBoxSW": [ - 0.0, - -1.552 + 0.001, + -1.553 ] }, "flag64thDown": { "bBoxNE": [ - 1.232, - 3.212 + 1.235, + 3.214 ], "bBoxSW": [ - 0.0, - -1.608 + -0.0, + -1.61 ] }, "flag64thDownStraight": { "bBoxNE": [ - 1.22, - 1.564 + 1.223, + 1.566 ], "bBoxSW": [ 0.0, - -1.5 + -1.502 ] }, "flag64thUp": { "bBoxNE": [ - 1.116, - 1.492 + 1.117, + 1.493 ], "bBoxSW": [ - 0.0, - -3.284 + -0.0, + -3.287 ] }, "flag64thUpStraight": { "bBoxNE": [ - 1.152, - 1.496 + 1.156, + 1.497 ], "bBoxSW": [ 0.0, - -1.548 + -1.55 ] }, "flag8thDown": { "bBoxNE": [ - 1.232, + 1.235, 3.268 ], "bBoxSW": [ - 0.0, - -0.044 + -0.0, + -0.048 ] }, "flag8thDownStraight": { "bBoxNE": [ - 1.22, - 0.816 + 1.223, + 0.818 ], "bBoxSW": [ 0.0, @@ -2067,17 +2077,17 @@ }, "flag8thUp": { "bBoxNE": [ - 1.156, - 0.044 + 1.157, + 0.048 ], "bBoxSW": [ - 0.0, + 0.001, -3.268 ] }, "flag8thUpStraight": { "bBoxNE": [ - 1.152, + 1.156, 0.0 ], "bBoxSW": [ @@ -2107,82 +2117,82 @@ }, "gClef": { "bBoxNE": [ - 2.556, - 4.448 + 2.56, + 4.449 ], "bBoxSW": [ - 0.0, - -2.664 + -0.0, + -2.666 ] }, "gClef15ma": { "bBoxNE": [ 2.56, - 5.348 + 5.351 ], "bBoxSW": [ 0.0, - -2.664 + -2.668 ] }, "gClef15mb": { "bBoxNE": [ - 2.556, - 4.448 + 2.56, + 4.449 ], "bBoxSW": [ - 0.0, - -3.588 + -0.0, + -3.591 ] }, "gClef8va": { "bBoxNE": [ - 2.556, - 5.348 + 2.56, + 5.35 ], "bBoxSW": [ - 0.0, + -0.0, -2.664 ] }, "gClef8vb": { "bBoxNE": [ 2.56, - 4.448 + 4.45 ], "bBoxSW": [ 0.0, - -3.588 + -3.59 ] }, "gClef8vbOld": { "bBoxNE": [ - 4.176, - 4.444 + 4.178, + 4.447 ], "bBoxSW": [ - 0.0, - -2.668 + 0.002, + -2.669 ] }, "gClef8vbParens": { "bBoxNE": [ - 2.556, - 4.444 + 2.56, + 4.448 ], "bBoxSW": [ - 0.0, - -3.684 + -0.0, + -3.687 ] }, "gClefChange": { "bBoxNE": [ - 1.916, - 3.352 + 1.92, + 3.353 ], "bBoxSW": [ - 0.0, - -1.98 + -0.0, + -1.983 ] }, "graceNoteAcciaccaturaStemDown": { @@ -2247,12 +2257,12 @@ }, "keyboardPedalD": { "bBoxNE": [ - 1.404, - 1.856 + 1.405, + 1.859 ], "bBoxSW": [ - 0.0, - -0.032 + -0.001, + -0.036 ] }, "keyboardPedalDot": { @@ -2271,18 +2281,18 @@ 1.268 ], "bBoxSW": [ - 0.0, + -0.002, -0.028 ] }, "keyboardPedalP": { "bBoxNE": [ - 1.8, - 2.18 + 1.801, + 2.181 ], "bBoxSW": [ - 0.0, - -0.036 + -0.0, + -0.038 ] }, "keyboardPedalPed": { @@ -2292,7 +2302,7 @@ ], "bBoxSW": [ 0.0, - -0.036 + -0.039 ] }, "keyboardPedalUp": { @@ -2307,122 +2317,122 @@ }, "mensuralNoteheadMinimaWhite": { "bBoxNE": [ - 1.336, - 0.528 + 1.34, + 0.532 ], "bBoxSW": [ - 0.0, + -0.0, -0.528 ] }, "mensuralNoteheadSemiminimaWhite": { "bBoxNE": [ - 1.336, - 0.528 + 1.34, + 0.531 ], "bBoxSW": [ - 0.0, - -0.528 + -0.0, + -0.529 ] }, "metAugmentationDot": { "bBoxNE": [ - 0.62, - 0.308 + 0.621, + 0.31 ], "bBoxSW": [ - 0.0, - -0.308 + 0.001, + -0.31 ] }, "metNote16thUp": { "bBoxNE": [ 2.844, - 3.7 + 3.704 ], "bBoxSW": [ - 0.0, + 0.001, -0.688 ] }, "metNote32ndUp": { "bBoxNE": [ - 2.844, - 4.572 + 2.846, + 4.573 ], "bBoxSW": [ - 0.0, - -0.688 + 0.001, + -0.691 ] }, "metNote8thUp": { "bBoxNE": [ 2.844, - 3.6 + 3.603 ], "bBoxSW": [ 0.0, - -0.688 + -0.689 ] }, "metNoteDoubleWhole": { "bBoxNE": [ 2.688, - 0.892 + 0.894 ], "bBoxSW": [ 0.0, - -0.888 + -0.89 ] }, "metNoteHalfUp": { "bBoxNE": [ - 1.696, - 3.452 + 1.7, + 3.454 ], "bBoxSW": [ - 0.0, - -0.684 + -0.0, + -0.686 ] }, "metNoteQuarterUp": { "bBoxNE": [ - 1.696, - 3.448 + 1.698, + 3.45 ], "bBoxSW": [ - 0.0, - -0.688 + -0.002, + -0.69 ] }, "metNoteWhole": { "bBoxNE": [ - 1.896, + 1.899, 0.688 ], "bBoxSW": [ - 0.0, + -0.001, -0.688 ] }, "note1024thDown": { "bBoxNE": [ 1.3, - 0.524 + 0.527 ], "bBoxSW": [ 0.0, - -8.02 + -8.022 ] }, "note1024thUp": { "bBoxNE": [ - 2.296, - 8.016 + 2.3, + 8.017 ], "bBoxSW": [ 0.0, - -0.524 + -0.525 ] }, "note128thDown": { @@ -2432,17 +2442,17 @@ ], "bBoxSW": [ 0.0, - -5.816 + -5.817 ] }, "note128thUp": { "bBoxNE": [ - 2.296, - 5.808 + 2.3, + 5.809 ], "bBoxSW": [ 0.0, - -0.524 + -0.525 ] }, "note16thDown": { @@ -2452,37 +2462,37 @@ ], "bBoxSW": [ 0.0, - -3.56 + -3.563 ] }, "note16thUp": { "bBoxNE": [ - 2.296, - 3.56 + 2.3, + 3.563 ], "bBoxSW": [ 0.0, - -0.524 + -0.525 ] }, "note256thDown": { "bBoxNE": [ 1.3, - 0.528 + 0.53 ], "bBoxSW": [ 0.0, - -6.564 + -6.567 ] }, "note256thUp": { "bBoxNE": [ - 2.296, - 6.556 + 2.3, + 6.557 ], "bBoxSW": [ 0.0, - -0.524 + -0.525 ] }, "note32ndDown": { @@ -2492,57 +2502,57 @@ ], "bBoxSW": [ 0.0, - -4.316 + -4.318 ] }, "note32ndUp": { "bBoxNE": [ - 2.296, - 4.264 + 2.3, + 4.265 ], "bBoxSW": [ 0.0, - -0.524 + -0.525 ] }, "note512thDown": { "bBoxNE": [ 1.3, - 0.524 + 0.527 ], "bBoxSW": [ 0.0, - -7.316 + -7.319 ] }, "note512thUp": { "bBoxNE": [ - 2.296, - 7.284 + 2.3, + 7.287 ], "bBoxSW": [ 0.0, - -0.524 + -0.525 ] }, "note64thDown": { "bBoxNE": [ 1.3, - 0.528 + 0.529 ], "bBoxSW": [ 0.0, - -5.064 + -5.065 ] }, "note64thUp": { "bBoxNE": [ - 2.296, - 5.012 + 2.3, + 5.014 ], "bBoxSW": [ 0.0, - -0.524 + -0.525 ] }, "note8thDown": { @@ -2557,7 +2567,7 @@ }, "note8thUp": { "bBoxNE": [ - 2.336, + 2.339, 3.56 ], "bBoxSW": [ @@ -2572,17 +2582,17 @@ ], "bBoxSW": [ 0.0, - -0.708 + -0.712 ] }, "noteDoubleWholeAlt": { "bBoxNE": [ - 1.952, - 0.892 + 1.954, + 0.894 ], "bBoxSW": [ - 0.0, - -0.888 + 0.002, + -0.89 ] }, "noteDoubleWholeSquare": { @@ -2598,37 +2608,37 @@ "noteHalfDown": { "bBoxNE": [ 1.3, - 0.524 + 0.527 ], "bBoxSW": [ 0.0, - -3.46 + -3.461 ] }, "noteHalfUp": { "bBoxNE": [ 1.3, - 3.456 + 3.459 ], "bBoxSW": [ 0.0, - -0.524 + -0.527 ] }, "noteQuarterDown": { "bBoxNE": [ 1.3, - 0.524 + 0.527 ], "bBoxSW": [ 0.0, - -3.452 + -3.455 ] }, "noteQuarterUp": { "bBoxNE": [ - 1.296, - 3.456 + 1.3, + 3.459 ], "bBoxSW": [ 0.0, @@ -2677,41 +2687,41 @@ }, "noteheadDiamondBlack": { "bBoxNE": [ - 1.336, - 0.528 + 1.34, + 0.531 ], "bBoxSW": [ - 0.0, - -0.528 + -0.0, + -0.529 ] }, "noteheadDiamondDoubleWhole": { "bBoxNE": [ - 1.488, - 0.712 + 1.492, + 0.715 ], "bBoxSW": [ - 0.0, - -0.708 + -0.0, + -0.711 ] }, "noteheadDiamondHalf": { "bBoxNE": [ - 1.336, - 0.528 + 1.34, + 0.532 ], "bBoxSW": [ - 0.0, + -0.0, -0.528 ] }, "noteheadDiamondWhole": { "bBoxNE": [ - 1.488, - 0.524 + 1.492, + 0.528 ], "bBoxSW": [ - 0.0, + -0.0, -0.532 ] }, @@ -2722,17 +2732,17 @@ ], "bBoxSW": [ 0.0, - -0.708 + -0.712 ] }, "noteheadDoubleWholeAlt": { "bBoxNE": [ - 1.56, + 1.564, 0.716 ], "bBoxSW": [ - 0.0, - -0.708 + -0.0, + -0.712 ] }, "noteheadDoubleWholeSquare": { @@ -2752,7 +2762,7 @@ ], "bBoxSW": [ 0.0, - -0.528 + -0.532 ] }, "noteheadMoonBlack": { @@ -2787,108 +2797,108 @@ }, "noteheadParenthesisLeft": { "bBoxNE": [ - 0.296, - 0.836 + 0.3, + 0.838 ], "bBoxSW": [ 0.0, - -0.844 + -0.846 ] }, "noteheadParenthesisRight": { "bBoxNE": [ 0.3, - 0.844 + 0.846 ], "bBoxSW": [ 0.0, - -0.836 + -0.838 ] }, "noteheadPlusBlack": { "bBoxNE": [ 1.3, - 0.524 + 0.527 ], "bBoxSW": [ 0.0, - -0.528 + -0.529 ] }, "noteheadRoundBlackDoubleSlashed": { "bBoxNE": [ - 1.36, - 0.828 + 1.361, + 0.831 ], "bBoxSW": [ - -0.3, - -0.828 + -0.301, + -0.831 ] }, "noteheadRoundWhiteDoubleSlashed": { "bBoxNE": [ - 1.36, - 0.828 + 1.361, + 0.831 ], "bBoxSW": [ - -0.3, - -0.828 + -0.301, + -0.831 ] }, "noteheadSlashedBlack1": { "bBoxNE": [ - 1.692, - 0.844 + 1.696, + 0.846 ], "bBoxSW": [ -0.392, - -0.852 + -0.854 ] }, "noteheadSlashedBlack2": { "bBoxNE": [ - 1.692, - 0.848 + 1.694, + 0.849 ], "bBoxSW": [ - -0.392, - -0.848 + -0.394, + -0.851 ] }, "noteheadSlashedDoubleWhole1": { "bBoxNE": [ - 1.824, - 0.848 + 1.825, + 0.85 ], "bBoxSW": [ - -0.26, - -0.848 + -0.263, + -0.851 ] }, "noteheadSlashedDoubleWhole2": { "bBoxNE": [ - 1.824, - 0.848 + 1.826, + 0.849 ], "bBoxSW": [ - -0.26, - -0.848 + -0.262, + -0.851 ] }, "noteheadSlashedHalf1": { "bBoxNE": [ - 1.692, - 0.848 + 1.696, + 0.849 ], "bBoxSW": [ -0.392, - -0.848 + -0.852 ] }, "noteheadSlashedHalf2": { "bBoxNE": [ - 1.692, - 0.844 + 1.696, + 0.848 ], "bBoxSW": [ -0.392, @@ -2897,22 +2907,22 @@ }, "noteheadSlashedWhole1": { "bBoxNE": [ - 1.788, - 0.852 + 1.79, + 0.854 ], "bBoxSW": [ - -0.296, - -0.844 + -0.298, + -0.846 ] }, "noteheadSlashedWhole2": { "bBoxNE": [ - 1.788, - 0.852 + 1.79, + 0.854 ], "bBoxSW": [ - -0.296, - -0.844 + -0.298, + -0.846 ] }, "noteheadSquareBlack": { @@ -2938,27 +2948,27 @@ "noteheadTriangleLeftBlack": { "bBoxNE": [ 1.356, - 0.484 + 0.487 ], "bBoxSW": [ 0.0, - -0.544 + -0.545 ] }, "noteheadTriangleLeftWhite": { "bBoxNE": [ 1.356, - 0.484 + 0.487 ], "bBoxSW": [ 0.0, - -0.544 + -0.545 ] }, "noteheadTriangleRightBlack": { "bBoxNE": [ 1.356, - 0.484 + 0.488 ], "bBoxSW": [ 0.0, @@ -2968,11 +2978,11 @@ "noteheadTriangleRightWhite": { "bBoxNE": [ 1.356, - 0.484 + 0.487 ], "bBoxSW": [ 0.0, - -0.544 + -0.545 ] }, "noteheadTriangleRoundDownBlack": { @@ -2981,7 +2991,7 @@ 0.488 ], "bBoxSW": [ - 0.0, + -0.0, -0.544 ] }, @@ -3077,72 +3087,92 @@ }, "ornamentDoubleObliqueLinesAfterNote": { "bBoxNE": [ - 2.076, - 1.9 + 2.077, + 1.904 ], "bBoxSW": [ - 0.0, - 0.0 + 0.001, + -0.0 ] }, "ornamentDoubleObliqueLinesBeforeNote": { "bBoxNE": [ - 2.072, + 2.076, 1.904 ], "bBoxSW": [ - 0.0, + -0.0, 0.0 ] }, + "ornamentDownCurve": { + "bBoxNE": [ + 1.68, + 0.583 + ], + "bBoxSW": [ + -0.0, + 0.003 + ] + }, "ornamentHaydn": { "bBoxNE": [ - 2.008, - 1.0 + 2.012, + 0.947 ], "bBoxSW": [ 0.0, - 0.0 + -0.053 ] }, "ornamentHookAfterNote": { "bBoxNE": [ - 1.992, + 1.995, 1.312 ], "bBoxSW": [ - 0.0, + 0.003, 0.0 ] }, "ornamentHookBeforeNote": { "bBoxNE": [ - 1.488, - 1.416 + 1.492, + 1.42 + ], + "bBoxSW": [ + -0.0, + -0.0 + ] + }, + "ornamentLeftFacingHalfCircle": { + "bBoxNE": [ + 0.58, + 1.68 ], "bBoxSW": [ 0.0, - 0.0 + -0.0 ] }, "ornamentLeftFacingHook": { "bBoxNE": [ 0.88, - 1.884 + 1.887 ], "bBoxSW": [ 0.016, - 0.0 + -0.001 ] }, "ornamentLowLeftConcaveStroke": { "bBoxNE": [ - 1.172, - 0.984 + 1.156, + 0.833 ], "bBoxSW": [ - 0.0, - 0.108 + 0.001, + 0.109 ] }, "ornamentMordent": { @@ -3157,41 +3187,71 @@ }, "ornamentObliqueLineAfterNote": { "bBoxNE": [ - 1.212, - 1.9 + 1.216, + 1.904 + ], + "bBoxSW": [ + -0.0, + -0.0 + ] + }, + "ornamentObliqueLineBeforeNote": { + "bBoxNE": [ + 1.216, + 1.904 + ], + "bBoxSW": [ + -0.0, + -0.0 + ] + }, + "ornamentObliqueLineHorizAfterNote": { + "bBoxNE": [ + 1.876, + 0.636 ], "bBoxSW": [ 0.0, 0.0 ] }, - "ornamentObliqueLineBeforeNote": { + "ornamentObliqueLineHorizBeforeNote": { "bBoxNE": [ - 1.212, - 1.9 + 1.876, + 0.636 ], "bBoxSW": [ 0.0, 0.0 ] }, - "ornamentPinceCouperin": { + "ornamentOriscus": { "bBoxNE": [ - 2.108, - 1.624 + 2.012, + 0.894 ], "bBoxSW": [ 0.0, + -0.0 + ] + }, + "ornamentPinceCouperin": { + "bBoxNE": [ + 2.112, + 1.628 + ], + "bBoxSW": [ + -0.0, 0.0 ] }, "ornamentPortDeVoixV": { "bBoxNE": [ 1.696, - 1.9 + 1.902 ], "bBoxSW": [ - 0.0, + -0.002, -0.004 ] }, @@ -3205,34 +3265,64 @@ 0.0 ] }, + "ornamentPrecompCadence": { + "bBoxNE": [ + 2.816, + 0.993 + ], + "bBoxSW": [ + 0.0, + 0.001 + ] + }, + "ornamentPrecompDoubleCadenceLowerPrefix": { + "bBoxNE": [ + 3.535, + 0.992 + ], + "bBoxSW": [ + -0.001, + 0.0 + ] + }, + "ornamentPrecompDoubleCadenceUpperPrefix": { + "bBoxNE": [ + 3.428, + 0.993 + ], + "bBoxSW": [ + -0.0, + 0.001 + ] + }, "ornamentPrecompInvertedMordentUpperPrefix": { "bBoxNE": [ 2.812, - 1.552 + 1.556 ], "bBoxSW": [ - 0.0, - -0.288 + -0.002, + -0.289 ] }, "ornamentPrecompMordentUpperPrefix": { "bBoxNE": [ 2.808, - 1.552 + 1.556 ], "bBoxSW": [ - -0.004, + -0.005, 0.0 ] }, "ornamentPrecompPortDeVoixMordent": { "bBoxNE": [ - 3.68, - 1.28 + 3.673, + 1.283 ], "bBoxSW": [ - 0.0, - -0.288 + 0.002, + -0.289 ] }, "ornamentPrecompSlideTrillBach": { @@ -3241,33 +3331,33 @@ 1.284 ], "bBoxSW": [ - 0.0, + 0.001, -0.632 ] }, "ornamentPrecompSlideTrillDAnglebert": { "bBoxNE": [ 2.648, - 0.992 + 0.993 ], "bBoxSW": [ - 0.0, - -0.632 + 0.001, + -0.633 ] }, "ornamentPrecompTrillLowerSuffix": { "bBoxNE": [ - 2.256, - 0.992 + 2.26, + 0.994 ], "bBoxSW": [ - 0.0, - -0.684 + -0.0, + -0.686 ] }, "ornamentPrecompTrillSuffixDandrieu": { "bBoxNE": [ - 2.644, + 2.647, 1.624 ], "bBoxSW": [ @@ -3278,20 +3368,40 @@ "ornamentPrecompTrillWithMordent": { "bBoxNE": [ 2.612, - 1.28 + 1.282 + ], + "bBoxSW": [ + -0.0, + -0.29 + ] + }, + "ornamentQuilisma": { + "bBoxNE": [ + 2.644, + 2.088 + ], + "bBoxSW": [ + -0.0, + -0.001 + ] + }, + "ornamentRightFacingHalfCircle": { + "bBoxNE": [ + 0.58, + 1.68 ], "bBoxSW": [ 0.0, - -0.288 + -0.0 ] }, "ornamentRightFacingHook": { "bBoxNE": [ - 0.868, + 0.872, 1.888 ], "bBoxSW": [ - 0.004, + 0.008, 0.0 ] }, @@ -3307,18 +3417,28 @@ }, "ornamentShake3": { "bBoxNE": [ - 1.216, + 1.22, 1.22 ], "bBoxSW": [ - 0.0, + -0.0, 0.0 ] }, + "ornamentShakeMuffat1": { + "bBoxNE": [ + 1.024, + 1.911 + ], + "bBoxSW": [ + -0.0, + 0.247 + ] + }, "ornamentShortObliqueLineAfterNote": { "bBoxNE": [ 0.74, - 1.156 + 1.16 ], "bBoxSW": [ 0.0, @@ -3327,11 +3447,11 @@ }, "ornamentShortObliqueLineBeforeNote": { "bBoxNE": [ - 0.74, + 0.744, 1.16 ], "bBoxSW": [ - 0.0, + 0.004, 0.0 ] }, @@ -3415,24 +3535,34 @@ 0.0 ] }, + "ornamentVerticalLine": { + "bBoxNE": [ + 0.146, + 1.556 + ], + "bBoxSW": [ + 0.0, + 0.435 + ] + }, "ornamentZigZagLineNoRightEnd": { "bBoxNE": [ 0.752, - 0.984 + 0.988 ], "bBoxSW": [ -0.172, - 0.0 + -0.0 ] }, "ornamentZigZagLineWithRightEnd": { "bBoxNE": [ - 1.04, + 1.043, 0.992 ], "bBoxSW": [ -0.008, - 0.0 + -0.001 ] }, "ottava": { @@ -3491,7 +3621,7 @@ 1.076 ], "bBoxSW": [ - 0.0, + -0.0, 0.0 ] }, @@ -3558,7 +3688,7 @@ "repeat1Bar": { "bBoxNE": [ 1.924, - 0.996 + 1.0 ], "bBoxSW": [ 0.0, @@ -3568,7 +3698,7 @@ "repeat2Bars": { "bBoxNE": [ 2.94, - 0.996 + 1.0 ], "bBoxSW": [ 0.0, @@ -3578,11 +3708,41 @@ "repeat4Bars": { "bBoxNE": [ 4.972, - 0.996 + 1.0 + ], + "bBoxSW": [ + 0.0, + -1.0 + ] + }, + "repeatBarLowerDot": { + "bBoxNE": [ + 0.506, + -0.256 + ], + "bBoxSW": [ + 0.002, + -0.76 + ] + }, + "repeatBarSlash": { + "bBoxNE": [ + 1.924, + 1.0 ], "bBoxSW": [ 0.0, - -0.996 + -1.0 + ] + }, + "repeatBarUpperDot": { + "bBoxNE": [ + 0.506, + 0.752 + ], + "bBoxSW": [ + 0.002, + 0.248 ] }, "repeatDot": { @@ -3607,91 +3767,91 @@ }, "rest1024th": { "bBoxNE": [ - 2.532, - 4.9 + 2.534, + 4.903 ], "bBoxSW": [ - 0.0, + 0.002, -4.016 ] }, "rest128th": { "bBoxNE": [ - 1.896, - 2.864 + 1.899, + 2.867 ], "bBoxSW": [ - 0.0, - -3.032 + -0.002, + -3.036 ] }, "rest16th": { "bBoxNE": [ - 1.372, - 0.812 + 1.376, + 0.815 ], "bBoxSW": [ 0.004, - -2.028 + -2.029 ] }, "rest256th": { "bBoxNE": [ - 2.104, - 2.892 + 2.106, + 2.893 ], "bBoxSW": [ - 0.0, - -3.988 + -0.002, + -3.99 ] }, "rest32nd": { "bBoxNE": [ - 1.56, - 1.836 + 1.563, + 1.839 ], "bBoxSW": [ 0.0, - -2.028 + -2.029 ] }, "rest512th": { "bBoxNE": [ - 2.316, + 2.318, 3.868 ], "bBoxSW": [ - 0.0, - -4.012 + 0.001, + -4.015 ] }, "rest64th": { "bBoxNE": [ - 1.688, - 1.852 + 1.69, + 1.855 ], "bBoxSW": [ - 0.0, + -0.002, -3.032 ] }, "rest8th": { "bBoxNE": [ 1.104, - 0.812 + 0.814 ], "bBoxSW": [ 0.0, - -1.02 + -1.022 ] }, "restDoubleWhole": { "bBoxNE": [ - 0.5, + 0.501, 1.048 ], "bBoxSW": [ - 0.0, + 0.001, -0.044 ] }, @@ -3728,51 +3888,51 @@ "restLonga": { "bBoxNE": [ 0.5, - 0.996 + 0.999 ], "bBoxSW": [ 0.0, - -1.0 + -1.001 ] }, "restMaxima": { "bBoxNE": [ - 1.796, + 1.799, 1.0 ], "bBoxSW": [ - 0.0, + -0.001, -1.0 ] }, "restQuarter": { "bBoxNE": [ 0.94, - 1.604 + 1.605 ], "bBoxSW": [ 0.0, - -1.324 + -1.325 ] }, "restQuarterOld": { "bBoxNE": [ 1.104, - 0.812 + 0.814 ], "bBoxSW": [ - 0.0, - -1.02 + -0.0, + -1.022 ] }, "restQuarterZ": { "bBoxNE": [ - 1.264, - 0.828 + 1.268, + 0.829 ], "bBoxSW": [ - 0.0, - -0.804 + -0.0, + -0.807 ] }, "restWhole": { @@ -3797,12 +3957,12 @@ }, "reversedBrace": { "bBoxNE": [ - 0.248, - 3.976 + 0.25, + 3.98 ], "bBoxSW": [ 0.0, - 0.016 + 0.019 ] }, "reversedBracketBottom": { @@ -3847,12 +4007,12 @@ }, "segnoSerpent2": { "bBoxNE": [ - 2.216, + 2.217, 5.124 ], "bBoxSW": [ - 0.0, - -1.12 + 0.001, + -1.122 ] }, "stringsDownBow": { @@ -3928,31 +4088,31 @@ "systemDivider": { "bBoxNE": [ 4.168, - 4.472 + 4.475 ], "bBoxSW": [ 0.0, - -0.388 + -0.389 ] }, "systemDividerExtraLong": { "bBoxNE": [ 9.104, - 4.212 + 4.213 ], "bBoxSW": [ 0.0, - -0.196 + -0.199 ] }, "systemDividerLong": { "bBoxNE": [ 6.156, - 4.44 + 4.442 ], "bBoxSW": [ - 0.0, - -0.36 + -0.0, + -0.362 ] }, "timeSig0": { @@ -3987,7 +4147,7 @@ }, "timeSig3": { "bBoxNE": [ - 1.456, + 1.457, 0.976 ], "bBoxSW": [ @@ -3998,10 +4158,10 @@ "timeSig4": { "bBoxNE": [ 1.768, - 0.992 + 0.996 ], "bBoxSW": [ - 0.052, + 0.055, -0.992 ] }, @@ -4027,11 +4187,11 @@ }, "timeSig7": { "bBoxNE": [ - 1.46, + 1.462, 1.004 ], "bBoxSW": [ - 0.056, + 0.058, -1.0 ] }, @@ -4088,11 +4248,11 @@ "tremolo1": { "bBoxNE": [ 1.16, - 0.384 + 0.386 ], "bBoxSW": [ 0.0, - -0.368 + -0.37 ] }, "tremolo2": { @@ -4108,7 +4268,7 @@ "tremolo3": { "bBoxNE": [ 1.16, - 1.128 + 1.132 ], "bBoxSW": [ 0.0, @@ -4128,7 +4288,7 @@ "tremolo5": { "bBoxNE": [ 1.16, - 1.888 + 1.892 ], "bBoxSW": [ 0.0, @@ -4137,52 +4297,52 @@ }, "tremoloDivisiDots2": { "bBoxNE": [ - 0.98, - 0.308 + 0.984, + 0.312 ], "bBoxSW": [ 0.0, - 0.0 + -0.0 ] }, "tremoloDivisiDots3": { "bBoxNE": [ - 1.664, - 0.308 + 1.668, + 0.312 ], "bBoxSW": [ 0.0, - 0.0 + -0.0 ] }, "tremoloDivisiDots4": { "bBoxNE": [ - 2.336, - 0.308 + 2.34, + 0.312 ], "bBoxSW": [ 0.0, - 0.0 + -0.0 ] }, "tremoloDivisiDots6": { "bBoxNE": [ - 1.664, - 0.98 + 1.668, + 0.984 ], "bBoxSW": [ 0.0, - 0.0 + -0.0 ] }, "tremoloFingered1": { "bBoxNE": [ 1.16, - 0.384 + 0.386 ], "bBoxSW": [ 0.0, - -0.368 + -0.37 ] }, "tremoloFingered2": { @@ -4198,7 +4358,7 @@ "tremoloFingered3": { "bBoxNE": [ 1.16, - 1.128 + 1.132 ], "bBoxSW": [ 0.0, @@ -4218,7 +4378,7 @@ "tremoloFingered5": { "bBoxNE": [ 1.16, - 1.888 + 1.892 ], "bBoxSW": [ 0.0, @@ -4251,7 +4411,7 @@ 1.448 ], "bBoxSW": [ - 0.0, + -0.001, 0.0 ] }, @@ -4347,12 +4507,12 @@ }, "unpitchedPercussionClef2": { "bBoxNE": [ - 1.212, - 1.752 + 1.216, + 1.754 ], "bBoxSW": [ - 0.0, - -1.752 + -0.0, + -1.754 ] }, "ventiduesima": { @@ -4361,8 +4521,8 @@ 1.696 ], "bBoxSW": [ - 0.0, - 0.0 + -0.001, + -0.001 ] }, "ventiduesimaAlta": { @@ -4371,8 +4531,8 @@ 1.696 ], "bBoxSW": [ - 0.0, - 0.0 + -0.001, + -0.001 ] }, "ventiduesimaBassa": { @@ -4381,7 +4541,7 @@ 1.696 ], "bBoxSW": [ - 0.0, + -0.001, -0.028 ] }, @@ -4391,7 +4551,7 @@ 1.696 ], "bBoxSW": [ - 0.0, + -0.001, -0.028 ] }, From 192a4d7c08914941cec683c2b0dcb454451117d8 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 21 Feb 2022 15:01:56 +0100 Subject: [PATCH 396/403] Use Python3 by default * Specific Python version can be selected with -DPYTHON_VERSION=X.X (e.g. -DPYTHON_VERSION=2.7) * Require CMake 3.12 or later --- cmake/CMakeLists.txt | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 2a37718f715..3cc83dae8c9 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -19,7 +19,7 @@ option(NO_MXL_SUPPORT "Disable compressed MusicXML support" O option(NO_HUMDRUM_SUPPORT "Disable Humdrum support" OFF) option(MUSICXML_DEFAULT_HUMDRUM "Enable MusicXML to Humdrum by default" OFF) option(NO_RUNTIME "Disable runtime clock support" ON) -option(BUILD_AS_LIBRARY "Build verovio as library" OFF) +option(BUILD_AS_LIBRARY "Build Verovio as library" OFF) if (NO_HUMDRUM_SUPPORT AND MUSICXML_DEFAULT_HUMDRUM) message(SEND_ERROR "Default MusicXML to Humdrum cannot be enabled by default without Humdrum support") @@ -203,7 +203,10 @@ elseif (BUILD_AS_PYTHON) include(${SWIG_USE_FILE}) set(CMAKE_SWIG_FLAGS "") - if(Python_VERSION VERSION_GREATER_EQUAL 3) + set(PYTHON_VERSION "3" CACHE STRING "Python Version to use") + find_package(Python EXACT ${PYTHON_VERSION} MODULE REQUIRED) + + if(PYTHON_VERSION VERSION_GREATER_EQUAL 3) list(APPEND CMAKE_SWIG_FLAGS "-py3;-DPY3") endif() @@ -212,20 +215,13 @@ elseif (BUILD_AS_PYTHON) # needed for static build on linux add_definitions(-fPIC) - ### For building for specific version of Python (example for 3.4 on OS X with MacPorts installation) - #set(PYTHON_INCLUDE_DIR /opt/local/Library/Frameworks/Python.framework/Versions/3.4/include/python3.4m) - #set(PYTHON_LIBRARY /opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/libpython3.4.dylib) - #include_directories(${PYTHON_INCLUDE_DIR}) - #swig_add_library(verovio_module_custom LANGUAGE python TYPE MODULE SOURCES ../bindings/python/verovio.i) - #swig_link_libraries(verovio_module_custom verovio ${PYTHON_LIBRARY}) - ### For building for found version of Python (comment when specific version is set) - find_package(PythonLibs) - include_directories(${PYTHON_INCLUDE_PATH}) - message(STATUS "***** Building for Python ${PYTHONLIBS_VERSION_STRING} *****") - string(REPLACE "." "_" OUTPUT_VERSION_STRING ${PYTHONLIBS_VERSION_STRING}) + find_package(Python COMPONENTS Interpreter Development) + include_directories(${Python_INCLUDE_DIRS}) + message(STATUS "***** Building for Python ${Python_VERSION} *****") + string(REPLACE "." "_" OUTPUT_VERSION_STRING ${Python_VERSION}) swig_add_library(verovio_module_${OUTPUT_VERSION_STRING} LANGUAGE python TYPE MODULE SOURCES ../bindings/python/verovio.i) - swig_link_libraries(verovio_module_${OUTPUT_VERSION_STRING} verovio ${PYTHON_LIBRARIES}) + swig_link_libraries(verovio_module_${OUTPUT_VERSION_STRING} verovio ${Python_LIBRARIES}) add_library(verovio STATIC ../tools/c_wrapper.cpp ${all_SRC}) From 8671755a3a7ee55229c15b4ba0948d3875184c6a Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 21 Feb 2022 16:16:22 +0100 Subject: [PATCH 397/403] Make sure redoLayout with encoded break option happens only with encoded layout * Expects a `` --- src/toolkit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/toolkit.cpp b/src/toolkit.cpp index c7969421804..9347f6bd81e 100644 --- a/src/toolkit.cpp +++ b/src/toolkit.cpp @@ -1201,7 +1201,7 @@ void Toolkit::RedoLayout(const std::string &jsonOptions) if (m_options->m_breaks.GetValue() == BREAKS_line) { m_doc.CastOffLineDoc(); } - else if (m_options->m_breaks.GetValue() == BREAKS_encoded) { + else if (m_options->m_breaks.GetValue() == BREAKS_encoded && m_doc.FindDescendantByType(PB)) { m_doc.CastOffEncodingDoc(); } else if (m_options->m_breaks.GetValue() == BREAKS_smart) { From 80d821eaa79c1fa3f732b038de876f174068ccbd Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 21 Feb 2022 18:00:56 +0100 Subject: [PATCH 398/403] Add option to include an additional CSS to the SVG --- include/vrv/options.h | 1 + include/vrv/svgdevicecontext.h | 7 +++++++ src/options.cpp | 6 +++++- src/svgdevicecontext.cpp | 7 +++++++ src/toolkit.cpp | 5 +++++ 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/include/vrv/options.h b/include/vrv/options.h index 61dcdf1cc7b..9da64cb0cdd 100644 --- a/include/vrv/options.h +++ b/include/vrv/options.h @@ -616,6 +616,7 @@ class Options { OptionBool m_shrinkToFit; OptionBool m_staccatoCenter; OptionBool m_svgBoundingBoxes; + OptionString m_svgCss; OptionBool m_svgViewBox; OptionBool m_svgHtml5; OptionBool m_svgFormatRaw; diff --git a/include/vrv/svgdevicecontext.h b/include/vrv/svgdevicecontext.h index 6932f7c7857..2ac72d7674c 100644 --- a/include/vrv/svgdevicecontext.h +++ b/include/vrv/svgdevicecontext.h @@ -217,6 +217,11 @@ class SvgDeviceContext : public DeviceContext { */ void SetRemoveXlink(bool removeXlink) { m_removeXlink = removeXlink; } + /** + * Setter for an additional CSS + */ + void SetCss(std::string css) { m_css = css; } + /** * Copies additional attributes of defined elements to the SVG, each string in the form "elementName@attribute" * (e.g., "note@pname") @@ -304,6 +309,8 @@ class SvgDeviceContext : public DeviceContext { bool m_svgViewBox; // output HTML5 data-* attributes bool m_html5; + // additional CSS + std::string m_css; // copy additional attributes of given elements to the SVG, in the form "note@pname; layer@n" std::multimap m_svgAdditionalAttributes; // format output as raw, stripping extraneous whitespace and non-content newlines diff --git a/src/options.cpp b/src/options.cpp index 65691da05a9..248c1f7bf6b 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -1066,6 +1066,10 @@ Options::Options() m_svgBoundingBoxes.Init(false); this->Register(&m_svgBoundingBoxes, "svgBoundingBoxes", &m_general); + m_svgCss.SetInfo("SVG additional CSS", "CSS (as a string) to be added to the SVG output"); + m_svgCss.Init(""); + this->Register(&m_svgCss, "svgCss", &m_general); + m_svgViewBox.SetInfo("Use viewbox on svg root", "Use viewBox on svg root element for easy scaling of document"); m_svgViewBox.Init(false); this->Register(&m_svgViewBox, "svgViewBox", &m_general); @@ -1258,7 +1262,7 @@ Options::Options() this->Register(&m_lyricVerseCollapse, "lyricVerseCollapse", &m_generalLayout); m_measureMinWidth.SetInfo("Measure min width", "The minimal measure width in MEI units"); - m_measureMinWidth.Init(15, 1, 30); + m_measureMinWidth.Init(1, 1, 30); this->Register(&m_measureMinWidth, "minMeasureWidth", &m_generalLayout); m_mnumInterval.SetInfo("Measure Number Interval", "How frequently to place measure numbers"); diff --git a/src/svgdevicecontext.cpp b/src/svgdevicecontext.cpp index 96493e29e7b..d6efc667304 100644 --- a/src/svgdevicecontext.cpp +++ b/src/svgdevicecontext.cpp @@ -405,6 +405,13 @@ void SvgDeviceContext::StartPage() m_currentNode = m_svgNodeStack.back(); } + if (!m_css.empty()) { + m_currentNode = m_currentNode.append_child("style"); + m_currentNode.append_attribute("type") = "text/css"; + m_currentNode.append_child(pugi::node_pcdata).set_value(m_css.c_str()); + m_currentNode = m_svgNodeStack.back(); + } + // a graphic for definition scaling m_currentNode = m_currentNode.append_child("svg"); m_svgNodeStack.push_back(m_currentNode); diff --git a/src/toolkit.cpp b/src/toolkit.cpp index 9347f6bd81e..50d8863deaa 100644 --- a/src/toolkit.cpp +++ b/src/toolkit.cpp @@ -1303,6 +1303,11 @@ std::string Toolkit::RenderToSVG(int pageNo, bool xmlDeclaration) svg.SetSvgBoundingBoxes(true); } + // set the additional CSS if any + if (!m_options->m_svgCss.GetValue().empty()) { + svg.SetCss(m_options->m_svgCss.GetValue()); + } + if (m_options->m_svgViewBox.GetValue()) { svg.SetSvgViewBox(true); } From 342411176fd3cc4a9d209a237639d359381231b7 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 21 Feb 2022 18:58:16 +0100 Subject: [PATCH 399/403] Revert overlooked change in default measure min width --- src/options.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/options.cpp b/src/options.cpp index 248c1f7bf6b..1d642b06676 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -1262,7 +1262,7 @@ Options::Options() this->Register(&m_lyricVerseCollapse, "lyricVerseCollapse", &m_generalLayout); m_measureMinWidth.SetInfo("Measure min width", "The minimal measure width in MEI units"); - m_measureMinWidth.Init(1, 1, 30); + m_measureMinWidth.Init(15, 1, 30); this->Register(&m_measureMinWidth, "minMeasureWidth", &m_generalLayout); m_mnumInterval.SetInfo("Measure Number Interval", "How frequently to place measure numbers"); From f59abf51b00376057dd320f0fe43e6832e48397b Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 21 Feb 2022 20:04:21 +0100 Subject: [PATCH 400/403] Fix measureMinWidth option registration name [skip-ci] --- src/options.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/options.cpp b/src/options.cpp index 1d642b06676..1579ccf6f07 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -1263,7 +1263,7 @@ Options::Options() m_measureMinWidth.SetInfo("Measure min width", "The minimal measure width in MEI units"); m_measureMinWidth.Init(15, 1, 30); - this->Register(&m_measureMinWidth, "minMeasureWidth", &m_generalLayout); + this->Register(&m_measureMinWidth, "measureMinWidth", &m_generalLayout); m_mnumInterval.SetInfo("Measure Number Interval", "How frequently to place measure numbers"); m_mnumInterval.Init(0, 0, 64, false); From 250c634138a4fc802a49acaae0e10e0453d17783 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Mon, 21 Feb 2022 20:56:25 +0100 Subject: [PATCH 401/403] Update changelog [skip-ci] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17afede4864..dfa0b66bdc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,12 +7,18 @@ * Support for `@stem.sameas` on notes for orchestra scores * Support for MIDI output of arpeggios (@eNote-GmBH) * Support for tuplets in ABC importer (@eNote-GmBH) +* Support for `beamSpan` (@eNote-GmBH) +* Support for lyrics, tuplets and multiple tunes (`mdiv`) in ABC import (@eNote-GmBH) * Improved double stemmed beams (@eNote-GmBH) * Improved tablature MIDI output (@paul-bayleaf) * Improved PAE importer (nested beams, mensural dots, stemless notes) +* Improved vertical positioning with half staff spacing above and below the systems +* Improved justification (@eNote-GmBH) +* Improved handling of the SMUFL fonts (@eNote-GmBH) * Additional parameters to the redoLayout method for faster cached layout redoing * Additional parameters to the renderToTimemap method for including rests and measure * Additional ids for rests and measure added to the getElementsAtTime methods +* Option --svg-css for passing an additional CSS to be included in the SVG output * Preliminary support for stems and beam for guitar tablature * Preliminary support for tablature MusicXML import (@paul-bayleaf) From 40bb1a6bdee3f7a8dd9626de80794519f14b7acd Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 22 Feb 2022 12:23:27 +0100 Subject: [PATCH 402/403] Adjust emscripten build script to support verovio-humdrum NPM package --- emscripten/buildToolkit | 11 +++--- emscripten/npm-dev/README.md | 35 -------------------- emscripten/npm-hum/README.md | 27 +++++++++++++++ emscripten/{npm-dev => npm-hum}/package.json | 13 ++++---- emscripten/npm/README.md | 12 +------ emscripten/npm/package.json | 4 +-- 6 files changed, 44 insertions(+), 58 deletions(-) delete mode 100644 emscripten/npm-dev/README.md create mode 100644 emscripten/npm-hum/README.md rename emscripten/{npm-dev => npm-hum}/package.json (60%) diff --git a/emscripten/buildToolkit b/emscripten/buildToolkit index e1d0928ac25..167895776e7 100755 --- a/emscripten/buildToolkit +++ b/emscripten/buildToolkit @@ -88,8 +88,10 @@ $LFLAGS .= " -s TOTAL_STACK=128MB"; $LFLAGS .= " -s WASM=0"; $LFLAGS .= " --memory-init-file 0"; -# Process command-line options: +# Check that -w and -l and not enabled together +die "ERROR: option -w cannot be enabled with -l.\n" if ($wasmQ && $lightQ); +# Process command-line options: if ($wasmQ) { print "Creating WASM toolkit version\n"; # We can try to find the cause of integer overflow runtime errors with @@ -117,6 +119,7 @@ if ($chattyQ) { } if (!$nohumdrum) { + print "Creating toolkit version with humdrum\n"; $FLAGS_NAME .= "-hum"; } @@ -131,7 +134,7 @@ my $DATA_DIR = "data"; my $BUILD_DIR = "build"; $BUILD_DIR .= "/$VERSION" if $VERSION; my $NPM = "npm"; -$NPM .= "-dev" if not($VERSION); +$NPM .= "-hum" if !$nohumdrum; print "Compiled files will be written to $BUILD_DIR\n"; @@ -222,8 +225,8 @@ if ($? == 0) { # the wrapper is necessary with closure 1 for avoiding to conflict with globals `cat $BUILD_DIR/verovio.js verovio-js-start.js verovio-proxy.js > $BUILD_DIR/$FILENAME`; - # wrap the npm package (but not with wasm build and without humdrum for now) - if ($wasmQ && !$lightQ && $nohumdrum) { + # wrap the npm package (only for wasm builds) + if ($wasmQ) { print "Building $NPM package\n"; # the cat order is different for the npm package because we want to wrap the Module in the init function `cat verovio-npm-start.js $BUILD_DIR/verovio.js verovio-proxy.js verovio-npm-end.js > $NPM/index.js`; diff --git a/emscripten/npm-dev/README.md b/emscripten/npm-dev/README.md deleted file mode 100644 index a1313fd57ac..00000000000 --- a/emscripten/npm-dev/README.md +++ /dev/null @@ -1,35 +0,0 @@ -** Please use the [verovio](https://www.npmjs.com/package/verovio) package instead ** - -*** - -This is an NPM of the development version of the Verovio JavaScript toolkit. - -Verovio is a fast, portable and lightweight library for engraving [Music Encoding Initiative (MEI)](http://www.music-encoding.org) music scores into SVG. - -See it running in the [MEI Viewer](http://www.verovio.org/mei-viewer.xhtml) and check out the [tutorial](http://www.verovio.org/tutorial.xhtml) for its web integration and for enabling user interaction. - -## Usage - -```javascript -var verovio = require('verovio-dev'); - -var vrvToolkit = new verovio.toolkit(); - -mei = fs.readFileSync("hello.mei"); - -vrvToolkit.loadData(mei.toString()); - -svg = vrvToolkit.renderPage(1, {}); - -fs.writeFileSync("hello.svg", svg); -``` - -### Memory allocation - -The memory available for Verovio can be increased during import by passing a MB value to the `init` function. - -```javascript -var verovio = require('verovio-dev').init(512); -``` - -The value has to be less than 1024MB. diff --git a/emscripten/npm-hum/README.md b/emscripten/npm-hum/README.md new file mode 100644 index 00000000000..92572354daf --- /dev/null +++ b/emscripten/npm-hum/README.md @@ -0,0 +1,27 @@ +This is an NPM of the stable version of the Verovio JavaScript toolkit with Humdrum support. + +[Verovio](https://www.verovio.org/) is a fast, portable and lightweight library for engraving [Music Encoding Initiative (MEI)](http://www.music-encoding.org) music scores into SVG. + +This version of the toolkit includes Humdrum support. See it running in the [Verovio Humdrum Viewer](http://verovio.humdrum.org/). + +## Usage + +```javascript +var verovio = require( 'verovio-humdrum' ); +var fs = require( 'fs' ); + +/* Wait for verovio to load */ +verovio.module.onRuntimeInitialized = function () +{ + /* create the toolkit instance */ + var vrvToolkit = new verovio.toolkit(); + /* read the Humdrum file */ + krn = fs.readFileSync("hello.krn"); + /* load the Humdrum data as string into the toolkit */ + vrvToolkit.loadData(krn.toString()); + /* render the fist page as SVG */ + svg = vrvToolkit.renderToSVG(1, {}); + /* save the SVG into a file */ + fs.writeFileSync("hello.svg", svg); +} +``` \ No newline at end of file diff --git a/emscripten/npm-dev/package.json b/emscripten/npm-hum/package.json similarity index 60% rename from emscripten/npm-dev/package.json rename to emscripten/npm-hum/package.json index 25b984019be..3620ebace27 100644 --- a/emscripten/npm-dev/package.json +++ b/emscripten/npm-hum/package.json @@ -1,7 +1,7 @@ { - "name": "verovio-dev", - "version": "2.2.0-6", - "description": "This is the development version of the verovio package", + "name": "verovio-humdrum", + "version": "3.9.0", + "description": "This is the stable version of the verovio package with humdrum support", "main": "index.js", "keywords": [ "music", @@ -9,9 +9,10 @@ "music engraving", "mei", "music encoding", - "svg" + "svg", + "humdrum" ], - "author": "Laurent Pugin", + "author": "Laurent Pugin and others", "license": "LGPL 3", "repository": { "type": "git", @@ -20,7 +21,7 @@ "bugs": { "url": "https://github.com/rism-digital/verovio/issues" }, - "homepage": "http://www.verovio.org", + "homepage": "https://www.verovio.org", "engines": { "node": ">= 7.0.0" } diff --git a/emscripten/npm/README.md b/emscripten/npm/README.md index 64ed6f539e4..eac818ee7aa 100644 --- a/emscripten/npm/README.md +++ b/emscripten/npm/README.md @@ -24,14 +24,4 @@ verovio.module.onRuntimeInitialized = function () /* save the SVG into a file */ fs.writeFileSync("hello.svg", svg); } -``` - -### Memory allocation - -The memory available for Verovio can be increased during import by passing a MB value to the `init` function. - -```javascript -var verovio = require('verovio').init(512); -``` - -The value has to be less than 1024MB. +``` \ No newline at end of file diff --git a/emscripten/npm/package.json b/emscripten/npm/package.json index c95f25acb33..23c7a0a7e30 100644 --- a/emscripten/npm/package.json +++ b/emscripten/npm/package.json @@ -11,7 +11,7 @@ "music encoding", "svg" ], - "author": "Laurent Pugin", + "author": "Laurent Pugin and others", "license": "LGPL 3", "repository": { "type": "git", @@ -20,7 +20,7 @@ "bugs": { "url": "https://github.com/rism-digital/verovio/issues" }, - "homepage": "http://www.verovio.org", + "homepage": "https://www.verovio.org", "engines": { "node": ">= 7.0.0" } From 340e0a215f4998b218cc262d934ab0b74916e9c7 Mon Sep 17 00:00:00 2001 From: Laurent Pugin Date: Tue, 22 Feb 2022 12:33:02 +0100 Subject: [PATCH 403/403] Adjust README for npm [skip-ci] --- emscripten/npm-hum/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/emscripten/npm-hum/README.md b/emscripten/npm-hum/README.md index 92572354daf..221bce25107 100644 --- a/emscripten/npm-hum/README.md +++ b/emscripten/npm-hum/README.md @@ -2,7 +2,9 @@ This is an NPM of the stable version of the Verovio JavaScript toolkit with Humd [Verovio](https://www.verovio.org/) is a fast, portable and lightweight library for engraving [Music Encoding Initiative (MEI)](http://www.music-encoding.org) music scores into SVG. -This version of the toolkit includes Humdrum support. See it running in the [Verovio Humdrum Viewer](http://verovio.humdrum.org/). +You can see Verovio with Humdrum support running in the [Verovio Humdrum Viewer](http://verovio.humdrum.org/). + +This version of the toolkit is the same as the [Verovio NPM](https://www.npmjs.com/package/verovio) package except that it includes Humdrum support. ## Usage