From bad8bc4fc815e6793973b7b00e8619bfc31c9dfa Mon Sep 17 00:00:00 2001 From: James Mizen Date: Fri, 15 Dec 2023 15:45:50 +0000 Subject: [PATCH] Export scores not starting with bar 1 correctly --- .../musicxml/internal/musicxml/exportxml.cpp | 7 +- .../tests/data/testMeasureNumberOffset.xml | 76 +++++++++++++++++++ .../musicxml/tests/musicxml_tests.cpp | 3 + 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 src/importexport/musicxml/tests/data/testMeasureNumberOffset.xml diff --git a/src/importexport/musicxml/internal/musicxml/exportxml.cpp b/src/importexport/musicxml/internal/musicxml/exportxml.cpp index bdc8a36d084ee..72af6c1809b29 100644 --- a/src/importexport/musicxml/internal/musicxml/exportxml.cpp +++ b/src/importexport/musicxml/internal/musicxml/exportxml.cpp @@ -318,6 +318,7 @@ class MeasureNumberStateHandler final private: void init(); int _measureNo; // number of next regular measure + int _measureNoOffset; // measure number offset int _irregularMeasureNo; // number of next irregular measure int _pickupMeasureNo; // number of next pickup measure QString _cachedAttributes; // attributes calculated by updateForMeasure() @@ -7372,6 +7373,7 @@ MeasureNumberStateHandler::MeasureNumberStateHandler() void MeasureNumberStateHandler::init() { _measureNo = 1; + _measureNoOffset = 0; _irregularMeasureNo = 1; _pickupMeasureNo = 1; } @@ -7393,7 +7395,8 @@ void MeasureNumberStateHandler::updateForMeasure(const Measure* const m) } // update measure numbers and cache result - _measureNo += m->noOffset(); + _measureNoOffset = m->noOffset(); + _measureNo += _measureNoOffset; _cachedAttributes = " number="; if ((_irregularMeasureNo + _measureNo) == 2 && m->irregular()) { _cachedAttributes += "\"0\" implicit=\"yes\""; @@ -7412,7 +7415,7 @@ QString MeasureNumberStateHandler::measureNumber() const bool MeasureNumberStateHandler::isFirstActualMeasure() const { - return (_irregularMeasureNo + _measureNo + _pickupMeasureNo) == 4; + return (_irregularMeasureNo + (_measureNo - _measureNoOffset) + _pickupMeasureNo) == 4; } //--------------------------------------------------------- diff --git a/src/importexport/musicxml/tests/data/testMeasureNumberOffset.xml b/src/importexport/musicxml/tests/data/testMeasureNumberOffset.xml new file mode 100644 index 0000000000000..34b35cdb06280 --- /dev/null +++ b/src/importexport/musicxml/tests/data/testMeasureNumberOffset.xml @@ -0,0 +1,76 @@ + + + + + Untitled score + + + Composer / arranger + + MuseScore 0.7.0 + 2007-09-10 + + + + + + + + + + Flute + Fl. + + Flute + + + + 1 + 74 + 78.7402 + 0 + + + + + + + 1 + + 0 + + + + G + 2 + + + + + B + 4 + + 4 + 1 + whole + + + + + + B + 4 + + 4 + 1 + whole + + + light-heavy + + + + diff --git a/src/importexport/musicxml/tests/musicxml_tests.cpp b/src/importexport/musicxml/tests/musicxml_tests.cpp index 22dead07d4b20..14040ba9dbf08 100644 --- a/src/importexport/musicxml/tests/musicxml_tests.cpp +++ b/src/importexport/musicxml/tests/musicxml_tests.cpp @@ -716,6 +716,9 @@ TEST_F(Musicxml_Tests, measureLength) { TEST_F(Musicxml_Tests, measureNumbers) { mxmlIoTest("testMeasureNumbers"); } +TEST_F(Musicxml_Tests, measureNumberOffset) { + mxmlIoTest("testMeasureNumberOffset"); +} TEST_F(Musicxml_Tests, measureRepeats1) { mxmlIoTestRef("testMeasureRepeats1"); }