diff --git a/app/cmXScore.c b/app/cmXScore.c index 43ada53..9397e35 100644 --- a/app/cmXScore.c +++ b/app/cmXScore.c @@ -1718,13 +1718,13 @@ void _cmXScoreGraceInsertSoonAfterFirst( cmXScore_t* p, unsigned graceGroupId, c // after reordering so that we can be sure that the order in time of // the notes in each group has been set prior to building the // grace note groups - which must be in reverse time order. -cmXsRC_t _cmXScoreProcessGraceNotes( cmXScore_t* p ) +cmXsRC_t _cmXScoreProcessGraceNotes( cmXScore_t* p, unsigned nextGraceGroupId ) { cmXsRC_t rc = kOkXsRC; unsigned graceGroupId = 1; double graceDurSec = 1.0/15.0; // duration of all grace notes in seconds - for(; 1; ++graceGroupId) + for(; graceGroupId<nextGraceGroupId; ++graceGroupId) { cmXsNote_t* gn0p = NULL; // first note in the grace group cmXsNote_t* gn1p = NULL; // last note in the grace group @@ -1776,14 +1776,14 @@ cmXsRC_t _cmXScoreProcessGraceNotes( cmXScore_t* p ) } // for each measure } // for each part - // no records were found for this grace id - we're done + // no records were found for this grace id - this grace group id was not used if( gn0p == NULL ) - break; + continue; // grace note groups must have at least 3 members if( gN < 3 ) { - rc = cmErrMsg(&p->err,kSyntaxErrorXsRC,"The grace not group ending in meas %i has fewer than 3 (%i) members.", gn1p->meas->number, gN ); + rc = cmErrMsg(&p->err,kSyntaxErrorXsRC,"The grace not group (groupid=%i) ending in meas %i has fewer than 3 (%i) members.", gn1p->graceGroupId, gn1p->meas->number, gN ); break; } @@ -2405,6 +2405,12 @@ cmXsRC_t _cmXScoreReorderParseGrace(cmXScore_t* p, const cmChar_t* b, unsigned case 'A': r->graceFlags |= kAFirstGraceXsFl| kEndGraceXsFl; break; case 'n': r->graceFlags |= kNFirstGraceXsFl| kEndGraceXsFl; break; case 'g': break; + + case '1': + r->graceGroupId += 1; + ++s; + continue; + case '%': *graceGroupIdRef += 1; @@ -2625,7 +2631,7 @@ cmXsRC_t _cmXsApplyEditFile( cmXScore_t* p, const cmChar_t* fn ) _cmXScoreSort(p); // process the grace notes. - _cmXScoreProcessGraceNotes( p ); + _cmXScoreProcessGraceNotes( p, graceGroupId ); // inserting grace notes may have left the score unsorted _cmXScoreSort(p); @@ -2633,12 +2639,9 @@ cmXsRC_t _cmXsApplyEditFile( cmXScore_t* p, const cmChar_t* fn ) // process the dynamic forks _cmXScoreProcessDynamicForks(p); + //_cmXScoreReport(p, NULL, true ); - _cmXScoreReport(p, NULL, true ); - - - errLabel: cmFileClose(&fH); cmMemFree(b); @@ -3200,7 +3203,6 @@ void _cmXScoreReportNote( cmRpt_t* rpt, const cmXsNote_t* note,unsigned index ) if( note->graceGroupId != 0) cmRptPrintf(rpt," g=%i",note->graceGroupId); - /* if( cmIsFlag(note->flags,kBegGraceXsFl) ) cmRptPrintf(rpt," B"); @@ -3216,8 +3218,7 @@ void _cmXScoreReportNote( cmRpt_t* rpt, const cmXsNote_t* note,unsigned index ) if( cmIsFlag(note->flags,kDynEndForkXsFl) ) cmRptPrintf(rpt," E"); - - */ + */ } @@ -3965,7 +3966,7 @@ cmXsRC_t cmXScoreTest( } - //cmXScoreReport(h,&ctx->rpt,true); + cmXScoreReport(h,&ctx->rpt,true); return cmXScoreFinalize(&h);